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-подхода в реальных проектах.

Вы можете начать изучение этого набора. Вам будет отправлено 488 сообщений для повторения каждой карточки несколько раз в соответствие с кривой забывания.

Узнайте больше о методе интервального повторения.
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
WitSlice © 2026