REST API 中,同一个参数多个值,正确的传递姿势是怎样的?

2018 年 9 月 13 日
 jasonyang9

比如要获取 2 本书的信息:

GET http://server/books?id=1001&id=1002
GET http://server/books?id=1001,1002
GET http://server/books/1001/1002           这个肯定不对了

当然用 POST 配合 JSON 值过去应该是不符合语义的。

所以正确的姿势是怎样的?服务器端又应该如何获取这些值?

10528 次点击
所在节点    PHP
41 条回复
syh
2018 年 9 月 13 日
试下这样 http://server/books?id=1001_1002
mnssbe
2018 年 9 月 13 日
id 放个 json
Mutoo
2018 年 9 月 13 日
?ids[]=1001&ids[]=1002
linxl
2018 年 9 月 13 日
?id[]=1&id[]=2
l12ab
2018 年 9 月 13 日
id[]=1001,1002
ChoateYao
2018 年 9 月 13 日
如果是 PHP 的话,直接使用 id[]=1&id[]=2 即可。
l12ab
2018 年 9 月 13 日
不好意思,打错了,正确的见 3 楼 4 楼
chinvo
2018 年 9 月 13 日
符合 http 的用数组,或者用逗号分隔
tanszhe
2018 年 9 月 13 日
ids=[1,2,3,4,5,34,……]
broadliyn
2018 年 9 月 13 日
ids=1,2,3,4 不就好了。
Restful Api 只是一种 Api 风格,不是强制规范。你完全可以选择性选择自己觉得有用的建议风格。
没必要奉为圭臬。
Mutoo
2018 年 9 月 13 日
@Mutoo 这种写法的 querystring,PHP 可以直接支持,但并没有出现在任何的 RFC 规范中,其它语言的后端需要自行解析。
gouflv
2018 年 9 月 13 日
GET http://server/books/1001,1002
fighterlyt
2018 年 9 月 13 日
url 长度是有限的,而参数是无限的,所以出现在 URL 中的批量参数,都是有局限的
gaius
2018 年 9 月 13 日
前两种就是 int[]接收
stzz
2018 年 9 月 13 日
我来个绝对 restful 的方法,
请求两次
GuryYu
2018 年 9 月 13 日
POST http://server/books/list
Body 里面用 JSON 传过滤参数
可以理解成创建一个 books 的临时列表资源, 列表的过滤参数来自 BODY, 并直接返回该资源
ylcc
2018 年 9 月 13 日
三个字,随便弄,只要你的后端能解析
fighterlyt
2018 年 9 月 13 日
@GuryYu 看了这个多回复,只有你的说法还是比较合理的,其他都完全不考虑 URL 长度问题
vicvinc
2018 年 9 月 13 日
/books?include=author&book[]=1001,1002
vicvinc
2018 年 9 月 13 日
@l12ab 正解

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

https://study.congcong.us/t/488981

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

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

© 2021 V2EX