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

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

感觉进入了死胡同了

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

6808 次点击
所在节点    程序员
72 条回复
dunhanson
2022-06-17 21:42:18 +08:00
@cedoo22 确实可以这样,以前也这么干过,但是不直观这种,想要看细节,还要 base decode 一下
dunhanson
2022-06-17 21:43:32 +08:00
@version0 是的,ES 这个问题我看别人在 github 的 issue 上面都吐槽了。
dunhanson
2022-06-17 21:45:04 +08:00
@XCFOX 估计普及没那么快
dunhanson
2022-06-17 21:46:49 +08:00
@kytrun
@comoyi
@iseki 哈哈哈 准备复杂查询用 POST 了
Jooooooooo
2022-06-17 21:55:57 +08:00
都扔进 post 的 body 里呀.

你这这么复杂的请求体, 还强行用 get 要不得.
Felldeadbird
2022-06-17 22:39:11 +08:00
复杂体不要用 GET 。 或者将上面的 value 数值化,就是调试问题变得可读性奇差。
DOLLOR
2022-06-17 22:44:44 +08:00
写在 body 不行,那就写在 http header 里面。
可以把对象 base64 之后,写在自定义的请求报头里面(认真
leonme
2022-06-17 22:45:12 +08:00
@XCFOX 这都不是一个维度的东西……
GeruzoniAnsasu
2022-06-17 22:48:17 +08:00
你的接口是一个动作语义


你已经不 restful 了


趁早放弃残废的 restful 开始 post 一把梭还有救



你可以美其名曰 lite-json-rpc
Rocketer
2022-06-17 22:50:25 +08:00
又见 RESTful 八股文。

RESTful 根本没有确定的标准,只是一个大概的方向。你死抠细节……哪有细节让你抠?

所以大概方向对,团队内部统一,好使,就行了。
terranboy
2022-06-17 22:53:57 +08:00
qs 能行吗
dddd1919
2022-06-18 00:08:25 +08:00
参考 ElasticSeach 的结构化查询:
POST /resources/_search
sneezry
2022-06-18 00:10:26 +08:00
看其实这是个 query API ?为什么要设计成 GET 啊,是有什么限制吗
hhyyd
2022-06-18 00:29:58 +08:00
碰到过类似问题。我们当时的方案

有直接用 get 传 body (楼上说可能有问题,这个我没碰到不清楚);

也有直接拼 query ,虽然不好看但是容量限制很大,一般超不了;

还有就是用 post ,个别复杂搜索接口用 post ,毕竟规矩是死的,人是活的,不要被限制死。
guoqiao
2022-06-18 07:10:40 +08:00
方法 1: 参数结构不要嵌套, 然后 url 参数是可以重复的,比如 /search?city=广州&city=深圳. 当然后端需要正确的解析.
方法 2: GET 可以带 body, 相应的, 只要你的后端去读取 body 并解析就行了.
方法 3: 用 POST, 代码的首要意义在于实现功能, 不必拘泥于繁文缛节.
xuanbg
2022-06-18 08:51:14 +08:00
@Chad0000 OCR 这个要先 POST 传图创建一个任务,然后根据返回的 id 把识别出来的内容 GET 回来啊。。。狗头保命。

不过 OCR 还真的需要这样,这并不是为了 restful ,而是异步任务可以提高效率。
yueye115
2022-06-18 10:21:28 +08:00
@dingyaguang117 正解, query 有长度限制, 而且 query 都是字符串, 没有其他类型吧. http 就是这么设计的, 你非要传个复杂对象去查, 只能说你就不符合 http 的规范.
dunhanson
2022-06-18 11:02:05 +08:00
@GeruzoniAnsasu
@Rocketer
@hhyyd
@guoqiao 准备改成复杂的查询用 POST
liyunlong41
2022-06-18 12:19:42 +08:00
我也遇到过这种,批量查询的 API ,uid 可能有几千个,直接用了 post
dingyaguang117
2022-06-18 13:00:15 +08:00
POST 有个问题是你这个查询链接就不可以分享了

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

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

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

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

© 2021 V2EX