Answers:
HTTP规范(RFC 2616)具有许多适用的建议。这是我的解释:
200 OK
成功更新现有资源的PUT的HTTP状态代码。无需响应主体。(根据第9.6节,204 No Content
甚至更合适。)201 Created
成功地对新资源进行PUT的HTTP状态代码,在Location标头字段中返回的新资源的最具体URI,以及在响应主体中回显的资源的任何其他相关URI和元数据。(RFC 2616第10.2.2节)409 Conflict
用于PUT是不成功的,因为一3 次三方变形例中,与所尝试的更新,并在响应体中的当前资源之间的差异的列表。(RFC 2616第10.4.10节)400 Bad Request
PUT失败的HTTP状态代码,响应正文中包含自然语言文本(例如英语),用于解释PUT失败的原因。(RFC 2616第10.4节)No response body needed
200。实际上,关于PUT根本没有提及响应主体。它只说If an existing resource is modified, either the 200 (OK) or 204 (No Content) response codes SHOULD be sent to indicate successful completion of the request.
与这里的大多数答案相反,我实际上认为PUT应该返回更新的资源(当然,除了HTTP代码之外)。
之所以要返回该资源作为对PUT操作的响应,是因为当您向服务器发送资源表示时,服务器还可以对该资源进行一些处理,因此客户端想知道如何处理该资源。请求成功完成后的外观。(否则它将不得不发出另一个GET请求)。
的HTTP / 1.1规范(9.6节)讨论了合适的响应/错误代码。但是,它没有解决响应内容。
您会期望什么?一个简单的HTTP响应代码(200等)对我来说似乎很简单。
Http响应代码201代表“已创建”以及“位置”标头,以指向客户端可以在其中找到新创建的资源的位置。
我在服务中使用了RESTful API,这是我的看法:首先,我们必须达成共识:PUT
用于更新创建或获取的资源。
我用Stateless resource
和定义了资源Stateful resource
:
无状态资源对于这些资源,只需返回带有空主体的HttpCode,就足够了。
有状态资源例如:资源的版本。对于此类资源,您必须在要更改版本时提供版本,因此请返回完整资源或将版本返回给客户端,因此客户端无需在更新操作后发送get请求。
但是,对于一个服务或系统,保持它simple
,clearly
,easy to use and maintain
是最重要的事情。
似乎还可以。。。虽然我认为成功/失败/发布时间/收到的#个字节等基本信息。会更好。
编辑:我一直在考虑数据完整性和/或记录保存;元数据(例如MD5哈希或接收时间的时间戳)对于大型数据文件可能会有所帮助。
理想情况下,它将返回成功/失败响应。
200
对PUT,DELETE或任何其他方法的使用。我错过了什么?例如Mozilla成为W3和IETF的老板?;)也许他们只是从未听说过Postel的稳健性原则。