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

时间:2017-12-18 08:48:05

标签: rest http specifications

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

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

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

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

AFAIK最多只有一个Location标题。

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

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

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

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

2 个答案:

答案 0 :(得分:8)

您可以查看rfc4918,其中提出了一种新的响应类型,207(多状态),从REST & WOA Wiki复制的简短说明:

  

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

答案 1 :(得分:4)

  

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

简短回答:在消息体中。

更长的答案:

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

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

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

如果是201 CREATED回复:

  

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

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

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

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

  

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

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

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