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/