REST Best Practices: следует ли возвращать объект по вызовам POST и PUT?

Чтобы уважать лучшие практики принципов REST, лучше ли возвращать созданный / обновленный объект после POST/PUT? Или вернуть пустое тело HTTP с заголовком Location?

Точнее, когда ресурс создается методом POST, мы должны вернуть:

  1. Статус 201 + Заголовок местоположения + (созданная сущность в теле HTTP)?
  2. или статус 201 + заголовок местоположения + (пустое тело)?

Когда ресурс обновляется PUT, мы должны вернуть:

  1. Статус 200 + (обновленная сущность в теле HTTP)?
  2. или статус 204 (пустое тело)?

1 ответ

Решение

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

Например, проект Overmind публикует их REST API здесь. В общем, их подход заключается в возвращении словаря JSON, содержащего новый или измененный идентификатор объекта и все его атрибуты:

Operation                     HTTP Method   URL           Query string
--------------------------    -----------   ---           ------------
Create node for a specific 
provider                      POST          /api/nodes/   provider_id=PROVIDER_ID

HTTP Payload returned
---------------------
JSON dict with id of node created (generated on the server side) and all other 
attributes of the node

API Twilio способен возвращать XML или JSON. Twilio возвращает исключения в теле ответа HTTP, если что-то идет не так. В XML они выглядят как <RestException> элемент внутри <TwilioResponse>

В целом, я считаю полезным возвращение объекта в PUT или POST, поскольку он будет содержать любые изменения, внесенные в свойства объекта (например, значения по умолчанию).

Другие вопросы по тегам