我正在尝试找出REST商店的正确响应。我很清楚相关的RFC 2616;相关部分是9 Method Definitions
现在......
简短的问题:
如果我使用POST或PUT创建资源,并且不想返回当前资源数据,我应该使用什么代码? 204好吗? (我对此表示怀疑)
我已在此处JsonRestStore中概述了我如何实施这些方法:https://github.com/mercmobily/JsonRestStores/blob/master/jsonrest.md
好的,这是更长的版本。
起点:
这就是商店经常使用的方式。是的,您可以将资源ID传递给POST - 这可能听起来很奇怪,但是这样做了。
RFC说:
如果创建了新资源,源服务器必须通过201(已创建)响应通知用户代理。如果修改了现有资源,则应该发送200(OK)或204(No Content)响应代码以指示请求成功完成。
那么,如果您创建了一个新资源,但又不想将其当前状态返回给服务器呢?可以使用EMPTY内容返回201吗?那不是204的东西吗?但是我不能这样做,因为(根据RFC)我必须返回201.
关于POSTing,RFC必须说:
POST方法执行的操作可能不会产生可由URI标识的资源。在这种情况下,200(OK)或204(No Content)是适当的响应状态,具体取决于响应是否包含描述结果的实体。
如果在源服务器上创建了资源,则响应应该是201(已创建)并包含一个描述请求状态的实体,并引用新资源和Location头(请参阅第14.30节)。
如果我接受第二部分实际上并不适用于REST存储,因为POST总是会产生一个可以某种方式访问的资源,我最终得到:
案例1:现有资源被“追加”,AKA“POST with ID”(资源未创建)
案例2:正在创建新资源(通常是通过NOT传递ID)
但是,如果我决定解释RFC“POST方法执行的操作可能不会导致(...)”为“如果你做一个帖子追加”,这是一个huuuuge延伸,那么我最终得到:
案例1:现有资源被“追加”,AKA“POST with ID”(资源未创建)
案例2:正在创建新资源(通常是通过NOT传递ID)
因此,即使将RFC解释为广泛,我仍然会得到一个问题:如果我创建资源,并且不想返回当前资源数据,那么代码应该是什么我用? 204好吗? (我对此表示怀疑)
再见,
Merc的。
答案 0 :(得分:0)
我总是返回201,你被告知你必须退回一个。
请注意您自己的引用:
并包含描述请求状态的实体
请注意,不表示您必须将资源作为内容包含在内。只是描述状态的实体。但如果只有一种可能的状态,我认为没有内容没有问题。
答案 1 :(得分:0)
您可能需要检查HTTP / 1.1修订版(正在进行中),特别是http://greenbytes.de/tech/webdav/draft-ietf-httpbis-p2-semantics-22.html#header.content-location。