【问题标题】:Can the Location header be used for multiple resource locations in a 201 Created response?Location 标头可以用于 201 Created 响应中的多个资源位置吗?
【发布时间】:2012-07-03 10:55:50
【问题描述】:

接受批量 PUT 创建然后返回多个位置的正确动词和响应是什么? Location 标头似乎只支持一个 Uri。

我最初假设我可以使用 PUT 进行批量创建并返回带有 Uris 列表的字符串数组,但在查看 specification 时,似乎不受支持,但并不完全清楚要么。

是否允许使用多个 Location 标头作为替代方案?

有什么建议吗?

【问题讨论】:

    标签: http rest


    【解决方案1】:

    不,您只能有一个 Location 标头字段(是的,从规范中可以清楚地看到)。

    话虽如此,PUT 用于创建/更新单个资源。看来您正在将它用于它不是为它设计的东西......

    【讨论】:

    • 感谢您解决这个问题。所以我们应该使用 POST 进行批量创建?
    • 是的,但问题仍然存在:在批量创建情况下,如何返回所有单独的资源位置?一个冗长的方法:将这些资源位置编译到它们的自己的资源中并返回一个URL到那个,但是就像我说的那样,它有点冗长。
    【解决方案2】:

    PUT只能创建一个资源,因为按照规范:

    PUT 方法请求创建目标资源的状态或将其替换为请求消息负载中包含的表示定义的状态。

    (https://www.rfc-editor.org/rfc/rfc7231#section-4.3.4)

    但是,具有不同动词(例如 POST)的请求可以创建多个资源并返回 201 Created 状态。根据规范:

    请求创建的主要资源由响应中的 Location 标头字段标识,如果没有收到 Location 字段,则由有效的请求 URI 标识。 201 响应负载通常描述并链接到所创建的资源。

    (https://www.rfc-editor.org/rfc/rfc7231#section-6.3.2)

    因此可以在 201 响应中返回多个已创建资源的 URI,例如 POST 请求,但 Location 标头可能只包含一个 URI。

    【讨论】:

    • 是的,但您引用的是过时的文档。
    • 谢谢。现已修复(希望如此)。
    【解决方案3】:

    RFC 5988 引入 Link HTTP Header。它可以用于此目的。

    【讨论】:

      猜你喜欢
      • 2016-07-16
      • 1970-01-01
      • 2019-12-17
      • 1970-01-01
      • 2014-07-16
      • 2011-06-29
      • 1970-01-01
      • 1970-01-01
      • 2022-01-06
      相关资源
      最近更新 更多