HTTP状态201已创建:将N个URL返回到新资源?

问题描述 投票:5回答:2

我有一个简单的服务器API:

客户端可以上传文件。如果成功,服务器返回201 Created。 http响应有一个Location标头,指向新创建的资源。

现在我们面临一个新的用例:一个http请求应该能够创建N个新资源。

我不确定如何根据http规范实现这一点。

AFAIK那里最多只有一个Location头。

如何在http 201 Created响应中返回N个URL?

我的问题是相关的,但不是以下问题的重复,因为那里的问题清楚地回答为“否”。我的问题不同:如何......

我的问题不是“是否允许返回多个Location标题?”。

Can the Location header be used for multiple resource locations in a 201 Created response?

rest http specifications
2个回答
8
投票

你可以看看rfc4918,它提出了一种新型的响应,207(多状态),从REST & WOA Wiki复制的简短描述:

多状态响应在多个状态代码可能适合的情况下传达有关多个资源的信息。默认的多状态响应主体是具有“多状态”根元素的text / xml或application / xml HTTP实体。其他元素包含在方法调用期间生成的200,300,400和500系列状态代码。 100系列状态代码不应记录在“响应”XML元素中。


4
投票

如何在http 201 Created响应中返回N个URL?

简短的回答:在消息体中。

更长的回答:

我认为你的搜索有点倒退了。

在HTTP中;状态代码和响应头是元数据;伴随消息,给通用的http组件一个上下文无关的方式来理解发生了什么。

从广义上讲,元数据是从数据中派生出来的。所以从有效载荷开始。

201 CREATED响应的情况下:

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

你的第一步是创建这种表示;在你使用HTML工作的情况下,它看起来像一个带有“祝贺,一切正常”的网页和一堆带有超链接的标记文本,以便客户端访问新资源。

完成后,您现在查看该表示,以查看应将哪些信息提升到标准标头中,以便通用组件也可以了解正在发生的一些事情。

例如,请参阅POST响应的说明

如果由于成功处理POST请求而在源服务器上创建了一个或多个资源,则源服务器应该发送包含Location头字段的201(Created)响应,该字段提供所创建的主资源的标识符(第7.1节) .2)以及在引用新资源时描述请求状态的表示。

因此,我们确定创建的哪些资源是主要资源,并将该资源的标识符从表示提升到Location标头。

消息正文中仍可使用辅助资源的标识符。如果您还需要将这些资源公开给通用组件,那么您可以使用Link header

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