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

Dav*_*vid 18 rest web-services crud principles

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

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

  1. 状态201 +位置标题+(HTTP正文中创建的实体)?
  2. 或状态201 +位置标题+(空体)?

当资源由PUT更新时,我们应该返回:

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

Rob*_*vey 10

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

例如,Overmind项目在此发布其REST API .通常,他们的方法是返回包含新的或修改的实体ID及其所有属性的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
Run Code Online (Sandbox Code Playgroud)

Twilio的API能够返回XML或JSON.当出现问题时,Twilio会在HTTP响应正文中返回异常.在XML中,它们作为<RestException>元素出现在<TwilioResponse>

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

  • 老实说,这是最合适的答案(坚持 RESTful POST/PUT 不应在其响应中包含实体的人正在从事宗教活动,而不是工程。) (4认同)
  • 到目前为止,我已经查看了Amazon s3 API,它似乎没有返回响应正文中的实体(http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html).但Google Apps API确实会退回它们(https://developers.google.com/google-apps/calendar/v3/reference/).我也认为在响应中返回实体是有意义的,除非我不是HTTP代理的专家,所以我不确定将实体包含在缓存或HTTP代理的其他功能上有什么影响. (3认同)