rest - 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) {
....
}
是否应该删除尾部斜杠?
解决方案
以下网址:
http://example/foo
http://example/foo/
不是同一个网址。缓存将它们分开存储。所以从这个意义上说,确实存在差异。规范化 URLS 不会剥离它们。
每个 URI(是否以斜杠结尾)都将指向一个资源。
据我所知,也没有具体的建议使用。一些协议(例如 WebDAV)使用它来建议以斜杠结尾的 URL 暗示它是一个集合。
以斜线结尾的一个小好处是文档内的相对 URL(不以斜线开头)将引用集合中的项目。利用这一点意味着客户端需要正确解析相对 url,这并不总是正确的。
我见过的大多数 API 都不以斜杠结尾。对某些人来说,以斜线结尾(并要求这样做)可能是令人惊讶的行为。
没有官方消息来源,因为我认为它们不存在。我对标准相当深入,所以我对此有相当的信心。
推荐阅读
- git - 如何修复 GitHub [Unrecognized author] 提交消息和链接到错误用户的提交?
- go - 有没有一种快速的方法来唯一地识别 Go 中的函数调用者?
- prometheus - 在 prometheus alertmanager 通知中提及 slack 用户
- python - 如何将整数 (+1) 添加到列表的项目中,除非它们在 Python 中具有特定值
- python - 基于数据集创建新变量 - 基本 python
- apache-flink - Apache Flink 有状态函数中的负积压
- containers - 如何使用 Podman 高效制作无根容器
- qt - Qt - QString 数字格式字符串(cformat),选项?
- python - 使用 Python 脚本执行 kubectl 命令
- java - 无法在 linux 服务器上使用 spring boot 访问公共资源(img,file ...)