首页 > 解决方案 > RESTful URI 尾部斜杠或没有尾部斜杠

问题描述

当谈到 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) {
   ....
  } 

是否应该删除尾部斜杠?

标签: restrestful-url

解决方案


以下网址:

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

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

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

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

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

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

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


推荐阅读