From a4d7b72a584006197f6769b1dcfafeba3755947b Mon Sep 17 00:00:00 2001 From: Yevhen Stuzhuk Date: Wed, 23 Oct 2024 15:59:36 +0300 Subject: [PATCH] rest-api-quiz-ua translated + readme.md links updated (#7084) --- README.md | 2 +- rest-api/rest-api-quiz-ua.md | 565 +++++++++++++++++++++++++++++++++++ 2 files changed, 566 insertions(+), 1 deletion(-) create mode 100644 rest-api/rest-api-quiz-ua.md diff --git a/README.md b/README.md index 575089e5f4..bd5dcbc655 100644 --- a/README.md +++ b/README.md @@ -139,7 +139,7 @@ | [QuickBooks](quickbooks/quickbooks-quiz.md) | ❗needs updating | | 67 | 40 | | | [R](r/r-quiz.md) | | | 65 | 65 | [@gregglind](https://github.com/gregglind) | | [React.js](reactjs/reactjs-quiz.md) | | [](reactjs/reactjs-quiz-es.md) [](reactjs/reactjs-quiz-ua.md) | 140 | 140 | [@RobTables](https://github.com/RobTables) [@bandinopla](https://github.com/bandinopla) | -| [REST API](rest-api/rest-api-quiz.md) | | | 72 | 72 | | +| [REST API](rest-api/rest-api-quiz.md) | |[](rest-api/rest-api-quiz-ua.md) | 72 | 72 | | | [Revit](revit/revit-quiz.md) | ❗needs updating | | 29 | 29 | | | [Ruby on Rails](ruby-on-rails/ruby-on-rails-quiz.md) | | | 77 | 77 | [@gudata](https://github.com/gudata) | | [Rust](rust/rust-quiz.md) | | | 65 | 65 | [@BobbyByrne](https://github.com/BobbyByrne) [@Emanuele-em](https://github.com/emanuele-em) | diff --git a/rest-api/rest-api-quiz-ua.md b/rest-api/rest-api-quiz-ua.md new file mode 100644 index 0000000000..49078fe7ce --- /dev/null +++ b/rest-api/rest-api-quiz-ua.md @@ -0,0 +1,565 @@ +## REST API + +#### Q1. Який тип відносин визначається як такий, що один ресурс існує лише за умови існування іншого батьківського ресурсу — наприклад, сторінки в книзі? + +- [ ] `Частковий` (Partial) +- [x] `залежний` (dependent) +- [ ] `асоціативний` (associative) +- [ ] `пов'язаний` (linked) + +#### Q2. Який шаблон URL рекомендується використовувати при роботі з одним ресурсом і колекцією ресурсів? + +- [ ] `/companies/{id} і /company` +- [ ] `/company/{id} і /companies` +- [x] `/companies/{id} і /companies` +- [ ] `/company/{id} і /company` + +#### Q3. Що таке claim у JSON web Tokens (JWT)? + +- [x] `дані в токені` +- [ ] `Власність` +- [ ] `дозвіл` +- [ ] `ціле число` + +#### Q4. Яке обмеження REST вказує, що знання та розуміння, отримані від одного компонента API, повинні бути загалом застосовні в інших частинах API? + +- [x] `Єдиний інтерфейс` +- [ ] `Клієнт-Сервер` +- [ ] `Безстанова` +- [ ] `Кешована` + +#### Q5. Що потрібно ввімкнути, щоб дозволити браузеру на іншому сайті зробити AJAX-запит до вашого API? + +- [ ] `HTTP` +- [ ] `REST` +- [ ] `OPTIONS` +- [x] `CORS` + +#### Q6. API зазвичай використовують вебхуки для **\_**. + +- [x] `сповіщення інших систем про подію` +- [ ] `швидшого виявлення помилок` +- [ ] `покращення журналювання помилок` +- [ ] `журналювання додаткових даних` + +#### Q7. Яка основна мета всіх API? + +- [ ] `додавати нові технології до інфраструктури організації.` +- [x] `ділитися функціями та можливостями з іншими системами.` +- [ ] `переносити інфраструктуру в хмару.` +- [ ] `задовольняти останні вимоги цифрової трансформації.` + +#### Q8. Яка консольна утиліта є поширеним інструментом для використання або дослідження API? + +- [ ] `bash` +- [x] `curl` +- [ ] `ssh` +- [ ] `powerShell` + +#### Q9. Яка сучасна специфікація використовується для опису API? + +- [x] `OpenAPI (Swagger)` +- [ ] `WADL` +- [ ] `WSDL` +- [ ] `OAuth` + +[OpenAPI Specification](https://swagger.io/specification/) + +#### Q10. Яке HTTP дієслово зазвичай використовується для оновлення або створення ресурсу в API? + +- [ ] `SUBMIT` +- [ ] `WRITE` +- [x] `POST` +- [ ] `CREATE` + +[HTTP request methods](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods) + +#### Q11. Яка одна з переваг кешування на стороні сервера в API? + +- [ ] `Мобільні додатки працюють краще.` +- [ ] `Це покращує доступність.` +- [ ] `Це забезпечує кращу безпеку.` +- [x] `Це зменшує навантаження на сервери.` + +#### Q12. API ресурсу не дозволяє видалення, але клієнтська програма спробувала видалити ресурс. Який код відповіді HTTP слід повернути? + +- [ ] `409 Conflict` +- [ ] `400 Bad Request` +- [ ] `406 Not Acceptable` +- [x] `405 Method Not Allowed` + +[Response Codes](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status#successful_responses) + +#### Q13. Що таке OpenID Connect? + +- [x] `шар ідентифікації поверх OAuth 2.0` +- [ ] `нова назва для SAML 3.0` +- [ ] `сучасна заміна API-ключів` +- [ ] `конкурент SSO для OAuth 2.0` + +[What is OpenID Connect?](https://openid.net/connect/) + +#### Q14. Яка одна з переваг GraphQL над підходами REST? + +- [x] `гнучкі запити/відповіді` +- [ ] `стабільніші API` +- [ ] `сумісність з більшою кількістю шлюзів` +- [ ] `безпечніший за замовчуванням` + +[GraphQL vs. REST](https://www.apollographql.com/blog/graphql/basics/graphql-vs-rest/) + +#### Q15. Яке обмеження REST вказує, що не повинно бути спільного контексту? + +- [x] `Безстанова` +- [ ] `Клієнт-Сервер` +- [ ] `Єдиний інтерфейс` +- [ ] `Кешована` + +#### Q16. Яку роль виконує User-Agent? + +- [ ] `Ідентифікує ID користувача.` +- [x] `Ідентифікує клієнтський застосунок або SDK.` +- [ ] `Вказує, чи API має очікувати автентифікацію користувача.` +- [ ] `Вказує, чи API має приймати трафік мікросервісів.` + +#### Q17. Якщо додати версіонування за допомогою заголовків Accept і Content-Type, який правильний формат значення заголовка? + +- [ ] `application/json` +- [ ] `application/json_version2` +- [ ] `text/html` +- [x] `application/vnd.myapp.v2+json` + +[Довідка](https://blog.allegro.tech/2015/01/Content-headers-or-how-to-version-api.html) + +#### Q18. Яка одна з переваг OAuth порівняно з підходом API-ключів? + +- [ ] `Токен зашифрований.` +- [ ] `Токен закодований.` +- [x] `Токен обмежений для конкретного випадку використання.` +- [ ] `Токен можна передавати між системами.` + +[How to easily secure your APIs with API keys and OAuth](https://apifriends.com/api-security/api-keys-oauth/) + +#### Q19. Можливість виконувати один і той самий запит API знову і знову без зміни стану ресурсу є прикладом \_. + +- [ ] `безстанової архітектури` +- [x] `ідемпотентності` +- [ ] `єдиного інтерфейсу` +- [ ] `кешованості` + +#### Q20. Який компонент можна використовувати для обгортання застарілих архітектур або протоколів у REST-інтерфейс для полегшення споживання та інтеграції? + +- [x] `API-проксі` +- [ ] `API-шлюз` +- [ ] `OpenAPI` +- [ ] `OAuth-сервер авторизації` + +#### Q21. Який захист пропонує JSON Web Token (JWT) для запобігання підробці його вмісту? + +- [ ] `транспортування через SSL` +- [ ] `зашифрований вміст` +- [x] `підпис` +- [ ] `закодований вміст` + +#### Q22. Який термін OAuth використовується для позначення дозволів? + +- [ ] `token` +- [x] `scope` +- [ ] `claim` +- [ ] `back channel` + +[OAuth Scopes](https://oauth.net/2/scope/) + +#### Q23. Який додатковий тип токену можна побачити при використанні OpenID Connect? + +- [x] `ID token` +- [ ] `refresh token` +- [ ] `access token` +- [ ] `auth code token` + +#### Q24. Що слід додати до заголовка відповіді Cache-Control, щоб вказати, що відповідь не повинна зберігатися в проміжному кеші? + +- [ ] `no-proxy` +- [ ] `client-only` +- [ ] `restricted` +- [x] `private` + +[довідка](https://www.digitalocean.com/community/tutorials/web-caching-basics-terminology-http-headers-and-caching-strategies) + +#### Q25. Який тип OAuth-гранту може підтримувати refresh-токен? + +- [x] `Authorization Code Grant` +- [ ] `Client Credentials Grant` +- [ ] `Implicit Grant` +- [ ] `Authentication Grant` + +[Довідка](https://datatracker.ietf.org/doc/html/rfc6749#section-4.4.3) + +#### Q26. Яку область слід запитати в OAuth для доступу на запис до API? + +- [ ] `Це залежить від API.` +- [x] `admin` +- [ ] `write` +- [ ] `read-write` + +#### Q27. Яку властивість слід використовувати для включення підресурсів безпосередньо в JSON-документ? + +- [ ] `_embedded` +- [ ] `resources` +- [x] `subresources` +- [ ] `_links` + +#### Q28. Який найкращий спосіб відстежувати використання SDK і версій? + +- [x] `відстеження завантажень` +- [ ] `заголовки Accept` +- [ ] `user agents` +- [ ] `опитування користувачів` + +#### Q29. Яке обмеження REST дозволяє наявність кешування, маршрутизації та інших систем між клієнтом і сервером? + +- [x] `Шарова система` +- [ ] `Безстанова` +- [ ] `Клієнт-Сервер` +- [ ] `Кешована` + +#### Q30. Який вміст найкраще включити у документацію? + +- [ ] `стек технологій` +- [ ] `обґрунтування схеми іменування` +- [ ] `місія` +- [x] `приклад коду` + +#### Q31. Яка метрика відстежує загальну доступність API? + +- [ ] `Час відповіді` +- [ ] `Час до першого Hello World` +- [ ] `TTL` +- [x] `Час безвідмовної роботи` + +#### Q32. Який рекомендований метод і шаблон URL для отримання конкретного користувача? + +- [ ] `GET /user/{id}` +- [x] `GET /users/{id}` +- [ ] `GET /user?id={id}` +- [ ] `GET /users?id={id}` + +#### Q33. Яка мета відношення посилання? + +- [ ] `описувати відносини між ресурсами або діями` +- [ ] `описувати підресурси, пов'язані з поточним` +- [x] `зв'язувати два ресурси` +- [ ] `описувати ресурс і його призначення` + +#### Q34. Які мови слід підтримувати при створенні SDK? + +- [ ] Java, Javascript і .NET +- [ ] які ви можете підтримувати +- [ ] PHP, Python і Go +- [x] мови, які використовують цільові користувачі + +#### Q35. Яку властивість слід використовувати для включення посилань на інші ресурси в JSON-документ? + +- [x] `resources` +- [ ] `_embedded` +- [ ] `subresources` +- [ ] `_links` + +#### Q36. Що таке OAuth? + +- [x] фреймворк авторизації для надання делегованого доступу +- [ ] підхід до єдиного входу для API +- [ ] метод автентифікації API +- [ ] HTTP Basic Authentication 2.0 + +#### Q37. Що має описувати документація API? + +- [ ] JSON +- [ ] HTTP +- [x] поширені випадки використання +- [ ] стек технологій + +#### Q38. Яка мета refresh-токену в OAuth? + +- [ ] ділитися інформацією профілю користувача +- [ ] оновлювати конфігурацію API +- [ ] підтримувати активність веб-сесії +- [x] отримувати access-токен + +[Understanding Refresh Tokens](https://auth0.com/learn/refresh-tokens/) + +#### Q39. Що таке Time to First Hello World? + +- [x] скільки часу потрібно розробнику, щоб зробити щось з вашим API +- [ ] скільки часу потрібно, щоб почати нову мову програмування +- [ ] скільки часу потрібно для встановлення вашого SDK +- [ ] скільки часу потрібно для прочитання вашої документації + +#### Q40. Який заголовок відповіді повідомляє клієнту та проміжним системам, що відповідь не слід кешувати ніде? + +- [ ] Cache-State: none +- [ ] Expires:-1 +- [ ] Cache-Control: no-cache +- [x] Cache-Control: no-store + +#### Q41. Який компонент приховує відмінності або межі між різними мікросервісами від кінцевих клієнтських застосунків? + +- [x] `API-шлюз` +- [ ] `API-журналювання` +- [ ] `шарова система` +- [ ] `API-проксі` + +#### Q42. Класичний підхід до версіонування API полягає у використанні **\_**. + +- [ ] `загальновідомих знань` +- [ ] `URL` +- [ ] `відсутності версіонування` +- [x] `заголовка Accept` + +#### Q43. Який найбезпечніший спосіб передати API-ключ? + +- [ ] `параметр URL` +- [x] `заголовок Authorization` +- [ ] `Base64-кодування` +- [ ] `Basic Auth` + +#### Q44. Який компонент в OAuth перевіряє особу користувача? + +- [ ] `клієнт` +- [ ] `не вказано` +- [x] `сервер авторизації` +- [ ] `сервер ресурсів` + +#### Q45. Трафік API, який повністю внутрішній для вашої організації, зазвичай називається \_? + +- [ ] `вхідний трафік` +- [ ] `північ-південь трафік` +- [x] `внутрішній трафік` +- [ ] `схід-захід трафік` + +#### Q46. Який найкращий підхід для запиту JSON замість XML з API? + +- [ ] `Додати .json до URL.` +- [ ] `API не використовують XML.` +- [ ] `Використовувати заголовок Content-Type.` +- [x] `Використовувати заголовок Accept.` + +#### Q47. Коли користувач намагається отримати доступ до запису, який йому не належить, який код відповіді HTTP є найбільш відповідним? + +- [x] `403` +- [ ] `404` +- [ ] `401` +- [ ] `405` + +[Response Codes](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status#successful_responses) + +#### Q48. Яка перевага використання API-шлюзу? + +- [ ] `HTTP-дієслова` +- [ ] `JSON-навантаження` +- [ ] `HTTP-коди відповіді` +- [x] `обмеження швидкості/дроселювання` + +#### Q49. Тестування API має розглядатися як **\_**? + +- [ ] `red team тестування` +- [ ] `white box тестування` +- [ ] `blue box тестування` +- [x] `black box тестування` + +#### Q50. Яке HTTP-дієслово використовується в попередньому запиті CORS? + +- [ ] `PUT` +- [ ] `POST` +- [ ] `GET` +- [x] `OPTIONS` + +#### Q51. Який заголовок відповіді повідомляє клієнту, що відповідь кешується протягом 1 хвилини? + +- [ ] `Expires: 1 minute` +- [x] `Cache-Control: max-age=60` +- [ ] `Expires: 1 January 2020` +- [ ] `Cache-Expires: max-age=60` + +[Cache Control Header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control) + +#### Q52. Яка концепція дозволяє клієнту API досліджувати API через посилання, вбудовані в навантаження? + +- [ ] `гіпермедіа` (hypermedia) +- [x] `відношення посилань` (link relations) +- [ ] `парсинг` (parsing) +- [ ] `перегляд` (browsing) + +#### Q53. Який код відповіді HTTP слід отримати при створенні нового ресурсу? + +- [ ] `405` +- [x] `201` +- [ ] `204` +- [ ] `202` + +[Response Codes](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status#successful_responses) + +#### Q54. Який приклад Code on Demand? + +- [ ] AWS Lambda +- [ ] завантаження програмного забезпечення з відкритим кодом +- [ ] Serverless +- [x] JavaScript на вебсторінці + +[Code on Demand](https://en.wikipedia.org/wiki/Code_on_demand) + +#### Q55. Який шаблон URL слід використовувати для доступу до підресурсу, прикріпленого до конкретного ресурсу? + +- [ ] /companies/employees/{companyId}/{employeeId} +- [ ] /company/{companyId}/employees/{employeeId} +- [x] /companies/{companyId}/employees/{employeeId} +- [ ] /companies/{companyId}/employee/{employeeId} + +[Resource Naming](https://restfulapi.net/resource-naming/) + +#### Q56. Яке обмеження REST фактично забороняє використання файлів cookie? + +- [x] Безстанова (Stateless) +- [ ] Кешована (Cacheable) +- [ ] Шарова система (Layered System) +- [ ] Єдиний інтерфейс (Uniform Interface) + +#### Q57. Яке HTTP-дієслово використовується для видалення ресурсу? + +- [ ] FLUSH +- [x] DELETE +- [ ] CLEAR +- [ ] DESTROY + +#### Q58. Яке дієслово _не_ вважається ідемпотентним? + +- [ ] DELETE +- [ ] GET +- [ ] PUT +- [x] POST + +[Idempotency](https://restfulapi.net/idempotent-rest-apis/) + +#### Q59. Яке обмеження REST вказує, що кожен запит має бути самодостатнім і не мати певного обов'язкового порядку? + +- [ ] Єдиний інтерфейс ( Uniform Interface) +- [ ] Кешована (Cacheable) +- [x] Безстанова (Stateless) +- [ ] Клієнт-Сервер (Client-Server) + +[REST Architectural Constraints](https://restfulapi.net/rest-architectural-constraints/) + +#### Q60. Що слід зробити після отримання коду відповіді 429? + +- [ ] Перевірити структуру JSON. +- [x] Сповільнити запити. +- [ ] Перевірити статус доступності API. +- [ ] Перевірити API-ключ. + +#### Q61. Який найкращий підхід для пагінації при дослідженні наборів записів? + +- [ ] фільтрація за датою +- [x] курсори наступний/попередній +- [ ] розмір сторінки та фільтри +- [ ] ID бази даних + +#### Q62. Що _не_ є методом автентифікації або авторизації API? + +- [ ] OAuth +- [x] біометрія +- [ ] API-ключі +- [ ] ім'я користувача та пароль + +#### Q63. Який код відповіді HTTP зазвичай означає, що запитана робота все ще обробляється і може завершитися помилкою пізніше? + +- [ ] 200 OK +- [ ] 204 No Content +- [ ] 201 Created +- [x] 202 Accepted + +#### Q64. Які з claim необхідно підтвердити під час валідації JWT? (Виберіть усі, що підходять.) + + A. Термін дії (exp) не минув. + B. Алгоритм є достатнім. + C. Підпис відповідає навантаженню. + D. Токен був закодований у Base64. + E. Видавець (iss) є очікуваним сервером авторизації. + F. Є refresh-токен. + G. Ідентифікатор клієнта (cid) є очікуваним клієнтом. + H. Токен був зашифрований. + +- [x] A,B,E,H +- [ ] B,C,F,G +- [ ] A,D,G,H +- [ ] A,C,E,G + +#### Q65. Трафік API, який входить і виходить з вашої організації, зазвичай називається **\_**? + +- [ ] `схід-захід трафік` (east-west traffic) +- [ ] `вхідний трафік` (inbound traffic) +- [x] `північ-південь трафік` (north-south traffic) +- [ ] `зовнішній трафік` (external traffic) + +[North-South vs East-West Traffic](https://www.snapt.net/glossary/north-south-vs-east-west-traffic) + +#### Q66. Який тип OAuth-гранту підходить для мобільних застосунків? + +- [x] Authorization Code з PKCE +- [ ] Client Credentials +- [ ] Device +- [ ] Resource Owner Password + +[OAuth 2.0 for Native and Mobile Apps](https://developer.okta.com/blog/2018/12/13/oauth-2-for-native-and-mobile-apps) + +#### Q67. Який формат дати й часу є найпростішим або найбільш передбачуваним для парсингу та обробки? + +- [ ] `YY-M-D hh:mm:ss+TZ` +- [ ] `YY-M-D h:mm:ss` +- [x] `YYYY-MM-DDThh:mm:ssZ` +- [ ] `YYYY-M-D hh:mm:ss` + +[The 5 laws of API dates and times](https://apiux.com/2013/03/20/5-laws-api-dates-and-times/) + +#### Q68. Який заголовок _не_ використовується в керуванні кешем? + +- [x] Rate-Limit +- [ ] Expires +- [ ] Etag +- [ ] Cache-Control + +[Cache-Control](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control) +[Expires](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Expires) +[Etag](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag) +[Rate limiting your RESTful API](https://medium.com/@guillaume.viguierjust/rate-limiting-your-restful-api-3148f8e77248) + +#### Q69. Клієнтська програма використовує фільтр або пошук у API правильно, але результатів немає. Який найкращий код відповіді? + +- [ ] 204 No Content +- [ ] 400 Bad Request +- [x] 200 OK +- [ ] 404 Not Found + +[Response Status Codes](https://www.rfc-editor.org/rfc/rfc7231#section-6) + +#### Q70. Яке HTTP-дієслово зазвичай використовується для отримання або створення ресурсу в API? + +- [ ] `RETRIEVE` +- [ ] `FORM` +- [x] `GET` +- [ ] `READ` + +#### Q71. Який код відповіді HTTP слід отримати при створенні нового ресурсу? + +- [ ] `200` +- [ ] `405` +- [x] `201` +- [ ] `204` + +[HTTP request methods](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods) + +#### Q72. Ви розробляєте RESTful API для нового проекту на GitHub. Безпека є головним пріоритетом, і ви хочете переконатися, що лише авторизовані користувачі можуть отримати доступ до певних кінцевих точок. Який з наступних механізмів слід використовувати для досягнення цієї мети? + +- [ ] Обмеження швидкості API +- [x] OAuth 2.0 +- [ ] Basic Authentication +- [ ] HTTP Basic Auth