REST Best Practices: следует ли возвращать объект по вызовам 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
API Twilio способен возвращать XML или JSON. Twilio возвращает исключения в теле ответа HTTP, если что-то идет не так. В XML они выглядят как <RestException>
элемент внутри <TwilioResponse>
В целом, я считаю полезным возвращение объекта в PUT или POST, поскольку он будет содержать любые изменения, внесенные в свойства объекта (например, значения по умолчанию).