我目前在基于Java的Web应用程序上工作。最近,我们使用Spring创建了一些REST端点。这样做的原因是因为我们开发了一种混合移动应用程序,该应用程序通过这些端点与我们的主应用程序集成。
问题是,今后我们还不确定如何处理更新。如果我们更新API,例如我们更改端点方法的方法签名,或者更改作为JSON返回的DTO上的属性,那么如果我们的移动用户运行的是过时版本的移动应用程序,则会遇到问题。
我们想要实现的是如果过时的应用程序将迫使我们的用户更新应用程序。我已经看到很多移动应用程序可以做到这一点。因此,我们考虑为REST API创建一个API版本,然后让移动应用检查其使用的版本是否与服务器运行的版本相同,如果不相同,则强制用户进行更新。
我们遇到的问题是:
参考方案
您可以做几件事。
从一开始就开始
/v1
,/v2
等URL前缀,或者使用HTTP Accepts
标头协商版本。有些宗教战争是对的。这是您的API。做你认为正确的事。 我正在从事类似的项目,为新的移动应用程序创建新的REST API。我正在按版本划分URL空间,所以是https://api.blahblahblah/v1.0/resource。
目前,我将业务逻辑直接内置在接受HTTP请求的代码中,因为此类逻辑没有其他用途。但是,当我需要制作一个新版本时,我将重构v1 API代码以将非v1特定的任何内容分离到一个更可重用的模块中,然后再使用该模块。
根据版本的结构差异,可能需要一些冗余以使API分开。例如,也许您需要一个通用的UserEntity
对象来表示有关数据库中用户的信息,但是对于带有适配器或某些其他设计模式的单独版本,则需要一个UserV1Resource和UserV2Resource对象,以调解序列化为JSON或JSON的不同类型。 XML。
通过进行自动化的API测试,我可以根据需要自由地进行任何重构,可以随时进行分离,并且知道一旦打破任何向后兼容性,我的测试就会大吼大叫。
暂时仅由我们的移动应用程序使用该API的一个好处是,我们只需要担心与受支持的应用程序版本的兼容性。如果我们可以确保最终用户定期更新其应用,则可以删除较旧的版本,从而最大程度地减少了技术负担。
使用哪个Spring和Hibernate版本 - javaImprove this question 我是Spring和Hibernate的新手。我必须开发一些REST API。因此,我需要帮助选择Spring和Hibernate的正确版本。一些初学者建议使用spring 3.0和Hibernat2 2.0。是正确的选择还是我必须使用spring 3.0和spring 3.0? 参考方案 一点都不。这两个版本已完全…
如何通过Java集成测试修改网络连接? - java我编写了一个Java类(MyRestClient),该类需要访问第三方RESTful API,并使用从其服务器返回的HTTP响应进行一些处理。我现在正在尝试在JUnit和第三方API之间编写一系列成功的集成测试(使用MyRestClient作为基础的testng库),以确保此类在各种情况下的行为正确:一切都很完美(RESTful API调用正确,服务器返回了…
将REST和Play框架集成到正在开发的LAMP系统中 - java我正在开发一个大型系统,该系统正在标准LAMP堆栈上进行开发。长话短说,犯了太多错误,我们目前的发展方向变得不可持续。我们总结的问题:使用自定义且非常基本的PHP MVC框架,该框架不强制执行任何结构。没有使用ORM,允许开发人员提出他们自己的系统。前端由Smarty渲染,除此之外,所有动态交互均使用jQuery完成。我们在PHP失败/非常缓慢的系统部分进行…
RESTAsured获得两个可能的状态代码之一 - java我有RESTAssured的test(!)代码,该代码检查REST端点是否将0作为状态代码返回给我; given() .contentType(CONTENT_TYPE_APPLICATION_JSON) .when() .get(getRestOperationPath()) .then() .statusCode(STATUS_CODE_OK); 但是现…
REST URI设计:可选和多值信息传递 - java我有一个搜索小部件,人们可以通过邮政编码搜索汽车经销商。还有一些可选的复选框可以优化该小部件中的搜索。这是用于按邮政编码搜索经销商的URI。http://localhost:8080/dealer/zip/10080 如果用户选择复选框,则URI为http://localhost:8080/dealer/zip/10080servicetype=type1&…