intermediate

REST resources and methods

Представляйте domain nouns как resources и выбирайте HTTP methods по semantics, safety, idempotency и cache behavior.

REST представляет domain nouns как resources с URL. HTTP methods выражают намерение; safety и idempotency направляют retries и caching.

| Method | Safe | Idempotent | Типичное применение | |--------|------|------------|---------------------| | GET | да | да | Чтение коллекции или элемента | | POST | нет | нет | Создание, команды, неидемпотентные действия | | PUT | нет | да | Полная замена resource по известному URI | | PATCH | нет | нет* | Частичное обновление (*часто делают идемпотентным) | | DELETE | нет | да | Удаление resource |

					GET    /orders?status=open          # список
GET    /orders/42                   # чтение
POST   /orders                      # создание (id назначает сервер)
PUT    /orders/42                   # полная замена
PATCH  /orders/42                   # частичное обновление
DELETE /orders/42                   # удаление
POST   /orders/42/cancel            # действие над sub-resource
				

Используйте множественное число (`/users`, не `/user`). Вложенность для containment (`/orders/42/items`), но избегайте глубоких деревьев, привязывающих клиентов к форме хранения. Предпочитайте ссылки в ответах или документированные relation fields вместо угадывания URL.

На интервью: обоснуйте выбор метода для create vs upsert, когда POST в коллекцию лучше PUT на client-chosen id, и как safety влияет на cache headers у GET.

Типовые ошибки: GET с изменением состояния, POST для всего подряд, глаголы в URL (`/getUser`), внутренние ключи БД без access control.

Компромисс: чистый REST против pragmatic RPC-style actions — документируйте action endpoints единообразно, когда domain verbs плохо ложатся на PUT/PATCH.

Чеклист:

  • Существительные в URL; семантика в methods.
  • GET не должен менять состояние.
  • POST для create; PUT для полной замены по известному URI.
  • Sub-resource actions явные и задокументированы.