Restful API 里,应该怎么处理最后的 /

2016-02-22 12:03:48 +08:00
 lhbc

按规范,比如请求用户列表,应该是
/api/users
那对于 /api/users/ 这种请求应该直接 404 还是等同 /api/users 处理?

3392 次点击
所在节点    API
20 条回复
v1024
2016-02-22 12:32:22 +08:00
标准的话,应该不处理结尾的 / ,因为 / 代表目录,隐含意思是 /index.htm 。
Jafee
2016-02-22 12:34:28 +08:00
dacapoday
2016-02-22 12:34:52 +08:00
直接返回一套字符串 显示 接口的说明,格式,使用方法?
或者该 API 的运行状态?
dacapoday
2016-02-22 12:37:15 +08:00
错了错了,我以为是根目录,无视上条
learnshare
2016-02-22 12:59:39 +08:00
#1 的观点是对的,加了 / 代表这个目录,默认是 /index.html
timonwong
2016-02-22 13:16:45 +08:00
对于 1 楼的观点,也有另外一种解释
因为请求列表是一个 LIST 行为,对于 LIST 行为,应该按照目录处理,所以就应该是
GET /api/users/
lhbc
2016-02-22 13:48:41 +08:00
@v1024
@learnshare
@timonwong
GET /api/users/ 这个操作应该没问题
不过对 /api/users/ 进行 POST(添加用户) 好像有点怪怪的

Restful 里好像没定义目录的概念,所有想弄清楚规范里是建议怎么处理的
搜索 restful directory, restful "last splash" 都没找到相关内容


@Jafee
这篇文章是对应浏览器和蜘蛛
Restful 应该不太一样
dorentus
2016-02-22 14:02:49 +08:00
实在不知道的话就参考别人的实现么,例如 github 的:
https://api.github.com/user 是可用的
https://api.github.com/user/ 则返回 404
lhbc
2016-02-22 14:07:27 +08:00
@dorentus 忘记了去参考一些大站的实现
thanks all.
mcfog
2016-02-22 14:53:25 +08:00
@lhbc 因为 splash 是飞溅, slash 才是斜杠

另外,一般说 trailing slash
learnshare
2016-02-22 15:32:28 +08:00
@lhbc RESTful 也是基于 HTTP ,参考 HTTP 协议的实现就好了
carlding
2016-02-22 18:00:25 +08:00
在 chrome 输入 www.baidu.com ,等进入网页后你把 url 复制粘贴到文本会发现自动多加了一个'/',所以还是等同处理吧。
这个'/'有无大部分人应该都会忽略吧。
毕竟不能将'/'后面认为是一个空字符串吧。
qq529633582
2016-02-22 18:49:28 +08:00
@carlding 这个只有根目录才会的
aprikyblue
2016-02-22 19:08:04 +08:00
@carlding
只有根目录+1 ,
根目录是 /,为空就不太科学了吧。。

以前看某些文章貌似说一些 http server 会把 http[s]://host 给 301 到 http[s]://host/ (当然前提是 client 发出了这种请求),没验证过


另外对 LZ 问题,我赞同 6L
jybox
2016-02-22 19:50:02 +08:00
我想提一种情况,比如有两个 API : DELETE /users 和 DELETE /users/:name ,分别是删除所有用户和删除指定用户。如果在调用后者时忘记加 name ,就变成了 DELETE /users/,我觉得最好还是不要当作前者,而是直接报错好一些。
owlsec
2016-02-22 20:02:24 +08:00
@jybox 心疼 leancloud
lhbc
2016-02-22 21:10:31 +08:00
@jybox
@owlsec
这个……真有真实案例?
julyclyde
2016-02-22 22:28:45 +08:00
@aprikyblue 发不出这种请求。你看看 http 请求行的格式
aprikyblue
2016-02-22 23:02:17 +08:00
@julyclyde 我也想到了 http 请求的格式,所以才说“为空就不太科学了”
刚才去试了试,百度神马也没返回,必应返回了 400 Bad Request
是我道听途说了
dalang
2016-02-23 10:29:56 +08:00
我自己写得 rest api , /api/users/ 这种请求是直接 404 处理。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/258184

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX