为 app 提供服务的 server 端接口,如何做良好的设计,支持不断新增新的功能又能兼顾老的接口能继续正常使用? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tottichenzp
V2EX    分享发现

为 app 提供服务的 server 端接口,如何做良好的设计,支持不断新增新的功能又能兼顾老的接口能继续正常使用?

  •  
  •   tottichenzp 2014-12-02 23:51:26 +08:00 5091 次点击
    这是一个创建于 3967 天前的主题,其中的信息可能已经有所发展或是发生改变。
    随着app功能不断的新增,server端接口也会不停的进行修改、增加,老的接口可能在新的版本中不再使用,但是由于有历史版本的app用户的存在,不能直接修改或者删除老的server端接口,有没有一种好的方式来进行server端接口的版本控制。目前我们的做法是,若是改动不大的server端接口,直接在原有接口上进行扩展修改,若是改动较大,则会使用一个新的接口。
    6 条回复    2016-05-25 21:09:16 +08:00
    newtonisaac
        1
    newtonisaac  
       2014-12-03 07:53:41 +08:00 via iPad
    V1
    V2
    tottichenzp
        2
    tottichenzp  
    OP
       2014-12-03 10:33:00 +08:00
    @newtonisaac 不知道有没有通用一点的设计,我们在server端增加类似功能的接口时,也是有标注上版本号,但是总是感觉不自在
    semicircle21
        3
    semicircle21  
       2014-12-03 11:54:22 +08:00
    你们是使用 json 还是 二进制的格式? 如果用 json 的话, 尽量扩展就行了. 这应该还是相对容易的.
    其他的情况, V1,V2 是正解, 而且, 一般都是只新增不删改的, 你看 MS 的 ihtmldocument2,3,4,5,6..
    这就是所谓的历史包袱了.
    tottichenzp
        4
    tottichenzp  
    OP
       2014-12-03 13:06:57 +08:00
    @semicircle21 用的是json格式 字段扩展确实是相对容易的,但是随着版本的更新,会有一些重复代码的存在,同时又会有一些不在新版本中使用,但是还依旧在老版本中使用的接口。
    newtonisaac
        5
    newtonisaac  
       2014-12-03 13:24:11 +08:00
    jeffreyning
        6
    jeffreyning  
       2016-05-25 21:09:16 +08:00
    移动端 app 后台接口 api 需要分版本同时提出给使用方。
    如果每个接口都重新改类名将造成大量重复代码。
    使用 NHVersion 类库可以解决代码重复问题,
    同时在没有完全一致的版本映射时,
    还可以根据提供的版本号找到最近似的版本进行调用。
    详细说明访问 http://www.jeffreyningsoftware.com/product-nhversion-c.html
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5593 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 08:53 PVG 16:53 LAX 01:53 JFK 04:53
    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