ПОСТ против ПОЧТЫ в ОТДЫХЕ - PullRequest
4976 голосов
/ 10 марта 2009

Согласно спецификации HTTP / 1.1:

Метод POST используется для запроса, чтобы исходный сервер принял объект, включенный в запрос, в качестве нового подчиненного ресурса, идентифицируемого Request-URI в Request-Line

Другими словами, POST используется для создания .

Метод PUT запрашивает, чтобы вложенный объект был сохранен в соответствии с предоставленным Request-URI. Если Request-URI относится к уже существующему ресурсу, вложенный объект СЛЕДУЕТ рассматривать как модифицированную версию, находящуюся на исходном сервере. Если Request-URI не указывает на существующий ресурс, и этот URI может быть определен как новый ресурс запрашивающим пользовательским агентом, сервер происхождения может создать ресурс с этим URI. "

То есть PUT используется для создания или обновления .

Итак, какой из них следует использовать для создания ресурса? Или нужно поддерживать оба?

Ответы [ 32 ]

3 голосов
/ 12 декабря 2013

POST: Используйте его для создания новых ресурсов. Это как INSERT (оператор SQL) с автоматически увеличивающимся идентификатором. В ответной части содержится новый сгенерированный идентификатор.

POST также используется для обновления записи.

PUT: Используйте его для создания нового ресурса, но здесь я знаю ключ идентификации. Это как INSERT (оператор SQL), где я заранее знаю ключ идентификации. В ответной части ничего не отправляется.

PUT также используется для обновления ресурса

2 голосов
/ 08 мая 2018

Итак, какой из них следует использовать для создания ресурса? Или нужно поддерживать оба?

Вы должны использовать PATCH. Вы ПАТЧИТЕ список вопросов, как

PATCH /questions HTTP/1.1

со списком, содержащим ваш создаваемый объект, такой как

[
    {
        "title": "I said semantics!",
        "content": "Is this serious?",
        "answer": "Not really"
    }
]

Это запрос PATCH как

  • вы изменяете существующий список ресурсов без предоставления всего нового контента
  • вы изменяете состояние вашего нового вопроса с несуществующего на существующее без предоставления всех данных (сервер, скорее всего, добавит id).

Большим преимуществом этого метода является то, что вы можете создавать несколько объектов, используя один запрос, просто предоставив их все в списке.

Это то, что PUT явно не может. Вы можете использовать POST для создания нескольких объектов, так как это кухонная раковина HTTP и может делать практически все.

Недостатком является то, что, вероятно, никто не использует PATCH таким образом. Боюсь, я только что это изобрел, но надеюсь, что предоставил хорошую аргументацию.

Вместо этого вы можете использовать CREATE, поскольку разрешены пользовательские HTTP-глаголы, просто они могут не работать с некоторыми инструментами.

Что касается семантики, CREATE ИМХО - единственный правильный выбор, все остальное - это квадратный колышек в круглой дыре. К сожалению, все, что у нас есть, это круглые отверстия.

...