我实现了一个库来创建JSON REST存储,并且正在最终确定API。 在API中,开发人员可以选择是否在PUT和POST之后回显或不回显数据。
现在,
ECHO IS ON:
POST /users/ => status: 201 Created, data: as stored on server
PUT /users/1 (NEW res) => status: 201 Created, data: as stored
PUT /users/1 (EXISTING res) => status: 200 OK, data: as stored
ECHO IS OFF:
POST /users/ => status: 201 Created, data: EMPTY <- Status not 204?
PUT /users/1 (NEW res) => status: 201 Created, data: EMPTY <- Status not 204?
PUT /users/1 (EXISTING res) => status: 200 Created, data: EMPTY <- Status not 204?
所以,如果echo为ON,一切看起来都很清楚(POST以201响应,PUT以201(新资源)或200(OK)响应,当ECHO关闭时,事情会更加不确定。
如果我不想在响应中返回记录,我应该返回什么,“合法”201(创建)/ 200(OK),或者 - 因为没有数据 - 204(无数据) )?
我知道这只是一个细节,但我从第1天开始就遇到了这个疑问,而我还没有设法解决这个问题。
答案 0 :(得分:0)
在你的回音模式中:
POST /users/ => status: 201 Created, data: EMPTY
创建资源,201 Created将是最好的响应,您也可以完美地返回任何内容。将新资源的URI作为Location标头返回也是一种很好的做法。
PUT /users/1 (NEW res) => status: 201 Created, data: EMPTY
与之前的POST请求完全相同。
PUT /users/1 (EXISTING res) => status: 204 No Content
如果您要更新资源并且您不会返回任何内容,那么204 No Content是最好的,因此浏览器/客户端知道它不必等待响应主体。
编辑:我已经删除了我为POST 201 Created案例的响应主体所做的建议,因为RFC2616在技术上并没有说要返回新资源,而且它也是new spec编辑的Julian Reschke中未提及。
答案 1 :(得分:0)
如果您的服务器创建了资源,即使您没有发送新内容,201也是正确的状态代码。
如果您的服务器更新了资源,则200和204都可以使用。
您可能需要查看https://tools.ietf.org/html/draft-snell-http-prefer-18#section-4.2