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

2018-09-13 15:40:31 +08:00
 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 值过去应该是不符合语义的。

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

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

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

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

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

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

© 2021 V2EX