这两种 API 设计哪种更好? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
landfill
V2EX    程序员

这两种 API 设计哪种更好?

  •  
  •   landfill 261 天前 2336 次点击
    这是一个创建于 261 天前的主题,其中的信息可能已经有所发展或是发生改变。
    编程语言是 Java 。 不知道弱类型的语言会有什么不同吗

    POST /api/parse/message-type-a
    POST /api/parse/message-type-b
    每个 API 返回对应类型的 payload


    POST /api/parse
    请求体中带上 message type ,返回一个包装后的 payload


    每个 type 返回的字段差别挺大的,type 现在有十来个,未来还有可能增加
    13 条回复    2025-01-24 10:58:10 +08:00
    lwldcr
        1
    lwldcr  
       261 天前
    我喜欢第一种 api 指向精准 下游处理也方便 不需要做类型判别啥的

    当然如果前端需要在某个地方支持多种 payload 展示,那第一种估计就不满足或者比较难用了
    xiaohupro
        2
    xiaohupro  
       261 天前
    可以用路径参数来解决,例如你如果是使用 SpringBoot 的话:

    @PostMapping("/parse/{messageType}")
    public CommResp parseByMessageType(@PathVariable("messageType") String messageType) {
    // 在里面根据参数 messageType 做具体的操作
    }

    不过如果只是根据消息类型获取内容,我建议使用 GET ,不过用 POST 也行,个人习惯问题
    landfill
        3
    landfill  
    OP
       261 天前
    @xiaohupro 这个等于是第二种方案吧 只是 type 放到了路径参数里
    8355
        4
    8355  
       261 天前
    我会选择方案 1 ,枚举值可以自定的情况下这个方案更好,资源型查询型接口可以更方便的套 cdn 等等,迭代风险也低,更加灵活,还可以通过路由做分流等等。

    弱类型语言更习惯用方案 2 ,数据大多数来自于查表一套写完逻辑不变的话基本免维护。
    sankooc
        5
    sankooc  
       261 天前
    我个人喜欢第一种 后期做统计稍微简单一些
    liuhuihao
        6
    liuhuihao  
       261 天前
    [每个 type 返回的字段差别挺大的] ,根据这个我会选择方案一。如果一个接口,连自己内部返回的字段都不固定的话,维护起来会很困难,尤其是日积月累增加了多种类型之后。
    sagaxu
        7
    sagaxu  
       261 天前
    如果能把 payload 类型统一化,放一个请求路径没问题。如果统一不了,最好还是拆分成不同的 API 。
    chendy
        8
    chendy  
       261 天前
    放路径里
    在 url 上多暴露一些东西有助于后面的分析统计和问题排查
    xuanbg
        9
    xuanbg  
       260 天前
    没啥本质区别,我喜欢第二种,能少很多事
    HappyAndSmile
        10
    HappyAndSmile  
       260 天前
    第二种
    lijiangang886
        11
    lijiangang886  
       260 天前
    偏题:本着实用主义精神,一律 post ,不听那些把几十年前发明的 http method 的严重落后于当前时代的老古董语义当回事的意见
    AlexHsu
        12
    AlexHsu  
       260 天前
    我觉得得看 message type 有多少了 多就第二种 少就第一种
    几十上百个 type uri 也太乱了
    837080606
        13
    837080606  
       260 天前
    看功能,属于同一个功能就选第一个,相似代码多的选第一个。否则第二个。
    如果不是相同功能里的,看着也麻烦。
    相似代码少的,写 switch 其实和分开没啥区别,就是少写了个 URL 。
    关于     帮助文档     自助推广系统   &nsp; 博客     API     FAQ     Solana     4968 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 09:41 PVG 17:41 LAX 02:41 JFK 05:41
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86