Rest 如何通过最新的服务器部署支持多个移动应用程序版本?

Rest 如何通过最新的服务器部署支持多个移动应用程序版本?,rest,mobile,deployment,server,architecture,Rest,Mobile,Deployment,Server,Architecture,我正试图找出一个方案,但我在网上找不到任何相关信息 假设我正在部署一个带有后端(v1.0.0)的Android应用程序(v1.0.0)。 在某个时候,我会做一些更改,将应用程序更新到v1.0.1,并将后端更新到v1.0.1,它们将完美工作。 但是我怎样才能支持应用程序的早期版本(可能新的服务器版本为一个特定请求提供了另一种响应格式) 我曾想过为服务器的每个版本进行单独的部署,但对于许多更新来说,这将意味着巨大的资源影响。 此外,在我看来,强制用户更新似乎不是一个好的选择。在服务器上为每个不同版本

我正试图找出一个方案,但我在网上找不到任何相关信息

假设我正在部署一个带有后端(v1.0.0)的Android应用程序(v1.0.0)。 在某个时候,我会做一些更改,将应用程序更新到v1.0.1,并将后端更新到v1.0.1,它们将完美工作。 但是我怎样才能支持应用程序的早期版本(可能新的服务器版本为一个特定请求提供了另一种响应格式)

我曾想过为服务器的每个版本进行单独的部署,但对于许多更新来说,这将意味着巨大的资源影响。
此外,在我看来,强制用户更新似乎不是一个好的选择。

在服务器上为每个不同版本的应用程序使用切换案例。

基本上,你可以通过多种方式来实现。这取决于你的需求,但通常情况下,现实是以下几点的混合

根据经验,考虑将保持兼容的数据模型。如果合同无法维持或需要进行重大更改,请引入新版本的API。如果无法支持旧客户端,请强制更新。您还可以就支持每个早期版本的时间达成一致,然后强制更新,这将使您的生活比维护几十个版本的API更容易、更简单

向后兼容的数据模型

  • 您必须在每次发布时回顾:

    考虑每个发布周期的增量建模。所以你可以保留东西

  • 当您忘记它,需要根据数据切换行为时:

    在我实习期间发生的事。如果忘记添加协议版本,只需根据数据解码可能的版本。从一开始,您就可以在数据上始终有一个版本字段。此外,还可以添加一组兼容的解析器版本

  • 在数据中包括协议版本:

    {
        "data": [ arbitrary data model],
        "protocolVersion": "v1"
    }
    
    根据协议版本,您可以决定如何在服务器端处理数据。您不需要记住客户端版本,只需记住协议。因为它可能是您发布的:1.0.0、1.0.1、1.1.0,并且您只在1.2.0中更改协议

    但我认为问题在于,随着数据的变化,服务器端处理的行为也会随之变化

    版本化API

  • 有时,您会看到主要版本的不同路径:

  • 当向后兼容性被破坏或完全重新考虑后使用。因此,并非每个版本都有增量

  • 在客户端版本中使用查询参数:

  • 与前一个类似,只是写得不同。虽然我认为这不是你想要的方式

    跟踪客户端发布和使用的服务版本

    实际上,每个客户端版本都有多个请求和多个版本的服务。这使得维护变得更加困难

    随时记录和跟踪。版本和发布管理非常重要。了解您构建版本的git哈希,很多时候它可能会让人困惑,您只是在发布后更改了一个参数作为快速修复,第二天什么都不兼容

    将所有服务版本映射到每个版本的客户端版本,了解您真正构建的提交,并使用标记和版本管理

    在每次发布前测试所有内容

    对向后兼容性有明确的要求。也许您只支持两个旧版本,然后使用所有两个客户机进行测试,新客户机和即将发布的服务器。记录一切。当你达到发布的标准时,就去做吧

    摘要

    现实是各种解决方案的混合体。对向后兼容性有明确的要求。因此,您可以在每次发布之前进行测试。必要时,强制更新。跟踪发布,并记录每个客户端版本及其版本中使用的所有服务