接口设计请教 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
reid2017
V2EX    Java

接口设计请教

  •  
  •   reid2017 2019-07-09 18:06:53 +08:00 6183 次点击
    这是一个创建于 2361 天前的主题,其中的信息可能已经有所发展或是发生改变。
    前端 app 里有三个业务开关 true/false,三个开关对应的业务是相互独立不关联的,而且都在同一个设置页面,对应于数据库同一张表里的三个字段,那么在设计修改接口时,是三个开关各设计一个接口,or 只设计一个接口( 传参方式用 JSON request body )?

    目前是各开关一个独立的接口,感觉有点冗余。。
    18 条回复    2019-07-30 00:20:35 +08:00
    rain0002009
        1
    rain0002009  
       2019-07-09 18:14:37 +08:00
    像极了我们的后端,获得超级管理员数量,管理员数量,和编辑数量 竟然是 3 个接口
    luckylo
        2
    luckylo  
       2019-07-09 18:37:29 +08:00 via Android
    同一个业务场景,web(pc 浏览器),wap ,app 会写三套接口,你能理解?
    cccssss
        3
    cccssss  
       2019-07-09 18:54:01 +08:00
    @luckylo 重点老板还觉着这种人干活出活。一直有功能开发出来,而三端复用 api 的人整天无所事事?
    ffeii
        4
    ffeii  
       2019-07-09 18:58:13 +08:00
    我觉得都可以,都合理
    micean
        5
    micean  
       2019-07-09 19:06:44 +08:00
    很正常,每个接口尽量做好一件事而不是只为了满足前端的需求
    irvinghua
        6
    irvinghua  
       2019-07-09 19:40:56 +08:00   1
    肯定是一个接口干完这个事情优啊。。而且你这表结构设计也不合理,字段应该设计成:id,switch_name,switch_status(枚举类别 true/false) ,一个开关状态对应一条记录,而不是新增一个开关,就加一个字段。如果需求频繁改,你这表结构字段频繁变动,sql 也频繁变,ORM 映射成实体类也频繁变,这不累死?
    Caballarii
        7
    Caballarii  
       2019-07-09 20:13:44 +08:00
    rest 的缺点就是这样,graphql 欢迎你
    jiekii
        8
    jiekii  
       2019-07-09 21:59:02 +08:00
    设计个 API 这么纠结 >_>
    rainbirda
        9
    rainbirda  
       2019-07-09 22:17:16 +08:00 via Android
    感觉没啥毛病啊 单一职责 而且以后每个开关后台有业务的话 改一个开关不至于影响其他的
    yuankui
        10
    yuankui  
       2019-07-09 22:39:46 +08:00
    现在的 web 接口,就是太灵活,一个东西有很多种解,这样才会早餐分歧。。
    啥时候,能出一个编程范式,可能一个东西,就只有一种实现,那么程序时间就可以解放了。

    甚至,编程机器人,也就不远了。。哈哈
    zisway
        11
    zisway  
       2019-07-09 23:00:31 +08:00   1
    每个开关一条记录,一个接口根据唯一 key 获取开关的值。
    a852695
        12
    a852695  
       2019-07-09 23:08:06 +08:00
    遇到过同样的情况,比如说表单修改这些,都是直接将整个 form 传给后端更新掉。
    reid2017
        13
    reid2017  
    OP
       2019-07-09 23:13:12 +08:00
    @irvinghua 谢谢,确实如你所说可能是表设计得不太好

    @a852695 是的,字符类型的修改我一般是 form/json 全部打包传参

    @yuankui 有点这个意思
    progart
        14
    progart  
       2019-07-09 23:22:31 +08:00
    既然 三个开关对应的业务是相互独立不关联的
    那么 在可选择的情况下,当然是三个接口,互相独立,会更合理些,带来的就是接口维护联测工作量上升。
    jackielin
        15
    jackielin  
       2019-07-09 23:36:31 +08:00
    很多情况下面 ui 是要考虑性能问题的,一次性提供一个接口能减少请求,提升性能,这种情况,要么加一个中间层做代理,要么后端就直接改成支持远程调用,比如可以通过一个接口指定要调用 a,b,c 三个 function
    LeeSeoung
        16
    LeeSeoung  
       2019-07-10 09:59:10 +08:00
    当前职责你觉得三个开关可以写在同一个接口,后面某些开关要求加上条件判断联动,你就知道为啥要拆成三个接口去写。。
    alleinmeng
        17
    alleinmeng  
       2019-07-13 09:35:47 +08:00 via Android
    一个整形用低三位做开关变量,做与运算(位运算),判断是哪个开关开的,然后使用策略模式针对不同状态采用不同策略
    hangszhang
        18
    hangszhang  
       2019-07-30 00:20:35 +08:00
    这是 restful 的缺点
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3067 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 12:06 PVG 20:06 LAX 04:06 JFK 07:06
    Do have faith in what you're doing.
    ubao msn 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