Рекомендации по удалению REST: следует ли вернуть объект на вызовы POST и PUT?

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

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

  • Статус 201 + Заголовок местоположения + (созданный объект в теле HTTP)?
  • или Статус 201 + Заголовок местоположения + (пустое тело)?

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

  • Состояние 200 + (обновленный объект в теле HTTP)?
  • или статус 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

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

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