V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yongchiu
V2EX  ›  程序员

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

  •  
  •   yongchiu · 2022-01-08 23:41:37 +08:00 · 2686 次点击
    这是一个创建于 1050 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    当然,要考虑超长,不过查询应该问题不大
    rekulas
        9
    rekulas  
       2022-01-09 09:25:44 +08:00
    我也建议全部 post 来,rest 本身就不是一种足够完备的风格,如果全部机械式按 rest 设计只会带来更多麻烦不便
    iikebug
        10
    iikebug  
       2022-01-09 10:30:35 +08:00
    我自己写的接口都是 post 的,管你什么方法,前端舒服的一批
    yongchiu
        11
    yongchiu  
    OP
       2022-01-09 13:10:43 +08:00
    @bombless 后端不支持带 body
    yongchiu
        12
    yongchiu  
    OP
       2022-01-09 13:11:43 +08:00
    @kop1989 这样的话,还是需要设计多个参数吧,把这些参数统一序列化传递给后端进行解析,是这个意思吗?
    yongchiu
        13
    yongchiu  
    OP
       2022-01-09 13:12:33 +08:00
    @rekulas 我感觉都定义成 POST 可能会更好一些
    lisongeee
        14
    lisongeee  
       2022-01-09 20:16:31 +08:00
    有时候挺纠结 get 还是 post ,不能要求每个人不是傻逼,还不如直接用 json-rpc ,统一的规范比什么都好
    zqli92
        15
    zqli92  
       2022-01-09 21:52:07 +08:00
    一个建议:只用 get/post 方法,body 的数据结构可以看这个: https://hackertalk.net/post/202030390784430080
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2795 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 06:17 · PVG 14:17 · LAX 22:17 · JFK 01:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.