RESTFul API 接口规范, GET 请求如何传递复杂对象?

2022-06-17 18:16:56 +08:00
 dunhanson

感觉进入了死胡同了

GET 用于查询,POST 用于创建,GET 传递 body 不符合规范

6761 次点击
所在节点    程序员
72 条回复
TWorldIsNButThis
2022-06-17 18:18:47 +08:00
规范没限制 get 传 body
只是一些框架不支持
dzdh
2022-06-17 18:19:35 +08:00
![]( )
wolfie
2022-06-17 18:19:55 +08:00
get 没 body
dingyaguang117
2022-06-17 18:22:08 +08:00
GET 传 body 有很多隐患。 要考虑整个链路上的库是否都支持。只要有一环不支持,就麻烦得很。

感觉直接参数 base64 一下放到 querystring 好点
dunhanson
2022-06-17 18:23:02 +08:00
@TWorldIsNButThis 有一些文章又说规范不建议,感觉都摸棱两可
dunhanson
2022-06-17 18:24:04 +08:00
@dingyaguang117 是可以这样子,但是好麻烦,也不直观
qunqun
2022-06-17 18:24:19 +08:00
post 一个 task, 然后 get 取结果 ?
DoveAz
2022-06-17 18:25:22 +08:00
@TWorldIsNButThis chrome 都不支持,这直接没得玩
Chad0000
2022-06-17 18:26:49 +08:00
所以有时候不需要完全按 restful 来。比如你有一个接口用来验证订单是否可提交,传的参数会很多,post 更合适。
Trim21
2022-06-17 18:30:57 +08:00
太过复杂就不用 rest 了呗。restful 本来就是为了方便理解 api 的,最后搞的又不直观又难用就本末倒置了。
dunhanson
2022-06-17 18:32:00 +08:00
@qunqun 这个增加工作量吧
dunhanson
2022-06-17 18:34:35 +08:00
@Trim21 现在进退两难
beginor
2022-06-17 18:34:48 +08:00
大对象用 post 吧,post 也属于 rest 吧
eason1874
2022-06-17 18:39:00 +08:00
这才多长,才几百字节,放 URL 没问题啊,连最落后的 IE 也支持 2K 长度 URL

二维展开到一维就好了,比如 searchWord=&areaProvince=&areaCity=,懒得处理就直接 area=encodeURIComponent(data json)
xuelu520
2022-06-17 18:39:22 +08:00
base64 传过去呗。确实需要用 get 只能考虑改下接口参数,自己解析。
另外规范灵活一点,改成 post 的
Chad0000
2022-06-17 18:39:44 +08:00
op 如果过于较真的话,那么 OCR 识别接口是不是应该使用 get ?然后你 get 传一张图片是不是更难了哈,这样真变成为了 restful 而 restful 了。
cpstar
2022-06-17 18:49:03 +08:00
OP 的确进入一个死胡同了,这个 searchCondition 不能这么弄
如果严格 RESTful ,那应该 GET /search/{searchWord}/{area}/{channel}/{pageSize}/...
该这么整么?显然不是啊,search 以及带有 searchCondition 的,并不是严格遵从 RESTful ,RESTful 可以理解对实体的,比如 GET /product/{id},
dunhanson
2022-06-17 18:49:52 +08:00
@Chad0000 这种属于 POST 吧?
dunhanson
2022-06-17 18:51:18 +08:00
@xuelu520 最早用的这种,但是不直观
dunhanson
2022-06-17 18:52:07 +08:00
@eason1874 在想有没有其他更好的方式

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

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

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

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

© 2021 V2EX