Какие остальные вызовы PUT/POST / DELETE должны возвращаться по соглашению?

  1. согласно "идеологии отдыха", что должно быть в теле ответа для запросов PUT/POST/DELETE?

  2. насчет кодов возврата? Is HTTP_OK достаточно?

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

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

4 ответов


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


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

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

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


создание ресурса обычно сопоставляется с POST, и это должно возвращать расположение нового ресурса; например, в Rails scaffold CREATE перенаправит на шоу для вновь созданного ресурса. Тот же подход может иметь смысл для обновления (PUT), но это меньше конвенции; обновление должно указывать только на успех. Удаление, вероятно, также должно указывать на успех; если вы хотите перенаправить, возврат списка ресурсов, вероятно, делает большинство чувство.

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

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


RFC7231 это не имеет значения и может быть пустым

Как мы реализуем решение на основе стандарта JSON api в проекте:

post / put: выводит атрибуты объекта, как в get (Field filter/relations применяется то же самое)

delete: data содержит только null (для его представления отсутствующего объекта)

статус для стандартного удаления: 200