RESTful URI 尾部斜线或无尾部斜线
RESTful URI trailing slash or no trailing slash
当谈到 Restful URI 上的尾部斜线时,是否有我可以引用的权威立场? Roy Fielding 的一个会很棒。网络在两个方面都有权威意见。这两个位置是:尾部斜杠表示资源,没有则表示没有。另一个论点是结尾的斜杠没有语义值。是哪个?
示例:
@GetMapping(path = "/users/")
public List<User> getUsers() {
....
}
@GetMapping(path = "/users/{id}")
public User getUser(@PathVariable String type) {
.....
}
@PutMapping(path = "/users/")
public User updateUser(@RequestBody User user) {
....
}
@PostMapping(path = "/users/")
public User createUser(@RequestBody User user) {
....
}
@DeleteMapping(path = "/users/{id}")
public void deleteUser(@PathVariable Long id) {
....
}
是否应该删除结尾的斜线?
以下url:
http://example/foo
http://example/foo/
不一样url。缓存会将它们分开存储。因此,从这个意义上讲,存在真正的区别。规范化 URLS 不会去除它们。
每个 URI(以斜杠结尾或不以斜杠结尾)都将指向一个资源。
据我所知,也没有具体的使用建议。某些协议(例如 WebDAV)使用它来表示以斜杠结尾的 URL 暗示它是一个集合。
以斜杠结尾的一个小好处是文档内的相对 URL(不以斜杠开头)将引用集合中的项目。利用这一点意味着客户端需要正确解析相对 urls,这并不总是正确的。
我见过的大多数 API 都不以斜杠结尾。对某些人来说,以斜杠结尾(并要求这样做)可能是令人惊讶的行为。
没有官方消息来源,因为我认为它们不存在。我对标准相当深入,所以我对此很有信心。
Is there an authoritative position I can cite when it comes to a trailing slash on a Restful URI?
URI 的权威引用是RFC 3986。第 3.3 节包括段的生产规则。
/users
此 URI 的路径 /users
包括一个段:“users”
/users/
此 URI 的路径 /users/
包括两个段:“用户”和 一个空段。
REST 客户端应将 /users
和 /users/
视为两个不同的标识符 - 例如每个标识符都有不同的缓存条目。
REST 不就何时使用其中任何一个,或者何时可以选择同时使用两者提供任何类型的意见。这就是要点的一部分,授权机构(服务器)可以以任何它喜欢的方式将 URI 分配给资源。就其他人而言,标识符是不透明的。
这意味着您使用的URI拼写只需要符合当地的拼写约定。
Rails Routing from the Outside In 描述了您可能在本地采用的一种可能约定:“集合”使用单段拼写,集合成员使用双段拼写。
使用该约定 /users
将引用该集合,而 /users/
,据我所知,不会被使用。
在一个成员具有空 ID 有意义的域中,那么我们可能期望该成员具有标识符 /users/
。
当谈到 Restful URI 上的尾部斜线时,是否有我可以引用的权威立场? Roy Fielding 的一个会很棒。网络在两个方面都有权威意见。这两个位置是:尾部斜杠表示资源,没有则表示没有。另一个论点是结尾的斜杠没有语义值。是哪个? 示例:
@GetMapping(path = "/users/")
public List<User> getUsers() {
....
}
@GetMapping(path = "/users/{id}")
public User getUser(@PathVariable String type) {
.....
}
@PutMapping(path = "/users/")
public User updateUser(@RequestBody User user) {
....
}
@PostMapping(path = "/users/")
public User createUser(@RequestBody User user) {
....
}
@DeleteMapping(path = "/users/{id}")
public void deleteUser(@PathVariable Long id) {
....
}
是否应该删除结尾的斜线?
以下url:
http://example/foo
http://example/foo/
不一样url。缓存会将它们分开存储。因此,从这个意义上讲,存在真正的区别。规范化 URLS 不会去除它们。
每个 URI(以斜杠结尾或不以斜杠结尾)都将指向一个资源。
据我所知,也没有具体的使用建议。某些协议(例如 WebDAV)使用它来表示以斜杠结尾的 URL 暗示它是一个集合。
以斜杠结尾的一个小好处是文档内的相对 URL(不以斜杠开头)将引用集合中的项目。利用这一点意味着客户端需要正确解析相对 urls,这并不总是正确的。
我见过的大多数 API 都不以斜杠结尾。对某些人来说,以斜杠结尾(并要求这样做)可能是令人惊讶的行为。
没有官方消息来源,因为我认为它们不存在。我对标准相当深入,所以我对此很有信心。
Is there an authoritative position I can cite when it comes to a trailing slash on a Restful URI?
URI 的权威引用是RFC 3986。第 3.3 节包括段的生产规则。
/users
此 URI 的路径 /users
包括一个段:“users”
/users/
此 URI 的路径 /users/
包括两个段:“用户”和 一个空段。
REST 客户端应将 /users
和 /users/
视为两个不同的标识符 - 例如每个标识符都有不同的缓存条目。
REST 不就何时使用其中任何一个,或者何时可以选择同时使用两者提供任何类型的意见。这就是要点的一部分,授权机构(服务器)可以以任何它喜欢的方式将 URI 分配给资源。就其他人而言,标识符是不透明的。
这意味着您使用的URI拼写只需要符合当地的拼写约定。
Rails Routing from the Outside In 描述了您可能在本地采用的一种可能约定:“集合”使用单段拼写,集合成员使用双段拼写。
使用该约定 /users
将引用该集合,而 /users/
,据我所知,不会被使用。
在一个成员具有空 ID 有意义的域中,那么我们可能期望该成员具有标识符 /users/
。