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

时间:2020-03-05 18:44:15  来源:igfitidea点击:

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

澄清:HTTP规范明确指出,重定向的选择取决于将来的请求应使用哪个URI。在我的应用程序中,"规范" URI是最稳定的选择。替代URI将始终直接指向相同的规范URI,否则将无效。

解决方案

回答

我个人很想返回资源,而不是忙于重定向,尽管我怀疑那仅仅是因为我的潜意识告诉我重定向速度较慢。

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

回答

在W3C的互联网建筑学,第一卷中,有关于URI别名的部分(第2.3.1节),其中指出:

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

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

回答

来自Ubiguchi的答案满足了我的需要,除了我现在认为通过链接到响应代码的HTTP 1.1规范部分的链接,重定向是必经之路。事实证明,我实际上需要301重定向,因为重定向到的URI更"正确"且稳定,因此应将其用于将来的请求。