yongchiu
V2EX  ›  程序员

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

By yongchiu at 2022 年 1 月 8 日 · 3975 次点击

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

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

参数也可以编码一下
bombless
   6
bombless  
   2022 年 1 月 9 日 via Android
get 也是可以放 body 的,不过你要预先测试一下你的服务端是否支持。我后端用的是 springboot 那套是可以的
ktqFDx9m2Bvfq3y4
   7
ktqFDx9m2Bvfq3y4  
   2022 年 1 月 9 日 via iPhone
有时候没必要完全按 rest 建议来,我的所有 api 都是 post ,就不会有这个问题。
kop1989
   8
kop1989  
   2022 年 1 月 9 日 via iPhone
可以拼在 URL 中,然后这个请求只有一个参数,其内容是 urlencode 过的、真正参数集合的序列化结果。

当然,要考虑超长,不过查询应该问题不大
rekulas
   9
rekulas  
   2022 年 1 月 9 日
我也建议全部 post 来,rest 本身就不是一种足够完备的风格,如果全部机械式按 rest 设计只会带来更多麻烦不便
iikebug
   10
iikebug  
   2022 年 1 月 9 日
我自己写的接口都是 post 的,管你什么方法,前端舒服的一批
yongchiu
   11
yongchiu  
OP
   2022 年 1 月 9 日
@bombless 后端不支持带 body
yongchiu
   12
yongchiu  
OP
   2022 年 1 月 9 日
@kop1989 这样的话,还是需要设计多个参数吧,把这些参数统一序列化传递给后端进行解析,是这个意思吗?
yongchiu
   13
yongchiu  
OP
   2022 年 1 月 9 日
@rekulas 我感觉都定义成 POST 可能会更好一些
lisongeee
   14
lisongeee  
   2022 年 1 月 9 日
有时候挺纠结 get 还是 post ,不能要求每个人不是傻逼,还不如直接用 json-rpc ,统一的规范比什么都好
zqli92
   15
zqli92  
   2022 年 1 月 9 日
一个建议:只用 get/post 方法,body 的数据结构可以看这个: https://hackertalk.net/post/202030390784430080
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
© 2026 V2EX · 40ms · 3.9.8.5