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

gue*_*tli 5 rest specifications http

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

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

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

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

AFAIK那里最多只有一个Location标题.

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

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

我的问题不是"是否允许返回多个Location标题?".

Location头可以用于201 Created响应中的多个资源位置吗?

geo*_*xsh 8

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

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


Voi*_*son 7

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

简短回答:在消息正文中。

更长的答案:

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

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

从广义上讲,元数据源自数据。所以从有效负载开始。

对于201 CREATED响应:

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

您的第一步是创建此表示;如果您使用 HTML,它看起来就像一个网页,其中包含“恭喜,一切正常”和一堆带有超链接的标记文本,以便客户端能够访问新资源。

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

例如,参见 POST 响应的描述

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

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

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