2010-11-24 2 views
129
  1. В соответствии с идеей «REST ideology», что должно быть в теле ответа для запросов PUT/POST/DELETE?Какие вызовы REST PUT/POST/DELETE должны возвращаться по соглашению?

  2. Что относительно кодов возврата? Достаточно HTTP_OK?

  3. В чем причина таких соглашений, если таковые имеются?

Я нашел хороший пост с описанием POST различия/PUT: POST vs PUT Но это еще не ответ на мой вопрос.

ответ

115

Простите легкомысленность, но если вы выполняете REST через HTTP, то RFC7231 точно описывает, какое поведение ожидается от GET, PUT, POST и DELETE.

23

В целом, соглашения «думают, что вы просто доставляете веб-страницы».

Для PUT я вернул бы тот же вид, который вы получили бы, если бы вы сделали GET сразу после; что приведет к 200 (ну, если, конечно, рендеринг будет успешным). Для POST я сделал бы перенаправление на созданный ресурс (если вы делаете операцию создания, а если нет, просто возвращайте результаты); код для успешного создания - это 201, который действительно является единственным HTTP-кодом для перенаправления, который не находится в диапазоне 300.

Я никогда не был доволен тем, что должен вернуть DELETE (в этом случае код в настоящее время выдает HTTP 204 и пустое тело).

+1

После запроса запроса «PUT» следующая страница выглядит плохой практикой, так как обновление на результирующей странице приведет к повторному выполнению запроса. Вместо этого для меня имеет смысл делать переадресацию, предполагая, что вы имеете дело с синхронными запросами. – lobati 2015-06-16 16:03:15

+1

@lobati Я думаю, что важно отметить, что отправка нескольких одинаковых запросов PUT должна иметь точно такой же результат, что и отправка только одного из тех же запросов PUT. Возможно, проблема, которую вы поднимаете, теперь менее важна, учитывая сказанное выше? – Iain 2015-08-26 18:48:39

+2

@Iain не очень. Проблема в том, что если что-то еще обновит запись позже, вы не захотите, чтобы она отправила другой запрос «PUT», в результате чего данные были возвращены. Например, если два человека ссылаются на одну и ту же страницу, один делает обновление, а затем делает обновление, если первое лицо обновляется, чтобы увидеть результат, это в конечном итоге приведет к тому, что вещи будут возвращены до того, как второй человек сделает их изменения. – lobati 2015-08-26 22:05:50

3

Создание ресурса, как правило, сопоставляется с POST, и это должно возвращать местоположение нового ресурса; например, в Rails-эшафоте CREATE будет перенаправляться на SHOW для вновь созданного ресурса. Тот же подход может иметь смысл для обновления (PUT), но это меньше, чем соглашение; обновление должно указывать только на успех. Удаление, вероятно, должно указывать только на успех; если вы хотите перенаправить, то, вероятно, самый лучший смысл будет получить СПИСОК ресурсов.

Успех может быть указан HTTP_OK, да.

Единственное твердое правило в том, что я сказал выше, заключается в том, что CREATE должен вернуть местоположение нового ресурса. Для меня это кажется просто бесполезным; имеет смысл, что клиент должен будет иметь доступ к новому элементу.

Смежные вопросы