2017-12-18 184 views
4

我有一个简单的服务器API:HTTP Status 201 Created:将N个URL返回给新资源?

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

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

我不确定如何根据http规范来实现此操作。

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

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

我的问题是相关的,但不是以下问题的重复,因为问题显然回答为“否”。我的问题是不同的:如何...

我的问题不是“是否允许返回几个位置标题?”。

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

+0

[位置标题可否用于201创建响应中的多个资源位置?](https://stackoverflow.com/questions/11309444/can-the-location-header-be-used -for-multiple-resource-locations-in-a-201-created) – jonrsharpe

+0

@jonrsharpe我解释了为什么我的问题不是重复的。是的,这两个问题都是相关的,但它们是不同的。 – guettli

+0

第一个答案说不,第二个答案给出了一个替代方案。 – jonrsharpe

回答

4

如何返回否网址,在一个HTTP 201创建的响应?

简答:在消息体中。

较长的回答:

我认为你正在进行有关你的搜索有点倒退。

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

概括地说,元数据来自数据。所以从有效载荷开始。

201 CREATED响应的情况下:

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

您的第一步是创建此表示法;在使用HTML的情况下,它看起来像一个网页,上面写着“祝贺,一切正常”以及一系列带有超链接的标记文本,为客户提供对新资源的访问。

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

例如,见的POST响应的描述

如果一个或多个资源已被原始服务器作为成功处理POST请求的结果上创建的,原始服务器应该发送一个201(创建)响应,其中包含一个Location标头字段,该字段为所创建的主资源提供一个标识符(见第7.1.2节),并在引用新资源时描述请求状态。

所以我们确定创建的资源的其是初级,以及从表示入Location头解除该资源的标识符。

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

+0

谢谢你这个详细的答案!只有一个问题:没有“主要”或“次要”资源。有一组资源没有排序。但链接头看起来不错。 – guettli

7

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

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