intermediate
REST status codes
Используйте status codes, чтобы сообщать success, validation, auth, conflicts, rate limits, missing resources и server failures.
Status codes сообщают класс результата клиентам, прокси и retry-логике. Используйте минимально точный код; детали — в теле ответа.
| Code | Когда использовать | |------|-------------------| | 200 OK | Успешный GET, PUT, PATCH с телом | | 201 Created | POST создал resource; укажите Location | | 204 No Content | Успешный DELETE или update без тела | | 400 Bad Request | Битый синтаксис, неизвестные поля, невалидный JSON | | 401 Unauthorized | Нет или неверная аутентификация | | 403 Forbidden | Аутентифицирован, но нет прав | | 404 Not Found | Resource отсутствует или скрыт (политика) | | 409 Conflict | Конфликт состояния (дубликат, version mismatch) | | 422 Unprocessable Entity | Валидный JSON, но бизнес-валидация не прошла | | 429 Too Many Requests | Rate limit; отправьте Retry-After | | 500 Internal Server Error | Неожиданная ошибка сервера | | 503 Service Unavailable | Перегрузка или dependency недоступен; Retry-After |
HTTP/1.1 201 Created
Location: /orders/7f3a2c
Content-Type: application/json
{"id":"7f3a2c","status":"pending"}
HTTP/1.1 409 Conflict
Content-Type: application/problem+json
{"type":"order/already-shipped","title":"Cannot cancel shipped order"}
На интервью: различайте 401 vs 403, 400 vs 422, когда 404 скрывает существование, и почему 500 не должен раскрывать stack traces.
Типовые ошибки: 200 с ошибкой в теле, 404 для auth непоследовательно, 500 для validation errors, отсутствие Retry-After на 429/503.
Компромисс: детальные коды против простоты клиента — в любом случае документируйте стабильный каталог ошибок.
Чеклист:
- Код согласован с retryability (4xx обычно нет, 5xx/429 — возможно).
- 201 + Location при create.
- Последовательная семантика 401/403.
- Детали проблемы в теле, не только в status.