如何响应 RESTful Web 服务中的备用 URI

Posted

技术标签:

【中文标题】如何响应 RESTful Web 服务中的备用 URI【英文标题】:How to respond to an alternate URI in a RESTful web service 【发布时间】:2010-09-07 02:29:48 【问题描述】:

我正在构建一个 RESTful Web 服务,它的其中一个资源有多个 URI,因为有多个唯一标识符。服务器应该通过返回资源来响应对备用 URI 的 GET 请求,还是应该向规范 URI 发送 HTTP 3xx 重定向? HTTP 303(另请参阅) 是最合适的重定向吗?

澄清:HTTP 规范明确指出,重定向的选择取决于未来请求应使用的 URI。在我的应用程序中,“规范”URI 是最稳定的替代方案;替代 URI 将始终指向相同的规范 URI,否则将变为无效。

【问题讨论】:

【参考方案1】:

Ubiguchi 的回答满足了我的需要,除了我现在认为重定向是可行的方法,通过响应代码上 HTTP 1.1 规范部分的链接。事实证明,我实际上需要一个 301 重定向,因为我重定向到的 URI 更“正确”且更稳定,因此应该用于未来的请求。

【讨论】:

【参考方案2】:

在 W3C 的 Architexture of the World Wide Web, Volume One 下,有一个关于 URI 别名 (Section 2.3.1) 的部分说明如下:

“当 URI 别名确实成为通用货币时,URI 所有者应该使用诸如服务器端重定向之类的协议技术来关联这两个资源。当 URI 所有者支持将别名 URI 重定向到相应的“官方”时,社区会受益" URI。有关重定向的更多信息,请参阅RFC2616 中的第 10.3 节,重定向。另请参阅 CHIPS,了解有关服务器管理员的一些最佳实践的讨论。"

对于它的价值,我建议使用 302 重定向。

【讨论】:

【参考方案3】:

我个人更愿意返回资源而不是使用重定向,尽管我怀疑这只是因为我的潜意识告诉我重定向更慢。

但是,如果您决定使用重定向,我认为 302 或 307 可能比 303 更合适,尽管 w3.org 包含您可以使用的不同重定向代码的详细信息。

【讨论】:

同意,直截了当地告诉客户端使用另一个 URI 发出另一个请求是没有意义的。给客户端你知道它要求的资源,并告诉它将来应该使用什么 URI。

以上是关于如何响应 RESTful Web 服务中的备用 URI的主要内容,如果未能解决你的问题,请参考以下文章

RESTful 响应如何在 Yii2 中返回 JSON 而不是 XML?

解析来自 Restful Web 服务的响应的 C# 代码

Spring Webflux 构建响应式 Restful Web 服务

Spring Webflux 构建响应式 Restful Web 服务

Spring Webflux 构建响应式 Restful Web 服务

Spring Webflux 构建响应式 Restful Web 服务