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

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

感觉进入了死胡同了

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

6853 次点击
所在节点    程序员
72 条回复
leoleoasd
2022-06-18 13:29:02 +08:00
这类查询,可以视为『创建一个查询请求』,用 POST 也合理
LeegoYih
2022-06-18 13:33:25 +08:00
业务项目就不要考虑完美 restful 了
bxb100
2022-06-18 13:52:28 +08:00
graphql 适合你
saltbo
2022-06-18 14:33:36 +08:00
restful 是要在接口设计时就要按照规范来。也就是说 api 描述的是资源,不是动作,不是业务逻辑。你这接口 search 明显是个动作,直接就不符合 restful 规范,所以就别提 GET 不能传递复杂参数了。

如果你这么设计 api ,就不要说什么 restful 了。或者自己定规范,或者用 GraphQL 。
cheng6563
2022-06-18 15:08:21 +08:00
@xuanbg 但是类似 webhook ,就是长时间阻塞请求当异步回调用的。。。
Torpedo
2022-06-18 18:02:49 +08:00
协议是不限制的,基本框架都可以。主要是浏览器的 get 不支持 body 。

另外,按照 restful 写业务的,基本都妥协的挺多的
evan1024
2022-06-18 19:21:50 +08:00
推荐先拿一个标准比如 openapi3 swagger2 定义
fuxinya
2022-06-18 22:47:50 +08:00
es 的查询请求就是传的 body ,而且是 get 请求
erquiasz0825
2022-06-19 23:07:08 +08:00
@TWorldIsNButThis 对,GET 方法没有规定说不能传 body ,但前端有些框架不支持,我之前也遇到过,就约定用 post 了。

看到 elastic 官方文档对这个问题也有讨论:

https://www.elastic.co/guide/cn/elasticsearch/guide/current/_empty_search.html
erquiasz0825
2022-06-19 23:09:36 +08:00
@fuxinya 根据 elastic 文档的说法,他们其实更倾向于 GET ,但由于某些框架不支持,所以同时支持 POST ,见楼上的链接
dalianliyan
2022-06-20 11:18:09 +08:00
odata
veike
2023-05-27 09:20:24 +08:00
@cpstar GET /search/{searchWord}/{area}/{channel}/{pageSize}/,这种风格明显和 restful api 风格不符合,searchCondition 是规范里有明确提到?

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

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

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

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

© 2021 V2EX