Какие HTTP-методы являются идемпотентными и что это значит?

Ответ

Идемпотентность HTTP-метода означает, что повторный идентичный запрос к серверу будет приводить к тому же состоянию ресурса, что и первоначальный. Другими словами, сколько бы раз вы ни отправили такой запрос, результат будет один и тот же.

Это критически важно для построения надёжных систем: если клиент не получил ответ (например, из-за сбоя сети), он может безопасно повторить идемпотентный запрос.

Идемпотентные методы:

  • GET: Запрашивает представление ресурса. Не изменяет состояние.
  • HEAD: Аналогичен GET, но без тела ответа. Не изменяет состояние.
  • PUT: Полностью заменяет ресурс по указанному URI. Если ресурс существует, он заменяется; если нет — создаётся. Повторные вызовы с теми же данными дадут тот же результат.
  • DELETE: Удаляет ресурс. Первый запрос удалит ресурс (и вернёт 200 OK или 204 No Content), а последующие, скорее всего, вернут 404 Not Found. Состояние сервера остаётся неизменным после первого успешного удаления.
  • OPTIONS: Запрашивает информацию о параметрах соединения для ресурса.

Неидемпотентные методы:

  • POST: Обычно используется для создания нового дочернего ресурса. Каждый успешный запрос POST создаёт новый, уникальный ресурс.
    • Пример: POST /users создаст нового пользователя при каждом вызове.
  • PATCH: Вносит частичные изменения в ресурс. Его идемпотентность зависит от операции. Например, PATCH /articles/1 { "views": views + 1 } неидемпотентен, а PATCH /articles/1 { "status": "published" } — идемпотентен.