我想知道人们对在响应体中不返回任何(null)的RESTful PUT操作有什么看法。
当前回答
看起来好…虽然我认为一个基本的指示成功/失败/时间张贴/#字节接收/等等。会更好。
编辑:我一直在考虑数据完整性和/或记录保存;元数据,如MD5散列或接收时间的时间戳,可能对大型数据文件有帮助。
其他回答
HTTP规范(RFC 2616)有许多适用的建议。以下是我的解读:
HTTP status code 200 OK for a successful PUT of an update to an existing resource. No response body needed. (Per Section 9.6, 204 No Content is even more appropriate.) HTTP status code 201 Created for a successful PUT of a new resource, with the most specific URI for the new resource returned in the Location header field and any other relevant URIs and metadata of the resource echoed in the response body. (RFC 2616 Section 10.2.2) HTTP status code 409 Conflict for a PUT that is unsuccessful due to a 3rd-party modification, with a list of differences between the attempted update and the current resource in the response body. (RFC 2616 Section 10.4.10) HTTP status code 400 Bad Request for an unsuccessful PUT, with natural-language text (such as English) in the response body that explains why the PUT failed. (RFC 2616 Section 10.4)
理想情况下,它将返回一个成功/失败响应。
我在我的服务中使用了RESTful API,以下是我的观点: 首先,我们必须了解一个通用视图:PUT用于更新资源,而不是创建或获取资源。
我用:无状态资源和有状态资源来定义资源:
无状态的资源 对于这些资源,只返回带有空主体的HttpCode就足够了。 有状态资源 例如:资源的版本。对于这类资源,当您想要更改它时,您必须提供版本,因此返回完整的资源或将版本返回给客户端,因此客户端在更新操作后不需要发送get请求。
但是,对于服务或系统来说,最重要的是保持简单、清晰、易于使用和维护。
看起来好…虽然我认为一个基本的指示成功/失败/时间张贴/#字节接收/等等。会更好。
编辑:我一直在考虑数据完整性和/或记录保存;元数据,如MD5散列或接收时间的时间戳,可能对大型数据文件有帮助。
与这里的大多数答案相反,我实际上认为PUT应该返回更新后的资源(当然除了HTTP代码之外)。
您希望将资源作为PUT操作的响应返回的原因是,当您向服务器发送资源表示时,服务器也可以对该资源应用一些处理,因此客户端希望知道请求成功完成后该资源的样子。(否则它将不得不发出另一个GET请求)。
推荐文章
- 哪个HTTP状态代码表示“尚未准备好,稍后再试”?
- Django REST框架:向ModelSerializer添加额外字段
- Spring引导应用程序作为服务
- REST和RPC之间的Web服务差异
- REST DELETE真的是幂等的吗?
- 如何用node.js实现一个安全的REST API
- 如何在Node.js内进行远程REST调用?旋度吗?
- Rails new vs create
- 如何在。net中创建和使用资源
- 如何使用邮差导出具体要求文件?
- 有没有REST api的命名规范指南?
- 什么是HTTP中的“406-不可接受的响应”?
- 哪些HTTP方法与哪些CRUD方法相匹配?
- RESTful服务中部分更新的最佳实践
- JAX-RS / Jersey如何自定义错误处理?