请教大家一个问题,如何设计 HTTP API 接口?

2022-01-08 23:41:37 +08:00
 yongchiu

现在做开发的时候遇到一个问题,需要将以前三个接口完成的功能整合到一个功能里来,对于 POST 类的请求可以整合到 body 里,里面是由多个 JSON 组成的一个大 JSON 数据,这样做主要是参考 Google 的做法。 对于 GET 类的请求应该如何设计呢,GET 请求一般不用 body ,怎么用一个比较好的方式把三个接口的参数整合到一起?

2488 次点击
所在节点    程序员
15 条回复
rekulas
2022-01-08 23:51:36 +08:00
直接拼接倒 url 或者 (如果有冲突)装入 json 整个作为一个参数?
反正作为 get 来说参数应该不多,如果参数太多还用 get ,感觉是有问题的
rekulas
2022-01-08 23:54:36 +08:00
现在还有个 GraphQL 的新概念,需要后端配合修改据说可以多个 api 整合但是会增加不少工作量没用过
yongchiu
2022-01-08 23:59:14 +08:00
@rekulas 这是一个查询类的请求,查询一些数据的信息,因此考虑使用 GET 方法比较合适;装入 json 是怎么做呢? GET 请求能使用 JSON 吗?
yongchiu
2022-01-09 00:01:24 +08:00
@rekulas 主要是调用他人的 RPC 接口,RPC 只提供了两个接口,根据不同的参数返回不同的结果;因此 API 打算也按照 RPC 的接口进行设计,另一方面参考 Google 的 API 也是把多个接口的功能整合到了一个接口里面来
rekulas
2022-01-09 00:10:55 +08:00
api?{"req1param":{},"re2param":{}}
或考虑伪静态之类 api/{"req1param":{},"re2param":{}}

参数也可以编码一下
bombless
2022-01-09 04:56:16 +08:00
get 也是可以放 body 的,不过你要预先测试一下你的服务端是否支持。我后端用的是 springboot 那套是可以的
Chad0000
2022-01-09 05:34:21 +08:00
有时候没必要完全按 rest 建议来,我的所有 api 都是 post ,就不会有这个问题。
kop1989
2022-01-09 07:43:50 +08:00
可以拼在 URL 中,然后这个请求只有一个参数,其内容是 urlencode 过的、真正参数集合的序列化结果。

当然,要考虑超长,不过查询应该问题不大
rekulas
2022-01-09 09:25:44 +08:00
我也建议全部 post 来,rest 本身就不是一种足够完备的风格,如果全部机械式按 rest 设计只会带来更多麻烦不便
iikebug
2022-01-09 10:30:35 +08:00
我自己写的接口都是 post 的,管你什么方法,前端舒服的一批
yongchiu
2022-01-09 13:10:43 +08:00
@bombless 后端不支持带 body
yongchiu
2022-01-09 13:11:43 +08:00
@kop1989 这样的话,还是需要设计多个参数吧,把这些参数统一序列化传递给后端进行解析,是这个意思吗?
yongchiu
2022-01-09 13:12:33 +08:00
@rekulas 我感觉都定义成 POST 可能会更好一些
lisongeee
2022-01-09 20:16:31 +08:00
有时候挺纠结 get 还是 post ,不能要求每个人不是傻逼,还不如直接用 json-rpc ,统一的规范比什么都好
zqli92
2022-01-09 21:52:07 +08:00
一个建议:只用 get/post 方法,body 的数据结构可以看这个: https://hackertalk.net/post/202030390784430080

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

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

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

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

© 2021 V2EX