如若一个RESTful“put”操作一些回报

问题描述 投票:371回答:11

我想知道是什么人的意见是返回响应主体没有(空)一个RESTful PUT操作。

resources rest service put
11个回答
562
投票

HTTP规范(RFC 2616)的数的那些适用的建议。下面是我的解释:

  • HTTP状态代码200 OK的更新的成功投入了对现有的资源。无响应人体所需。 (每Section 9.6204 No Content是更合适的。)
  • 新资源的成功PUT,用最具体的URI新资源HTTP状态代码201 Created在Location头字段中返回和任何其他有关URI和资源的元数据响应主体呼应。 (RFC 2616 Section 10.2.2
  • HTTP状态代码409 Conflict的PUT是不成功的,因为第三方的修饰,与未遂更新并在响应体当前资源的差异列表。 (RFC 2616 Section 10.4.10
  • HTTP状态代码为400 Bad Request一个不成功的PUT,在响应主体,解释了为什么PUT失败自然语言文本(如英语)。 (RFC 2616 Section 10.4

-3
投票

理想情况下它会返回一个成功/失败的响应。


-3
投票

有一个HTTP响应的报头和主体之间的差。 PUT应该永远不会返回身体,但必须在头返回响应代码。只要选择200,如果它是成功的,而4XX如果不是。有一个空的返回码没有这样的事情。你为什么要这么做?


147
投票

相对于大多数这里的答案,我倒认为应该PUT返回更新的资源(除了当然的HTTP代码)。

你为什么会想返回资源作为PUT操作的响应的原因是因为当你发送一个资源表示到服务器,该服务器还可以应用一些处理这个资源,让客户想知道如何做到这一点的资源像后请求成功完成。 (否则将不得不发出另一个GET请求)。


2
投票

所述HTTP/1.1 spec(部分9.6)讨论了合适的响应/错误代码。但是它没有解决的响应内容。

你会得到什么?一个简单的HTTP响应代码(200等),似乎简单的和明确的我。


2
投票

我认为这是可能的服务器响应PUT返回的内容。如果使用的是一包络线响应的格式,允许侧载的数据(诸如由余烬数据所消耗的格式),则还可以包括可能已经经由数据库触发器等改性的其他对象(侧载数据是明确减少#请求,这似乎是一个很好的地方,以优化。)

如果我只是接受PUT并没有什么报到,我使用状态代码204,没有身体。如果我有事要汇报,我使用状态代码200,并包括一个体。


1
投票

的201 HTTP响应代码“创建”与“位置”标题一起为指向客户端能够找到新创建的资源。


1
投票

我用的RESTful API在我的服务,这里是我的意见:首先,我们必须得到一个共同的看法:PUT用于更新的资源不能创建或获得。

我定义的资源:Stateless resourceStateful resource

  • 无状态的资源对于这些资源,只是空的身体返回HttpCode,这是不够的。
  • 有状态的资源例如:资源的版本。对于这种资源的,当你想改变它,所以返回完整的资源或版本返回给客户端,你必须提供的版本,所以客户端need't发送更新动作后的GET请求。

但是,对于一个服务或系统,保持simpleclearlyeasy to use and maintain是最重要的事情。


0
投票

如果REST API的后端是一个SQL关系型数据库,然后

  1. 你应该有RowVersion在每一个可更新的记录(以避免lost update problem
  2. 你应该始终把后返回记录的新副本(以获取新的RowVersion)。

如果你不关心丢失更新,或者如果你想迫使你的客户到PUT后立即做一个GET,则无法返回放东西。


-2
投票

就像一个空的请求体与一个GET请求和空响应体的最初目的是保持与PUT请求的初衷是一致的。


-2
投票

似乎确定...虽然我觉得成功/失败/时间发布/接收的字节数/等的初步迹象。将是优选的。

编辑:我正沿着数据的完整性和/或保存记录的思路思考;元数据,例如MD5哈希或时间戳接收可以是用于大数据文件有帮助的时间。

© www.soinside.com 2019 - 2024. All rights reserved.