Питання на співбесіді з проєктування API з відповідями
REST-ресурси та семантика HTTP, коди статусу, помилки, пагінація й фільтрація, версіонування, ідемпотентність, кешування, автентифікація, OpenAPI, GraphQL, gRPC, вебхуки та real-time API.
225 запитань для співбесіди з теми Проєктування API з відповідями й поясненнями - рівні Junior, Middle і Senior. Приклади запитань, онлайн-тести й задачі на код.
- REST
- HTTP
- OpenAPI
- GraphQL
- Webhooks
Запитання за рівнями
Junior
Базові поняття та синтаксис · 50 запитань
Middle
Практика, нюанси й оптимізація · 50 запитань
Senior
Архітектура, внутрішня будова, edge cases · 50 запитань
Приклади запитань
Кілька запитань із кожного рівня з правильною відповіддю й поясненням.
Проєктування API · Junior
- Що таке REST API на практиці?
Правильна відповідь: HTTP API, організований навколо ресурсів з URL-адресами, з якими працюють стандартними методами GET, POST, PUT, PATCH і DELETE
REST - архітектурний стиль, описаний Роєм Філдінгом. Більшість «REST API» дотримуються його головних ідей: ресурси, уніфікований інтерфейс, відсутність стану й кешованість.
- Який дизайн URL відповідає поширеним домовленостям REST?
Правильна відповідь:
GET /users/42/ordersURL називають ресурси (іменники, зазвичай у множині); HTTP-метод каже, що робити. Дієслова в шляхах - це RPC-стиль.
- Що означає «без стану» (stateless) для REST API?
Правильна відповідь: Кожен запит несе все, що потрібно серверу (наприклад, токен автентифікації); сервер не покладається на стан сесії з попередніх запитів
Відсутність стану спрощує горизонтальне масштабування: будь-який інстанс може обробити будь-який запит.
- Який HTTP-метод має створювати новий ресурс у колекції, наприклад нове замовлення?
Правильна відповідь:
POST /ordersID призначає сервер і зазвичай відповідає
201 Createdіз заголовкомLocation, що вказує на новий ресурс.
Проєктування API · Middle
- Як змоделювати «скасувати замовлення» в REST API?
Правильна відповідь: Як зміну стану (
PATCH /orders/42з{status: "cancelled"}) або власну дію (POST /orders/42:cancelчи/orders/42/cancellation), задокументовану послідовноСкасоване замовлення зазвичай лишається для історії й може мати бізнес-правила. Окрема дія робить ці правила явними; GET ніколи не повинен змінювати стан.
- Коли зв'язок має бути окремим ресурсом, як-от
/users/42/memberships?Правильна відповідь: Коли він має власні дані чи життєвий цикл (роль, дата вступу, схвалення), а не лише посилання між двома елементами
Членство як ресурс дає природні операції створення, оновлення й видалення над ним.
- Як виглядає JSON Patch (RFC 6902)?
Правильна відповідь: Список операцій на кшталт
{ "op": "replace", "path": "/email", "value": "a@b.c" }Операції: add, remove, replace, move, copy і test. Він точний для масивів, але складніший для клієнтів.
- Як REST API може дати клієнтам завантажити пов'язані ресурси одним запитом?
Правильна відповідь: Параметром розгортання на кшталт
?include=author,comments(JSON:API) чи?expand=customerРозгортання позбавляє «балакучих» клієнтів і тримає відповіді за замовчуванням малими. Обмежте глибину й кількість зв'язків.
Проєктування API · Senior
- Як обирати між REST, GraphQL і gRPC для нової системи?
Правильна відповідь: За споживачами й обмеженнями: REST для публічних кешованих API ресурсів; GraphQL для різноманітних потреб UI в даних; gRPC для внутрішніх швидких викликів між сервісами з типізованими контрактами
Багато систем поєднують їх: gRPC між сервісами, GraphQL чи REST BFF для клієнтів і REST для публічних партнерів.
- Що таке мислення «API як продукт»?
Правильна відповідь: Ставитися до споживачів API як до клієнтів: стабільні контракти, добра документація, онбординг, політика версіонування, підтримка й метрики використання
Внутрішнім API це теж корисно: інші команди - клієнти, чия продуктивність залежить від вашого дизайну.
- Навіщо запроваджувати governance API (стайлгайд, рев'ю, лінтинг) в організації з багатьма командами?
Правильна відповідь: Щоб API відчувалися як одна платформа: послідовні назви, помилки, пагінація й автентифікація, що знижує вартість інтеграції для кожного споживача
Автоматизуйте, що можна (правила Spectral, перевірки несумісних змін), а людське рев'ю лишайте для рішень щодо моделювання.
- Як закон Гайрема й «будь консервативним у тому, що надсилаєш» взаємодіють у розвитку API?
Правильна відповідь: Від кожної помітної поведінки хтось залежатиме, тож відкривайте якнайменше, явно документуйте гарантії й уникайте випадкових контрактів на кшталт порядку полів
Навіть текст повідомлення помилки, порядок сортування за замовчуванням чи час відповіді можуть стати тим, на що покладаються клієнти.
Збірні тести з цією темою
Запитання з кількох тем одразу - як на співбесіді на конкретну вакансію.
Задачі на код
Напишіть рішення просто в браузері - тести перевірять його одразу. Класика співбесід на JavaScript (debounce, deepClone, Promise.all, LRU-кеш) і на React: компоненти й хуки на кшталт списку справ, вкладок, useDebounce та useInterval.
Відкрити задачі →