如何在 REST API 中使用带有 spring mvc 的版本?

Posted

技术标签:

【中文标题】如何在 REST API 中使用带有 spring mvc 的版本?【英文标题】:How to use version in REST API with spring mvc? 【发布时间】:2016-03-02 07:07:24 【问题描述】:

使用实用的 RESTful API 方法,url 定义为 http://<host>:<port>/<apiname>/api/v1.0/... 其中 v1.0 是 api 版本。现在所有的客户都会坚持这个 url 并开始使用这个 api。现在推出了新的 api 版本http://<host>:<port>/<apiname>/api/v2.0/...,并带有一些额外的功能。此更改将破坏现有客户,因为他们都在其网址中使用旧版本。如何在不破坏 java 和 spring mvc 中现有客户端的情况下更改 REST api 版本?

例如 假设我有一个 Web 应用程序,我在其中注册了具有 url 模式 .../api/v1.0 的 DispatcherServerlet。现在我在 API 中多了一些功能,这些功能将作为另一个版本的一部分提供。我是否需要再制作一个包含 url 模式 ..,/api/v2.0 的 Web 应用程序。问题是代码重复,需要维护两个 Web 应用程序。

一般描述会起作用。我不想在 header 中传递 api 版本。

【问题讨论】:

Versioning REST API的可能重复 感谢良好的链接! ,非常接近这个。但我正在寻找答案,我们可以如何处理 spring,比如对 url 模式进行一些修改。 header 和 url 版本之间存在一些争论。 您有两个具有不同 URL 的 API。你到底想要什么? “更改 REST api 版本” 是什么意思? 更新了问题。我们可以对 DispatcherServelets URL 进行任何修改,以便它开始支持这两个 url 吗? 【参考方案1】:

为 v1 维护一个分支,为 v2 维护一个分支,为 WAR 指定不同的名称,并同时部署它们。或者在软件中进行 - 多个项目,每个项目中都有一个 API,最好引用一个共享服务层。

顺便说一句,如果您打算频繁发布新版本以至于需要多个数字,那么您可能会遇到麻烦。只需坚持 v1、v2。每次发布新版本时,都会增加重大的支持负担。

【讨论】:

维护两个网络应用程序很麻烦。我们可以对 DispatcherServelet URL 进行任何修改,以便它开始支持两个 url 吗?

以上是关于如何在 REST API 中使用带有 spring mvc 的版本?的主要内容,如果未能解决你的问题,请参考以下文章

使用带有 MySQL 数据库的 Spring Boot Rest API 的一对一映射

带有 Kotlin 和 Spring BootPost 的 REST API 返回空对象

哪个数据存储(数据库)应该用于带有 AZURE 的 Spring-boot REST API 应用程序

Spring 安全 REST API

REST API 在带有 H2 数据库的 Spring Boot Maven 多模块项目中总是抛出 404 错误

用于 REST API 的带有 JWT 的 Spring Security