Java RESTAPI版本控制
我目前正在开发一个基于Java的web应用程序。最近,我们使用Spring创建了一些REST端点。这是因为我们开发了一个混合移动应用程序,通过这些端点与我们的主应用程序集成 问题是,未来我们不太确定如何处理更新。如果我们更新我们的API,例如,我们更改端点方法的方法签名,或者我们更改作为JSON返回的DTO上的属性,那么如果我们的移动用户正在运行过时版本的移动应用程序,那么我们将遇到问题 我们想要实现的是,如果应用程序过时,我们的用户将被迫更新它。我见过很多这样做的移动应用程序。因此,我们考虑为REST API提供一个API版本,然后让移动应用程序检查它使用的版本是否与服务器运行的版本相同,如果不相同,则强制用户进行更新 我们面临的问题是:Java RESTAPI版本控制,java,rest,Java,Rest,我目前正在开发一个基于Java的web应用程序。最近,我们使用Spring创建了一些REST端点。这是因为我们开发了一个混合移动应用程序,通过这些端点与我们的主应用程序集成 问题是,未来我们不太确定如何处理更新。如果我们更新我们的API,例如,我们更改端点方法的方法签名,或者我们更改作为JSON返回的DTO上的属性,那么如果我们的移动用户正在运行过时版本的移动应用程序,那么我们将遇到问题 我们想要实现的是,如果应用程序过时,我们的用户将被迫更新它。我见过很多这样做的移动应用程序。因此,我们考虑为
听起来您需要对API进行向后兼容的更新 由于您可以控制在移动端调用API的客户端代码,因此只需编写应用程序代码以忽略JSON响应中出现的新字段。这将大大降低应用程序的脆弱性,并允许您随意扩展对象。充分利用HATEOAS,让您的客户端导航对象中的超链接,而不是将它们硬编码到您的URL结构中 您应该开始为每个服务器版本构建兼容性测试的文化和流程,以便自动验证您的旧API客户端(当然,它将永远存在于从不更新其应用程序的用户的手机上)是否仍能与您计划的服务器更新一起工作。在中,这类似于对API进行小版本升级
如果您认为在某个阶段需要对API进行极不兼容的更改,这会破坏您的旧应用程序,那么从一开始就在API客户端中进行“兼容性检查”。启动时,他们应该检查服务器上的简单API以进行基本版本握手。如果服务器响应为“我们无法再支持您的旧客户端代码”,则会显示一条消息,告知用户从应用商店中获取最新版本,以显示您的应用程序错误。但由于这是一种非常糟糕的用户体验,最好从一开始就建立合理的兼容性。您可以做一些事情
/v1
,/v2
,等等,或者使用HTTP接受
头来协商版本。有一些宗教战争是正确的。这是你的API。做你认为正确的事UserEntity
对象来表示数据库中的用户信息,但是对于带有适配器的单独版本,您可能需要一个UserV1Resource和UserV2Resource对象,或者一些其他设计模式来协调序列化为JSON或XML的不同类型
通过自动化API测试,我可以根据需要自由地进行任何重构,边做边分离,知道一旦我破坏了任何向后兼容性,我的测试就会向我尖叫
API目前只被我们的移动应用程序使用的一个好处是,我们只需要担心与支持的应用程序版本的兼容性。如果我们能够确保最终用户定期更新他们的应用程序,我们将能够删除旧版本,这有助于最大限度地减少我们的技术债务。可能只是重复一个建议,在移动应用程序上有推送通知。事件发生时,请求API版本,若更改,通知用户必须更新Ap