【发布时间】:2012-07-03 10:55:50
【问题描述】:
接受批量 PUT 创建然后返回多个位置的正确动词和响应是什么? Location 标头似乎只支持一个 Uri。
我最初假设我可以使用 PUT 进行批量创建并返回带有 Uris 列表的字符串数组,但在查看 specification 时,似乎不受支持,但并不完全清楚要么。
是否允许使用多个 Location 标头作为替代方案?
有什么建议吗?
【问题讨论】:
接受批量 PUT 创建然后返回多个位置的正确动词和响应是什么? Location 标头似乎只支持一个 Uri。
我最初假设我可以使用 PUT 进行批量创建并返回带有 Uris 列表的字符串数组,但在查看 specification 时,似乎不受支持,但并不完全清楚要么。
是否允许使用多个 Location 标头作为替代方案?
有什么建议吗?
【问题讨论】:
不,您只能有一个 Location 标头字段(是的,从规范中可以清楚地看到)。
话虽如此,PUT 用于创建/更新单个资源。看来您正在将它用于它不是为它设计的东西......
【讨论】:
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。
【讨论】:
RFC 5988 引入 Link HTTP Header。它可以用于此目的。
【讨论】: