我想知道是什么人的意见是返回响应主体没有(空)一个RESTful PUT
操作。
HTTP规范(RFC 2616)的数的那些适用的建议。下面是我的解释:
200 OK
的更新的成功投入了对现有的资源。无响应人体所需。 (每Section 9.6,204 No Content
是更合适的。)201 Created
在Location头字段中返回和任何其他有关URI和资源的元数据响应主体呼应。 (RFC 2616 Section 10.2.2)409 Conflict
的PUT是不成功的,因为第三方的修饰,与未遂更新并在响应体当前资源的差异列表。 (RFC 2616 Section 10.4.10)400 Bad Request
一个不成功的PUT,在响应主体,解释了为什么PUT失败自然语言文本(如英语)。 (RFC 2616 Section 10.4)理想情况下它会返回一个成功/失败的响应。
有一个HTTP响应的报头和主体之间的差。 PUT应该永远不会返回身体,但必须在头返回响应代码。只要选择200,如果它是成功的,而4XX如果不是。有一个空的返回码没有这样的事情。你为什么要这么做?
相对于大多数这里的答案,我倒认为应该PUT返回更新的资源(除了当然的HTTP代码)。
你为什么会想返回资源作为PUT操作的响应的原因是因为当你发送一个资源表示到服务器,该服务器还可以应用一些处理这个资源,让客户想知道如何做到这一点的资源像后请求成功完成。 (否则将不得不发出另一个GET请求)。
所述HTTP/1.1 spec(部分9.6)讨论了合适的响应/错误代码。但是它没有解决的响应内容。
你会得到什么?一个简单的HTTP响应代码(200等),似乎简单的和明确的我。
我认为这是可能的服务器响应PUT返回的内容。如果使用的是一包络线响应的格式,允许侧载的数据(诸如由余烬数据所消耗的格式),则还可以包括可能已经经由数据库触发器等改性的其他对象(侧载数据是明确减少#请求,这似乎是一个很好的地方,以优化。)
如果我只是接受PUT并没有什么报到,我使用状态代码204,没有身体。如果我有事要汇报,我使用状态代码200,并包括一个体。
的201 HTTP响应代码“创建”与“位置”标题一起为指向客户端能够找到新创建的资源。
我用的RESTful API在我的服务,这里是我的意见:首先,我们必须得到一个共同的看法:PUT
用于更新的资源不能创建或获得。
我定义的资源:Stateless resource
和Stateful resource
:
但是,对于一个服务或系统,保持simple
,clearly
,easy to use and maintain
是最重要的事情。
如果REST API的后端是一个SQL关系型数据库,然后
如果你不关心丢失更新,或者如果你想迫使你的客户到PUT后立即做一个GET,则无法返回放东西。
就像一个空的请求体与一个GET请求和空响应体的最初目的是保持与PUT请求的初衷是一致的。
似乎确定...虽然我觉得成功/失败/时间发布/接收的字节数/等的初步迹象。将是优选的。
编辑:我正沿着数据的完整性和/或保存记录的思路思考;元数据,例如MD5哈希或时间戳接收可以是用于大数据文件有帮助的时间。