RESTful POST响应

4
我有一个非常简单的RESTful服务,通过POST接收一些表单数据,其目的是将文本主体(带有唯一标识符)作为文件保存在云存储(Amazon S3,Azure Blob Storage等)中...

所以问题是...如果一切顺利,我向调用者返回200响应,那么我应该返回什么样的内容给调用者呢?

任何东西? 没有什么?

如果这是创建数据库记录...也许新记录的id可能有用...但在这种情况下,我认为仅返回HttpRepsone代码就足够了?

是否有人同意、不同意或有支持讨论的链接?

我应该补充说,对这个服务的请求基本上是交接,然后走人...它们实际上并不需要我建议发送回去的唯一标识符...这更多是为了“完整性”。

2个回答

7

简短回答

在您在服务器上创建资源时,应该返回201状态码以及一个Location头部,让客户端可以定位新创建的资源。

响应有效载荷是可选的,通常描述并链接到创建的资源。

稍长一点的回答

参见RFC 7231中的以下引用:

4.3.3. POST

[...] 如果成功处理POST请求已在源服务器上创建了一个或多个资源,则源服务器应该发送一个包含Location头字段的201(已创建)响应,该头部提供主要资源的标识符,并附带描述请求状态并引用新资源的表示形式。[...]

还来自RFC 7231

6.3.2. 201 Created

201(已创建)状态码表示请求已被满足,并导致创建了一个或多个新资源。请求创建的主要资源由响应中的Location头字段标识,或者如果未收到Location字段,则由有效请求URI标识。

201响应有效载荷通常描述并链接到创建的资源。

7.1.2. Location

The Location header field is used in some responses to refer to a specific resource in relation to the response. The type of relationship is defined by the combination of request method and status code semantics.

Location = URI-reference

The field value consists of a single URI-reference. [...] For 201 (Created) responses, the Location value refers to the primary resource created by the request. [...]


非常信息丰富的答案。我将返回201,但是创建的资源位置略显冗余,因为服务发布者永远无法访问该数据。如果返回位置是良好的实践,那么我至少会返回唯一标识符,但这仍然应该放在位置标头中吗? - m1nkeh
@m1nkeh RCF 7231指出,“Location”值由单个URI组成。但是,为什么客户端能够在服务器上创建资源,却无法稍后检索此类资源的表示呢? - cassiomolin
哦,这是一个网站上的表单提交..提交的数据只对其他系统有意义..网站只关心资产的提交和创建是否成功..不需要将其取回。 - m1nkeh

1

我应该补充说明,对这个服务的请求基本上是自动处理的,无需唯一标识。

对于POST请求不返回任何内容是完全可以的。你在说调用者甚至不需要它。但状态码201会更有意义。


好的,那我会把我的响应从200改成201的。 - m1nkeh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接