Когда использовать HTTP методы PUT и POST в REST API?

Ответ

HTTP методы PUT и POST используются для взаимодействия с ресурсами в REST API, но имеют разные семантики и предназначение:

  • PUT (Полное обновление или создание с известным URI)

    • Используется для полного обновления существующего ресурса или создания нового, если клиент заранее знает его полный URI.
    • Идемпотентен: Многократное выполнение одного и того же PUT-запроса приводит к одному и тому же состоянию на сервере. Это обеспечивает безопасность при повторных попытках запроса (например, при сетевых ошибках).
    • Пример: Обновление данных пользователя с ID 123.

      PUT /users/123
      Content-Type: application/json
      
      {
          "name": "John Doe",
          "email": "john.doe@example.com"
      }

      Если ресурс /users/123 не существует, PUT может его создать (если сервер поддерживает такую логику).

  • POST (Создание нового ресурса или выполнение операции)

    • Используется для создания нового ресурса, когда его URI определяется сервером (например, при добавлении элемента в коллекцию).
    • Также применяется для выполнения неидемпотентных операций или отправки данных, которые не подходят под другие HTTP-методы (например, отправка формы, запуск процесса, выполнение сложной транзакции).
    • Неидемпотентен: Повторные POST-запросы могут создавать дубликаты ресурсов или вызывать побочные эффекты, так как каждый запрос рассматривается как новая операция.
    • Пример: Создание нового пользователя.

      POST /users
      Content-Type: application/json
      
      {
          "name": "Alice Smith",
          "email": "alice.smith@example.com"
      }

      Сервер ответит статусом 201 Created и заголовком Location, указывающим на URI нового ресурса (например, /users/456).

Ключевые различия:

  • Идемпотентность: PUT идемпотентен, POST — нет.
  • URI ресурса: PUT требует, чтобы клиент знал полный URI ресурса. POST обычно отправляется на URI коллекции, и сервер генерирует URI нового ресурса.
  • Назначение: PUT — для замены/обновления ресурса целиком. POST — для создания нового ресурса или выполнения операций, не подходящих под другие глаголы.
  • Возвращаемый статус: PUT часто возвращает 200 OK или 204 No Content. POST обычно возвращает 201 Created с заголовком Location.
  • Частичное обновление: Для частичного обновления ресурса рекомендуется использовать метод PATCH. PUT подразумевает отправку полного представления ресурса.