REST API: архитектура, практика и собеседования

Этот набор карточек помогает системно изучить REST API на уровне middle, senior и system design. В него входят вопросы и ответы по ключевым темам: базовые принципы REST, HTTP-методы и статусы, проектирование ресурсов, API-контракты, валидация, версионирование, обратная совместимость, безопасность, авторизация, кеширование, пагинация, производительность, асинхронные операции, webhook-интеграции, observability и эксплуатация. Карточки подходят для подготовки к техническим собеседованиям, архитектурным ревью, проектированию публичных и внутренних API, а также для углубленного изучения production-подходов. Особое внимание уделено не только теории, но и практическим сценариям: обработке ошибок, idempotency key, rate limiting, optimistic locking, N+1 проблемам, bulk operations, API gateway, multi-tenant SaaS и интеграциям с внешними клиентами. Набор будет полезен backend-разработчикам, fullstack-разработчикам, тимлидам и архитекторам, которые хотят проектировать надежные, безопасные и масштабируемые REST API. Его можно использовать как чек-лист перед разработкой API, основу для повторения перед интервью или структурированный план изучения REST-подхода в реальных проектах.

You can start studying this pack. You'll receive 488 messages to help you review each card multiple times, following the principles of the forgetting curve.

Learn more about the spaced repetition method.
REST API — что это, ограничения и типичные проблемы

Что такое REST API и какие ограничения/проблемы связаны с REST-архитектурой?

1/122
stateless-подход в REST API

Что означает stateless-подход в REST API, включая хранение состояния на клиенте, влияние на масштабирование и ограничения при реализации пользовательских сессий?

2/122
Resource-oriented design в REST API

Что такое resource-oriented design в REST API, включая моделирование сущностей как ресурсов, выбор URI и проблемы при переносе бизнес-действий в ресурсную модель?

3/122
Проектирование URI ресурсов в REST API

Как правильно проектировать URI ресурсов в REST API, включая вложенность, читаемость, стабильность адресов и ограничения слишком глубокой иерархии?

4/122
Выбор HTTP-методов для REST API

Как выбирать HTTP-методы для REST API: правила использования GET, POST, PUT, PATCH, DELETE и как избегать неправильного применения методов для бизнес-операций.

5/122
Идемпотентность HTTP-методов

Что такое идемпотентность HTTP-методов, включая поведение PUT и DELETE, отличие от безопасности метода и последствия для повторных запросов после сетевых ошибок?

6/122
Safe method в HTTP

Что означает safe method в HTTP, и какие у этого последствия для GET, кеширования и почему нельзя выполнять изменяющие операции через GET?

7/122
HTTP status codes в REST API

Как правильно использовать HTTP status codes в REST API, включая 2xx, 3xx, 4xx, 5xx и проблемы возврата всех ошибок через 200 OK?

8/122
Формат REST API ответа — envelope, payload, metadata

Краткое руководство по проектированию формата ответа REST API: оболочка (envelope), полезная нагрузка (payload), метаданные и компромиссы между единообразием и избыточностью.

9/122
HTTP 400, 401, 403, 404, 409, 422 — как различать в REST API

Как различать ошибки 400, 401, 403, 404, 409 и 422 в REST API, включая практические сценарии применения и риски неоднозначной обработки клиентами?

10/122
Формат ошибок в REST API

Как проектировать формат ошибок в REST API: machine-readable code, human-readable message, details, trace id и управление раскрытием внутренних деталей.

11/122
HTTP-заголовки в REST API

Краткий обзор использования ключевых HTTP-заголовков в REST API: Content-Type, Accept, Authorization, ETag, Cache-Control и ограничения при переносе бизнес-данных в заголовки.

12/122
OpenAPI Specification (OAS)

Что такое OpenAPI Specification, включая описание эндпоинтов, схем, параметров, ошибок и ограничения автогенерации документации из кода?

13/122
Документация REST API

Как организовать документацию REST API, включая примеры запросов, примеры ошибок, сценарии использования и проблемы устаревания документации относительно реализации?

14/122
Валидация запросов в REST API

Как проектировать валидацию запросов в REST API: проверка типов, обязательных полей, бизнес-ограничений и отличие синтаксической и доменной ошибки.

15/122
Проектирование контракта REST API

Как проектировать контракт REST API, включая request schema, response schema, обязательные поля и проблемы обратной совместимости при изменении контракта?

16/122
Enum-поля в REST API: проектирование и эволюция

Как проектировать enum-поля в REST API, чтобы обеспечить расширяемость, корректное поведение старых клиентов и избежать проблем с жёсткой клиентской валидацией?

17/122
Response validation в REST API: проектирование, совместимость и тесты

Как проектировать проверку ответов (response validation) в REST API, чтобы обеспечивать соответствие контракту, защищаться от случайных breaking changes и минимизировать влияние на интеграционные тесты?

18/122
Управление изменениями схемы REST API

Как управлять изменениями схемы REST API, включая добавление новых полей, удаление старых полей, изменение типов и риски для существующих клиентов?

19/122
Проектирование nullable и optional полей в REST API

Как проектировать nullable и optional поля в REST API: различие между отсутствующим полем, null и пустым значением; и какие проблемы возникают при частичном обновлении данных.

20/122
Проектирование API-контракта для разных клиентов

Как проектировать API-контракт для web, mobile и внешних интеграций, и какие компромиссы между универсальным API и клиент-специфичными endpoint'ами учитывать?

21/122
Моделирование REST-ресурсов

Как моделировать основные ресурсы REST API, включая идентификаторы, связи между сущностями, жизненный цикл ресурса и проблемы утечки внутренней структуры базы данных наружу?

22/122
Проектирование вложенных ресурсов в REST API

Как решать, когда использовать пути вида /users/{id}/orders, когда делать независимые коллекции и как избегать проблем дублирования сущностей в нескольких путях.

23/122
Выбор формата идентификаторов ресурсов (auto-increment, UUID, ULID и трейд‑оффы)

Как выбирать формат идентификаторов ресурсов: автоинкрементные целые, UUID, ULID — и какие компромиссы между читаемостью, безопасностью и производительностью индексов?

24/122
Агрегированные ресурсы в REST API

Краткие рекомендации по проектированию агрегированных ресурсов: summary-поля, вычисляемые значения, денормализация и риски рассинхронизации.

25/122
Many-to-many в REST API

Как проектировать связи many-to-many в REST API, включая отдельные linking resources, вложенные endpoints и ограничения при обновлении связей?

26/122
Проектирование include/expand в REST API

Как проектировать механизм include/expand в REST API: загрузку связанных сущностей, борьбу с N+1 и ограничения чрезмерно гибких запросов.

27/122
Partial response в REST API

Как проектировать partial response в REST API, включая выбор полей клиентом, экономию трафика и проблемы усложнения кеширования и авторизации полей?

28/122
Проектирование DTO для REST API

Как проектировать DTO для REST API, отделять API-модель от сущности БД, защищать внутренние поля и учитывать цену маппинга?

29/122
PATCH в REST: JSON Merge Patch, JSON Patch и частичные обновления

Как проектировать PATCH-запросы в REST API, включая JSON Merge Patch, JSON Patch, частичное обновление полей и работу с null-значениями?

30/122
Проектирование bulk operations в REST API

Как проектировать массовые операции (create/update/delete) в REST API и корректно обрабатывать частичные успехи и ошибки.

31/122
Версионирование REST API

Как версионировать REST API: варианты (версия в URL, в заголовке, версия в media type) и их компромиссы для публичных и внутренних API.

32/122
Проектирование ресурсных состояний в REST API

Как моделировать состояния ресурса (draft, active, archived, deleted) и задавать ограничения переходов между ними в REST API.

33/122
Удаление устаревших REST endpoints

Как безопасно удалять устаревшие endpoints REST API, включая мониторинг использования, уведомление клиентов, grace period и риски silent breakage?

34/122
Обратная совместимость REST API

Как поддерживать backward compatibility REST API, включая additive changes, deprecation policy, migration windows и проблемы клиентов, которые редко обновляются?

35/122
Feature rollout в REST API

Как проектировать feature rollout в REST API: флаги фич, постепенный релиз, canary-клиенты и управление несовместимостями между backend и frontend.

36/122
Версионирование мобильных клиентов в REST API

Как обрабатывать разные версии мобильных клиентов в REST API, учитывая долгий жизненный цикл приложений, необходимость принудительных обновлений и ограниченную поддержку старых контрактов?

37/122
Аутентификация в REST API: session cookie, bearer token, JWT, trade-offs

Как проектировать аутентификацию в REST API: сравнение session cookie, bearer token, JWT и компромиссы между stateless и управляемым хранением сессий.

38/122
Проектирование авторизации в REST API

Краткое руководство: как проектировать авторизацию в REST API, включая RBAC, ABAC, проверки владельца и проверку прав на уровне ресурсов.

39/122
Защита REST API от CSRF

Как защищать REST API от CSRF, включая разницу cookie-based и bearer token, роль SameSite и почему защита только на уровне frontend ненадёжна.

40/122
Безопасное использование JWT в REST API

Как безопасно использовать JWT в REST API, включая срок жизни токена, refresh token, отзыв токенов и проблемы хранения токенов на клиенте?

41/122
Защита REST API от XSS-рисков

Как защищать REST API от XSS-рисков, включая хранение токенов, sanitization данных, output encoding и последствия компрометации клиентского приложения?

42/122
Защита REST API от brute force и credential stuffing

Краткое руководство по защите REST API от brute force и credential stuffing: комбинация ограничений скорости, блокировок аккаунтов, CAPTCHA, риск-ориентированных проверок и мониторинга с учётом компромиссов по UX.

43/122
Проектирование rate limiting для REST API

Как проектировать rate limiting для REST API: лимиты по пользователю, IP, API key, endpoint и как честно распределять квоты между клиентами.

44/122
Проектирование CORS для REST API

Как проектировать CORS для REST API, включая allowed origins, credentials, preflight requests и проблемы небезопасного wildcard-конфига?

45/122
Проектирование API-ключей для внешних интеграций

Как проектировать API-ключи для внешних интеграций — охватывая scopes, ротацию, истечение, аудит и защиту от утечек у клиентов?

46/122
Защита REST API от mass assignment

Как защищать REST API от mass assignment, включая whitelist полей, DTO-валидацию и проблемы прямого маппинга request body в ORM entity?

47/122
Ограничение доступа к чувствительным данным в REST API

Кратко: чтобы защитить персональные и чувствительные данные, нужно сочетать аутентификацию, авторизацию на уровне полей, маскирование/токенизацию, строгие политики логирования и процессы управления ключами/данными. Ниже — практические подходы, примеры и контроль рисков утечки.

48/122
Кеширование REST API

Как проектировать кеширование REST API, включая Cache-Control, ETag, Last-Modified, CDN и проблемы кеширования персонализированных данных?

49/122
Пагинация в REST API: offset, cursor (keyset) и компромиссы

Как проектировать пагинацию в REST API, включая offset pagination, cursor/keyset pagination и какие компромиссы учитывать при больших объёмах данных?

50/122
Проектирование сортировки в REST API

Как проектировать сортировку в REST API: стабильный порядок, индексы базы данных, сортировка по нескольким полям и проблемы недетерминированной пагинации.

51/122
ETag в REST API

Короткий обзор использования ETag в REST API: как применять для conditional GET, для optimistic concurrency control и какие есть ограничения при вычислении ETag для агрегированных ресурсов.

52/122
Фильтрация в REST API

Как проектировать фильтрацию в REST API: query-параметры для простых фильтров, форматы для диапазонов и списков, подходы к полнотекстовому поиску и меры против слишком гибкого query language.

53/122
Предотвращение N+1 в REST API

Краткое руководство: как обнаруживать и предотвращать проблему N+1 в REST API — методы eager loading, batching, подходы типа DataLoader, а также влияние параметров include/expand на производительность.

54/122
Response compression в REST API

Как проектировать response compression в REST API, включая gzip, Brotli, размер payload и trade-offs между CPU и сетевым трафиком?

55/122
Оптимизация REST API для мобильных клиентов

Как оптимизировать REST API для мобильных клиентов: уменьшить latency, объем ответа, учесть нестабильную сеть и снизить проблемы от чрезмерно гранулярных endpoint-ов.

56/122
Проектирование API для больших файлов

Как проектировать API для загрузки больших файлов: multipart upload, resumable upload, pre-signed URLs и когда нельзя проксировать файлы через основной бэкенд?

57/122
Консистентность, транзакции и конкурентность

Краткий обзор ключевых понятий: консистентность, транзакции и механизмы управления конкуренцией в системах хранения данных.

58/122
Проектирование создания ресурса в REST API

Как проектировать создание ресурса в REST API с учётом транзакций, валидации, побочных эффектов и частичных операций?

59/122
Обработка повторных POST-запросов: idempotency, retry, дубли и таймауты

Как обрабатывать повторные POST-запросы в REST API: idempotency key, логика повторных попыток, обнаружение дубликатов и ситуация, когда клиент получает таймаут после того, как операция уже успешно выполнена на сервере?

60/122
Проектирование download endpoints в REST API

Краткий обзор подходов к отдаче файлов через REST: стриминг, поддержка Range (resume), контроль доступа и способы избежать OOM при больших файлах.

61/122
Optimistic locking в REST API

Как проектировать optimistic locking в REST API: поля версий, ETag, If-Match и поведение при одновременных изменениях.

62/122
Read-after-write consistency в REST API

Как обеспечивать read-after-write consistency в REST API, включая primary reads, cache invalidation, sticky sessions и trade-offs с производительностью?

63/122
HTTP 409 Conflict в REST API

Как обрабатывать 409 Conflict в REST API — краткое руководство с практическими приёмами для конкурентных обновлений, уникальных ограничений, бизнес‑конфликтов и ожиданий клиента по повторной попытке.

64/122
Проектирование eventual consistency в REST API

Как проектировать eventual consistency в REST API: асинхронная обработка, delayed reads, статус-эндпойнты и управление ожиданиями пользователей.

65/122
Асинхронные операции в REST API

Как проектировать асинхронные операции в REST API: 202 Accepted, ресурс задачи (job resource), polling, callback (webhook) и ограничения долгих операций внутри HTTP-запроса.

66/122
Проектирование REST API при распределённых транзакциях

Как проектировать REST API поверх распределённых транзакций: saga pattern, outbox pattern, компенсационные действия и проблемы отката между сервисами?

67/122
Границы REST endpoints в BFF

Как выбирать границы REST endpoints в архитектуре backend-for-frontend (BFF): как учесть потребности клиента, где агрегировать данные и как минимизировать дублирование бизнес-логики.

68/122
Проектирование REST API в микросервисной архитектуре

Как проектировать REST API в микросервисной архитектуре: ownership данных, API gateway, границы сервисов и проблемы distributed monolith?

69/122
Проектирование REST API для внешних партнёров

Краткое руководство по проектированию стабильного и поддерживаемого REST API для внешних партнёров: контракт, квоты, аудит, песочница и распространённые проблемы интеграций.

70/122
Проектирование REST API gateway

Как проектировать REST API gateway, включая authentication, routing, rate limiting, request transformation и ограничения централизованной логики на gateway-уровне?

71/122
Проектирование REST API для event-driven систем

Краткое руководство по командно-событной архитектуре: команды через HTTP, события через брокер, eventual consistency и разделение синхронного/асинхронного взаимодействия.

72/122
REST API vs Message Queue — как выбирать

Как выбирать между REST API и message queue, включая latency, reliability, backpressure, retry semantics и требования к синхронному ответу клиенту?

73/122
REST vs GraphQL — как выбирать

Как выбирать между REST API и GraphQL, учитывая контроль клиента над данными, кеширование, публичные интеграции и сложность поддержки схемы?

74/122
Проектирование webhook-интеграций

Как проектировать webhook-интеграции рядом с REST API: гарантии доставки, повторные попытки, подписи, идемпотентность и порядок событий.

75/122
Проектирование distributed tracing для REST API

Как проектировать distributed tracing для REST API: propagation trace-id, spans между сервисами, correlation logs и ограничения при асинхронных процессах.

76/122
Метрики для REST API: RPS, перцентили, ошибки, насыщение

Как выбирать метрики для REST API, включая RPS, latency percentiles, error rate, saturation и проблемы средних значений вместо p95 и p99?

77/122
REST vs gRPC: как выбирать

Краткое руководство для выбора между REST и gRPC по ключевым критериям: производительность, строгий контракт, browser support, стриминг и удобство внешних интеграций.

78/122
Логирование REST API — принципы и лучшие практики

Краткие рекомендации по проектированию логирования REST API: какие поля логировать, как пропагировать request id, учитывать latency, коды ошибок и предотвращать утечки чувствительных данных.

79/122
Проектирование health checks для REST API

Как проектировать health checks для REST API: liveness, readiness, проверки зависимостей и как избежать ложного выведения сервиса из балансировщика?

80/122
Анализ инцидента для REST API

Как проводить incident analysis для REST API, включая timeline, affected endpoints, root cause, mitigation и предотвращение повторения проблемы?

81/122
Alerting для REST API: SLO, error budget, latency и noisy alerts

Как проектировать alerting для REST API, включая SLO, error budget, latency alerts и проблемы noisy alerts без понятного пользовательского impact?

82/122
Graceful shutdown REST API — корректное завершение сервиса

Как проектировать graceful shutdown для REST API: корректно завершать активные запросы, deregistration из load balancer, управлять таймаутами и минимизировать потерю in-flight операций.

83/122
Тестирование REST API: unit, integration, end-to-end

Как тестировать REST API на уровне unit, integration и end-to-end, включая границы каждого типа тестов, тестовые данные и проблемы хрупких E2E-сценариев?

84/122
Audit trail для REST API

Как проектировать audit trail для REST API: кто сделал действие, над каким ресурсом, когда, с каким результатом и какие требования к хранению в регулируемых системах.

85/122
Тестирование backward compatibility REST API

Как тестировать backward compatibility REST API, включая snapshot tests, schema diff, golden responses и ограничения тестирования только happy path?

86/122
Contract testing для REST API

Как использовать contract testing для REST API: основные подходы (consumer-driven contracts), верификация провайдера и практики для минимизации рассинхронизации между командами.

87/122
Проектирование тестовых окружений для REST API

Как проектировать тестовые окружения для REST API, включая staging, sandbox, mock services, test data isolation и отличия от production-поведения?

88/122
Проверка устойчивости REST API к ошибкам зависимостей

Как проверять устойчивость REST API при сбоях внешних зависимостей: таймауты, retries, circuit breaker, fallback и риск retry storm.

89/122
Тестирование безопасности REST API

Как тестировать безопасность REST API: проверять обход авторизации, инъекции, лимиты запросов и покрытие негативных сценариев.

90/122
REST API для платежей — idempotency, статусы, webhooks и повторные оплаты

Как спроектировать REST API для платежных операций, учитывая Idempotency-Key, статусы транзакций, обработку вебхуков провайдера и предотвращение повторных списаний при сетевых сбоях?

91/122
Проектирование REST API для оформления заказа

Как спроектировать REST API для оформления заказа: создание заказа, резервирование товара, оплата, идемпотентность и обработка частичных сбоев.

92/122
Load testing REST API

Как проводить load testing REST API, включая RPS, latency, concurrency, realistic traffic profile и проблемы тестирования без учета downstream-зависимостей?

93/122
REST API для пользовательских уведомлений

Как спроектировать REST API для пользовательских уведомлений: создание события, доставка по каналам, статусы доставки и ограничения синхронной отправки.

94/122
REST API для управления правами доступа (roles, permissions, inheritance, ownership, кэширование)

Как спроектировать REST API для управления ролями, правами, наследованием, владением ресурсами и кэшированием прав пользователя.

95/122
Проектирование REST API для импорта данных

Краткие рекомендации и примеры для REST API импорта файлов с асинхронной обработкой, отчётом об ошибках и поддержкой частично валидных записей.

96/122
REST API поиска товаров

Как спроектировать REST API для поиска товаров: фильтры, сортировка, фасеты, пагинация и проблемы производительности на большом каталоге.

97/122
REST API для комментариев — проектирование

Как спроектировать REST API для комментариев, включая вложенность, модерацию, soft delete, сортировку и ограничение глубины?

98/122
Проблемы использования POST для всех операций REST API

Какие проблемы возникают при использовании POST для всех операций REST API, включая потерю семантики HTTP, ухудшение кеширования и усложнение интеграции клиентов?

99/122
REST API для real-time статусов

Как спроектировать REST API для real-time статусов, включая polling, long polling, SSE, WebSocket и ограничения чистого REST-подхода?

100/122
Проектирование REST API для административной панели

Как спроектировать REST API для административной панели: фильтрация, аудит действий, bulk-операции и риски чрезмерно мощных endpoints.

101/122
Проблемы при возврате 200 OK для всех ошибок REST API

Какие проблемы возникают при возврате 200 OK для всех ошибок REST API?

102/122
REST API: проблемы, когда проектируют вокруг глаголов вместо ресурсов

Какие проблемы возникают при проектировании REST API вокруг глаголов вместо ресурсов, включая нарушение единообразия, сложность документации и рост количества endpoints?

103/122
Проектирование REST API для multi-tenant SaaS

Как спроектировать REST API для multi-tenant SaaS: изоляция тентов, tenant-aware авторизация, лимиты запросов и предотвращение утечек данных между тентами.

104/122
POST для всех операций REST API — проблемы

Какие проблемы возникают при использовании POST для всех операций REST API, включая потерю семантики HTTP, ухудшение кеширования и усложнение интеграции клиентов?

105/122
Проблемы крупных REST endpoints

Какие проблемы возникают при слишком крупных REST endpoints, включая overfetching, сложность авторизации, слабую переиспользуемость и рост coupling между клиентом и сервером?

106/122
Проблемы передачи сложного состояния через query parameters

Какие проблемы возникают при передаче сложного состояния через query parameters?

107/122
Проблемы при отсутствии единых правил ошибок в REST API

Какие проблемы возникают при отсутствии единых правил ошибок в REST API, включая разные форматы response body, сложность SDK и ухудшение developer experience?

108/122
Проблемы прямой экспозиции схемы БД через REST API

Какие проблемы возникают при прямой экспозиции database schema через REST API?

109/122
Проблемы слишком мелких REST endpoints

Какие проблемы возникают при слишком мелких REST endpoints, включая chatty API, высокую latency, лишние round trips и ухудшение UX на мобильных клиентах?

110/122
Проблемы при смешивании логики авторизации frontend/backend

Какие проблемы возникают при смешивании бизнес-логики авторизации между frontend и backend, включая bypass-риски, дублирование правил и сложности аудита?

111/122
Отсутствие лимитов на pagination и filtering

Какие проблемы возникают при отсутствии лимитов на pagination и filtering, включая перегрузку базы данных, DoS-риски и непредсказуемую latency?

112/122
Смешивание авторизации frontend/backend

Какие проблемы возникают при смешивании бизнес-логики авторизации между frontend и backend, включая bypass-риски, дублирование правил и сложности аудита?

113/122
Проектирование публичного REST API для множества клиентов

Как спроектировать публичный REST API для продукта с тысячами внешних клиентов: версионирование, rate limits, документация, SDK и долгосрочная совместимость.

114/122
Проектирование REST API для высоконагруженного сервиса

Краткое руководство по проектированию устойчивого REST API с учётом балансировки, кеширования, read replicas, backpressure и стратегий деградации при пиковых нагрузках.

115/122
Проектирование REST API для мульти-региональной системы

Как спроектировать REST API для системы с несколькими регионами, учитывая latency, data residency, replication lag и проблемы консистентности между регионами?

116/122
Zero-downtime REST API: миграции, expand-and-contract и риски rolling update

Как спроектировать REST API и миграции так, чтобы обеспечить zero-downtime deployment, включая обратносуместимые миграции, паттерн expand-and-contract и учёт рисков при rolling update?

117/122
Проектирование REST API для высоконагруженного сервиса

Как спроектировать REST API для высоконагруженного сервиса, включая балансировку, кеширование, read replicas, backpressure и деградацию при пиковых нагрузках?

118/122
Trade-offs: простота REST vs гибкость запросов

Как оценивать компромиссы между простотой REST API и гибкостью клиентских запросов с учётом overfetching, underfetching, кеширования и сложности backend-реализации?

119/122
Введение нового endpoint в REST API

Как принимать решение о введении нового endpoint в REST API с учётом ресурсной модели, потребностей клиентов, обратной совместимости и стоимости сопровождения.

120/122
Оценка качества REST API (архитектурное ревью)

Как оценивать качество REST API на архитектурном ревью: понятность модели ресурсов, стабильность контракта, безопасность, observability и эксплуатационные риски.

121/122
Когда REST API больше не подходит

Как определить, что REST API больше не подходит для задачи, включая требования real-time, streaming, сложные графовые запросы, low-latency service-to-service communication и альтернативы архитектуры?

122/122