Как применить глагол PUT в запросе REST? - PullRequest
1 голос
/ 07 мая 2011

Я работаю на REST-сервере. У меня есть заказ РЕСУРС.

Насколько я понимаю, глагол PUT должен создать новый порядок на основе URL. У меня вопрос: как это может работать, если ресурс новый, а вы не знаете идентификатор нового заказа?

Мне известны дебаты о POST против PUT, но я цитирую спецификации w3 для PUT http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

"Если Request-URI не указывает на существующий ресурс и этот URI может быть определен запрашивающим пользовательским агентом как новый ресурс, сервер-источник может создать ресурс с этим URI"

Ответы [ 4 ]

6 голосов
/ 07 мая 2011

В API RESTful PUT обычно используется для обновления ресурса или создания ресурса, если он не существует по указанному URL-адресу (т.е. клиент предоставляет идентификатор) , Если сервер генерирует идентификатор, API RESTful обычно используют POST для создания новых ресурсов. В последнем случае сгенерированный id / url обычно возвращается или указывается в редиректе.

Пример: POST /orders/

2 голосов
/ 07 мая 2011

Согласно W3C Оба PUT и POST могут использоваться для обновления и / или создания.Основное различие между ними заключается в том, как сервер обрабатывает Request-URI .PUT URI идентифицирует объект, и сервер не должен пытаться сопоставить его с другим URL, в то время как POST URI может быть обработчиком для этого содержимого.Примеры:

Это нормально для POST нового ордера для /order, но не для PUT.Вы можете обновить заказ 1 с PUT или POST до /order/1.

1 голос
/ 07 мая 2011

Проще говоря, POST для создания и PUT для обновления.Если у вас нет идентификатора для объекта, потому что он еще не создан, вы должны использовать POST.Если объект существует, и у вас просто нет идентификатора для него, вам придется искать его, используя GET некоторого вида.

Помните, что идемпотентность .A PUTGET в этом отношении) идемпотентен.В основном это означает, что вы можете нажимать один и тот же URL-адрес снова и снова, и это не должно иметь значения во 2-й или 3-й раз (при этом данные редактируются один раз, и при повторном вызове это изменение не выполняется).Однако POST является не идемпотентом.Это означает, что вы нажимаете один и тот же URL 3 или 4 раза подряд, и он будет продолжать изменять данные (создавая все больше и больше объектов).Вот почему браузер предупредит вас, если вы вернетесь к POST url.

0 голосов
/ 07 мая 2011

Вы говорите «не знаю ID нового заказа», поэтому следующее неверно «URI может быть определен как новый ресурс запрашивающим пользовательским агентом», поэтому PUT не подходит в вашем сценарии .

Где путаница? Я, конечно, предполагаю, что идентификатор будет частью URL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...