为了尊重 REST 原则的最佳实践,是否最好在 POST/PUT 时返回创建/更新的实体?还是返回带有 Location 标头的空 HTTP 正文?
更准确地说,当一个资源通过 POST 创建时,我们应该返回:
- 状态 201 + Location 头 +(HTTP 正文中创建的实体)
或者
- 状态 201 + 位置标头 +(空正文)
当资源被 PUT 更新时,我们应该返回:
- 状态 200 +(HTTP 正文中的更新实体)
或者
- 状态 204(空体)
为了尊重 REST 原则的最佳实践,是否最好在 POST/PUT 时返回创建/更新的实体?还是返回带有 Location 标头的空 HTTP 正文?
更准确地说,当一个资源通过 POST 创建时,我们应该返回:
- 状态 201 + Location 头 +(HTTP 正文中创建的实体)
或者
- 状态 201 + 位置标头 +(空正文)
当资源被 PUT 更新时,我们应该返回:
- 状态 200 +(HTTP 正文中的更新实体)
或者
- 状态 204(空体)
研究其他人的 API 以了解他们如何做到这一点可能会有所帮助。大多数有用的公共 API 都发布在网络上的某个地方。
例如,Overmind 项目在这里发布了他们的 REST API 。通常,他们的方法是返回一个 JSON 字典,其中包含新的或修改的实体 ID 及其所有属性:
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 上返回对象很有用,因为它将包含对对象属性所做的任何修改(例如默认值)。