gpt4 book ai didi

rest - HATEOAS:绝对或相对 URL?

转载 作者:行者123 更新时间:2023-12-03 05:17:18 26 4
gpt4 key购买 nike

在使用 HATEOAS 设计 RESTful Web 服务时,将链接显示为完整 URL(“http://server:port/application/customers/1234”)与仅显示路径(“/application/customers/1234”)相比有何优缺点?

最佳答案

当人们说“相对 URI”时,存在微妙的概念歧义。

作者:RFC3986's definition ,通用 URI 包含:

  URI         = scheme ":" hier-part [ "?" query ] [ "#" fragment ]

hier-part = "//" authority path-abempty
/ path-absolute
/ path-rootless
/ path-empty

foo://example.com:8042/over/there?name=ferret#nose
\_/ \______________/\_________/ \_________/ \__/
| | | | |
scheme authority path query fragment

棘手的是,当省略方案和权限时,“路径”部分本身可以是绝对路径(以 / 开头)或“无根”相对路径。示例:

  1. 绝对 URI 或完整 URI:“http://example.com:8042/over/there?name=ferret”
  2. 这是一个相对 URI,带有绝对路径:/over/there
  3. 这是一个相对 URI,带有相对路径:这里./here../here 或等等

因此,如果问题是“服务器是否应该在静态响应中生成相对路径”,答案是“否”并且 detail reason is available here 。我认为大多数人(包括我)反对“相对URI”实际上是反对“相对路径”。

实际上,大多数服务器端 MVC 框架都可以轻松生成带有绝对路径的相对 URI,例如 /absolute/path/to/the/controller,并且问题变成“服务器实现是否应该在绝对路径前面添加 scheme://hostname:port 前缀”。就像OP的问题一样。我对此不太确定。

一方面,我仍然认为建议服务器返回完整的 uri。但是,服务器应该 never hardcode the hostname:port thing inside source code like this (否则我宁愿回退到具有绝对路径的相对 uri)。解决方案是服务器端始终从 HTTP 请求的“Host” header 获取该前缀。但不确定这是否适用于所有情况。

另一方面,客户端将http://example.com:8042和绝对路径连接起来似乎并不是很麻烦。毕竟,客户端在向服务器发送请求时已经知道该方案和域名,对吗?

总而言之,我想说,建议使用绝对 URI,可能会回退到具有绝对路径的相对 URI,切勿使用相对路径

关于rest - HATEOAS:绝对或相对 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2239405/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com