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

请教各位大佬接口版本控制的问题

  •  
  •   jasongaoj · 2020-08-07 11:48:14 +08:00 · 2879 次点击
    这是一个创建于 1580 天前的主题,其中的信息可能已经有所发展或是发生改变。

    对接 app 的接口,一个 app 有新老很多个版本,安卓甚至还有很多个渠道。例如一个商城列表,新( 1.1.1 )老( 1.1.0 )版本需要下发的不一样,这个时候用 if else 控制,过不了多久又有新( 1.1.2 )的版本需要上线,此时需要三个版本下发的列表不一样,还用 if else,这样的代码,久了之后,再看的话会跟吃屎一样难受。在考虑 app 不强制更新的情况下,百度了一圈发现没有什么好办法,请问大佬们有什么好的办法处理这种情况?

    16 条回复    2020-08-08 11:32:05 +08:00
    frandy
        1
    frandy  
       2020-08-07 12:10:47 +08:00
    微软都头疼这种问题
    la2la
        2
    la2la  
       2020-08-07 13:31:07 +08:00
    多个 if else 能解决的,嵌套不是特别深的就这样解决呗,只要代码封装的好,逻辑很清晰的
    Rwing
        3
    Rwing  
       2020-08-07 13:32:17 +08:00
    可以考虑多版本共存啊,就是老的不下线,通过路由来区分
    lazyfighter
        4
    lazyfighter  
       2020-08-07 14:08:17 +08:00
    接口向后兼容
    Nostalgiaaaa
        5
    Nostalgiaaaa  
       2020-08-07 14:19:11 +08:00
    shop_list_v1
    shop_list_v2
    然后看流量,小于某个阈值直接返回请升级这种文案。
    learningman
        6
    learningman  
       2020-08-07 14:27:56 +08:00
    屎嘛,偶尔吃吃不影响身体健康
    jake361
        7
    jake361  
       2020-08-07 18:02:03 +08:00
    @Rwing 可以考虑用新的路由来区分。 +1 。

    新的版本,升级新的路由,我认为更加妥当啊, 当然需要客户端的配合了。
    jasongaoj
        8
    jasongaoj  
    OP
       2020-08-07 18:49:10 +08:00
    @Rwing 路由确实可以解决,当一个功能版本不同通过多个接口返回,可能会增加维护的成本,不过如果管理的好的话,也是一种不错的方案
    jasongaoj
        9
    jasongaoj  
    OP
       2020-08-07 19:04:13 +08:00
    @Nostalgiaaaa 是像你这样做的,但是免不了对 version 做 if else
    jasongaoj
        10
    jasongaoj  
    OP
       2020-08-07 19:06:17 +08:00
    @la2la if else 啥问题都能解决,关键在于是否包装的好 /(ㄒoㄒ)/~~
    jasongaoj
        11
    jasongaoj  
    OP
       2020-08-07 19:07:08 +08:00
    @learningman 经常吃还是挺影响的
    jasongaoj
        12
    jasongaoj  
    OP
       2020-08-07 19:07:59 +08:00
    @frandy 突然舒服了很多,谢谢你
    masker
        13
    masker  
       2020-08-07 19:10:23 +08:00 via Android
    客户端请求头加个 ver ?
    smilekung
        14
    smilekung  
       2020-08-07 20:41:43 +08:00
    客户端请求时携带自身版本,后端可以在网关处理路由到不同的版本服务上,或者做一个专门的版本控制服务,后端编码处理不同的版本,之前我们一个服务里能嵌 4-5 个版本控制,变动频繁的就 app 内嵌 h5 吧 还能热更
    yscg
        15
    yscg  
       2020-08-08 10:59:14 +08:00
    了解一下 GraphQL https://graphql.cn/
    xuanbg
        16
    xuanbg  
       2020-08-08 11:32:05 +08:00
    路径加版本号。譬如 userapi/v1.0.0/users 。要新老版本同时存在的话,再加个接口:userapi/v1.0.1/users 。新的 APP 调用 userapi/v1.0.1/users 就行了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3377 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 11:43 · PVG 19:43 · LAX 03:43 · JFK 06:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.