RESTful URI 尾部斜杠或无尾部斜杠

Ste*_*hen 9 rest restful-url

当涉及到 Restful URI 上的尾部斜杠时,我可以引用权威立场吗?罗伊菲尔丁的一个会很棒。网络有两种方式的权威意见。这两个位置是: 尾部斜杠表示资源,而没有则没有。另一个论点是尾部斜杠没有语义价值。是哪个?例子:

  @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) {
   ....
  } 
Run Code Online (Sandbox Code Playgroud)

应该删除尾部斜杠吗?

Eve*_*ert 10

以下网址:

http://example/foo
http://example/foo/
Run Code Online (Sandbox Code Playgroud)

不是同一个网址。缓存将它们分开存储。因此,从这个意义上说,确实存在差异。规范化 URL 不会剥离它们。

每个 URI(是否以斜杠结尾)都将指向一个资源。

据我所知,也没有具体的建议可以使用。一些协议(例如 WebDAV)使用它来表明以斜杠结尾的 URL 暗示它是一个集合。

以斜杠结尾的一个小好处是文档内的相对 URL(不以斜杠开头)将引用集合中的项目。利用这一点意味着客户端需要正确解析相对 url,这并不总是正确的。

我见过的大多数 API 都不以斜杠结尾。对于某些人来说,以斜线结尾(并要求这样做)可能是令人惊讶的行为。

没有官方消息来源,因为我认为它们不存在。我对标准相当深入,所以我对此很有信心。

  • @Stephen,坦率地说,这听起来像是制表符与空格的问题;)如果这给您的公司带来了悲伤,我的感觉是这是一个文化问题,而不是技术问题。 (3认同)

Voi*_*son 9

当涉及到 Restful URI 上的尾部斜杠时,我可以引用权威立场吗?

URI 的权威参考是RFC 3986。第 3.3 节包括段的产生式规则。

/users
Run Code Online (Sandbox Code Playgroud)

此 URI 的路径/users包含一个段:“users”

/users/
Run Code Online (Sandbox Code Playgroud)

这个 URI 有一个路径/users/,它包括两个段:“用户”和一个空段

REST 客户端应该将/users/users/视为两个不同的标识符 - 例如,每个都有不同的缓存条目。

REST 不提供关于何时使用其中任何一个或何时您可以选择同时使用两者的任何意见。这就是授权(服务器)可以以任何它喜欢的方式将 URI 分配给资源的一部分。就其他人而言,标识符是不透明的。

这意味着您使用的 URI 拼写只需符合本地拼写约定。

Rails Routing from the Outside In描述了一种您可能在本地采用的可能约定:“集合”使用单段拼写,而集合的成员使用双段拼写。

使用该约定/users将引用集合,并且/users/据我所知,不会使用 。

在成员具有空 id 有意义的域中,我们可能期望该成员具有 identifier /users/