REST最佳实践:您应该在POST和PUT调用时返回实体吗?

时间:2013-12-04 18:25:43

标签: web-services rest crud principles

为了尊重REST原则的最佳实践,最好是在POST / PUT上返回创建/更新的实体吗?或者使用Location标头返回一个空的HTTP主体?

更准确地说,当POST创建资源时,我们应该返回:

  1. 状态201 +位置标题+(HTTP正文中创建的实体)?
  2. 或状态201 +位置标题+(空体)?
  3. 当PUT更新资源时,我们应该返回:

    1. 状态200 +(HTTP正文中更新的实体)?
    2. 或状态204(空体)?

1 个答案:

答案 0 :(得分:9)

研究其他人的API以了解他们是如何做到这一点可能是有益的。大多数有用的公共API都在网上的某个地方发布。

例如,Overmind项目发布他们的REST API here。通常,他们的方法是返回一个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's API能够返回XML或JSON。当出现问题时,Twilio会在HTTP响应正文中返回异常。在XML中,这些在<RestException>

中显示为<TwilioResponse>元素

通常,我可以看到在PUT或POST上返回对象是有用的,因为它将包含对对象属性的任何修改(例如默认值)。