Ответ
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подразумевает отправку полного представления ресурса.