GET, HEAD, PUT, DELETE, OPTIONS и TRACE идемпотентны по HTTP-семантике; POST и PATCH не гарантируют этого. GET обычно передаёт параметры в URL, а семейства 4xx и 5xx обозначают разные стороны ошибки.
Какие HTTP-методы REST API идемпотентны? Можно ли передавать запрос/данные в GET и какие есть ограничения? Чем отличаются семейства кодов 4xx и 5xx?
GET, HEAD, PUT, DELETE, OPTIONS и TRACE идемпотентны по HTTP-семантике; POST и PATCH не гарантируют этого. GET обычно передаёт параметры в URL, а семейства 4xx и 5xx обозначают разные стороны ошибки.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
GET, HEAD, PUT, DELETE, OPTIONS и TRACE идемпотентны по HTTP-семантике; POST и PATCH не гарантируют этого. GET обычно передаёт параметры в URL, а семейства 4xx и 5xx обозначают разные стороны ошибки.
Идемпотентность означает одинаковый предполагаемый эффект повторов, а не идентичный ответ: повтор DELETE может вернуть 404. POST можно сделать безопасным для повторов прикладным idempotency key.
Query-параметры GET подходят для фильтров; содержимое тела GET не имеет общей определённой семантики и может отвергаться посредниками. Практические лимиты URL зависят от инфраструктуры; секретам не место в URL.
4xx указывает на проблему выполнения запроса с точки зрения клиента, например 400, 401, 403, 404. 5xx — на ошибку или неспособность сервера выполнить запрос. Не каждый 5xx безопасно повторять без учёта возможного уже совершённого эффекта.
Источник: www.rfc-editor.org.