我应该在Json REST商店实施中返回204 - No Content吗?

时间:2013-12-03 07:04:46

标签: json http rest

我实现了一个库来创建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天开始就遇到了这个疑问,而我还没有设法解决这个问题。

2 个答案:

答案 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