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

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

感觉进入了死胡同了

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

6790 次点击
所在节点    程序员
72 条回复
XCFOX
2022-06-17 18:55:20 +08:00
GraphQL 解君愁
dcsuibian
2022-06-17 19:02:16 +08:00
POST /search-results
POST 是新建资源,“搜索”不能作为一种资源,但“搜索结果”呢?
knives
2022-06-17 19:05:32 +08:00
可以用 Content-Type 区分。POST application/json 为创建,POST application/x-www-form-urlencoded 为查询
oxromantic
2022-06-17 19:14:50 +08:00
你这个业务场景就是创建啊,创建一个查询结果集
jorneyr
2022-06-17 19:16:59 +08:00
JSON Base64 编码一下,作为一个 URL Query 参数传给后端。
imycc
2022-06-17 19:18:08 +08:00
执着于 RESTFul 的话,那就是用 POST 创建一个查询请求,返回的就是查询请求的结果。(是不是很合理)
不执着于 RESTFul 的话,GET 的 querystring 里面直接塞一段 json 字符串。之前用 steam 的 API ,他们就是这么干的
version0
2022-06-17 19:22:30 +08:00
不用纠结 restful 啦,以前我也纠结,直到我看到了一些出名的工具咋查询的,比如 elasicSearch
chendy
2022-06-17 19:27:15 +08:00
直接 POST /xxx/_search
规范是死的,人是活的
Opportunity
2022-06-17 19:36:31 +08:00
POST /xxx
X-HTTP-Method-Override: GET

{ }

按照 REST 规范应该是这么搞,尤其是有些代理服务器对 DELETE 之类方法支持不好的时候

IBM 用的 x-method-override
Opportunity
2022-06-17 19:38:44 +08:00
pengtdyd
2022-06-17 19:42:04 +08:00
@chendy 同意!规范是死的,如果 java 都按照阿里的 java 开发手册来,那估计大部分项目都要重构了
sujin190
2022-06-17 19:47:37 +08:00
@TWorldIsNButThis 绝大部分库和软件的实现才叫规范,写在纸上的可不叫规范,别说其他了,浏览器估计都不支持 get 传 body
ijse
2022-06-17 19:53:15 +08:00
可以用 tj 的 npm 包:
https://www.npmjs.com/package/qs

nodejs 官方文档有介绍,这种基本算规范了吧
https://nodejs.org/api/querystring.html
kytrun
2022-06-17 19:58:48 +08:00
本质还是强迫症导致的。这么看:符合规范时你的接口叫 RESTful ,不符合规范叫接近 RESTful ,为了高效率工程化做出取舍,达到最佳状态,没毛病
comoyi
2022-06-17 20:38:31 +08:00
进死胡同了就换大路走
规范并不一定就是好的,一个规范不好用的时候就使用其他规范。
之前也纠结过,多层级的参数该 POST 还是得用
cedoo22
2022-06-17 20:42:02 +08:00
emmm, 我在想,非得明文嘛, 直接参数格式化转 base64 ,后台在解一下。
iseki
2022-06-17 20:42:46 +08:00
别让自己难受…规范不合适的时候就别按规范做了
lovedebug
2022-06-17 20:54:54 +08:00
参考微软,谷歌规范,这一类情况应该用 POST, 微软和谷歌针对复杂情况扩展了 RESTful 方案
类似 POST /v1/logs/:search Req Body {} 这样做适合你的情况,Path 最后是一个动作
cutchop
2022-06-17 21:22:22 +08:00
我所有请求都用 POST
dunhanson
2022-06-17 21:41:15 +08:00
@chendy 以前就是这样,想改变下

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

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

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

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

© 2021 V2EX