pangtianyu
V2EX  ›  问与答

关于根据版本号改动 API 返回值的问题

  •  
  •   pangtianyu · Dec 20, 2021 · 2339 views
    This topic created in 1613 days ago, the information mentioned may be changed or developed.

    有一个问题想请教一下各位大佬。我有一个 API 服务,部分元素会根据不同 version 返回不同的内容。例如:

    // version 1.0.0
    {
      "data": {
        "a": "a1", 
        "b": "b1", 
        "c": "c1", 
        "d": "d1"
      }
    }
    
    // version 1.0.1
    {
      "data": {
        "a": "a1-1.0.1",  // a 在 1.0.1 版本更新了内容,其余元素不变
        "b": "b1", 
        "c": "c1", 
        "d": "d1"
      }
    }
    
    // verison 2.0.0
    {
      "data": {
        "a": "a1-1.0.1",  // a 在 2.0.0 版本未更新内容,保持最新的 1.0.1 版本的内容
        "b": "b1", 
        "c": "c1-2.0.0",  // c 在 2.0.0 版本更新了内容
        "d": "d1"
      }
    }
    
    // verison 2.0.6
    {
      "data": {
        "a": "a1-2.0.6",  // a 更新到了 2.0.6
        "b": "b1-2.0.6", 
        "c": "c1-2.0.0",  // c 保持 2.0.0 不变
        "d": "d1"
      }
    }
    

    这些元素都是从配置文件去获取的。我现在的做法是每次版本更新都要改动代码加 if else 。想请教一下有没有什么办法不改动代码,只改配置文件,根据传进来的版本号直接拿到期望的元素值?

    5 replies    2021-12-29 16:38:31 +08:00
    yuxiu
        1
    yuxiu  
       Dec 20, 2021
    加一个配置层,如 redis ,业务层订阅对应 channel 事件,根据对应版本号请求开放接口
    chinvo
        2
    chinvo  
       Dec 20, 2021 via iPhone
    asp.net 官方有 api versioning 的 middleware

    其他语言应该也有吧
    liuzhaowei55
        3
    liuzhaowei55  
       Dec 20, 2021 via iPhone
    java 的 easyopen 框架可以,但不太推荐这个,感觉不好用
    sqfphoenix
        4
    sqfphoenix  
       Dec 21, 2021
    不同版本的服务都各自上线,网关根据前端传的版本把流量打到不同版本的服务就好了
    pangtianyu
        5
    pangtianyu  
    OP
       Dec 29, 2021
    @yuxiu
    能具体展开吗……
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1410 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 54ms · UTC 23:57 · PVG 07:57 · LAX 16:57 · JFK 19:57
    ♥ Do have faith in what you're doing.