RESTful URI末尾斜杠或不末尾斜杠

时间:2020-05-01 16:58:43

标签: rest restful-url

在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) {
   ....
  } 

是否应删除斜杠?

2 个答案:

答案 0 :(得分:4)

在Restful URI上的斜杠后面是否可以引用权威性位置?

关于URI的权威参考是RFC 3986。 3.3节包含细分的生产规则。

/users

此URI的路径为/users,其中包含一个段:“用户”

/users/

此URI的路径为/users/,其中包括两个段:“用户”和一个空段

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

REST不提供关于何时使用这两种方法之一或何时选择同时使用这两种方法的意见。这就是重点的一部分,授权机构(服务器)可以按照自己喜欢的任何方式将URI分配给资源。就其他所有人而言,标识符是不透明的。

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

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

使用约定/users会引用集合,而据我所知,/users/不会被使用。

在一个域中,对于一个成员来说,有一个空的ID是有意义的,那么我们可能希望该成员具有标识符/users/

答案 1 :(得分:3)

以下网址:

http://example/foo
http://example/foo/

不是相同的网址。缓存将分别存储它们。因此,从这个意义上讲,存在真正的区别。标准化URLS不会删除它们。

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

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

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

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

没有官方消息,因为我认为它们不存在。我对标准非常了解,因此对此很有信心。