JAX-RS 2.0/RESTeasy 中的版本 API

Version API in JAX-RS 2.0 / RESTeasy

我们想要对我们的 REST API 进行版本控制。该版本适用于整个 API,而不适用于单个资源。

我想到每个 API 版本都有一个 javax.ws.rs.core.Application,然后引用它公开的资源。

- com.foo.bar.rest.v1
  - MyApiApplicationV1
    - MyResourceOne (Path: /api/one; X-VERSION: 1)
    - MyResourceTwo (Path: /api/two; X-VERSION: 1)
- com.foo.bar.rest.v2
    - MyApiApplicationV2
      - MyResourceOne (Path: /api/one; X-VERSION: 2)
      - MyResourceThree (Path: /api/three; X-VERSION: 2)

API 的版本在 X-Version header 中传递。

我的问题是:如果 X-VERSION header 为 1,是否可以激活 MyApiApplicationV1,如果 X-Version header 为 2,是否可以激活 MyApiApplicationV2?怎么做?

我们正在使用 JAX RS 2 / RESTeasy 3

谢谢

JAX-RS 应用程序通常通过 web.xml 配置或使用 @ApplicationPath 映射到路径。如果该路径标识您的应用程序,则您不能在同一路径上有两个应用程序 运行。

要解决此问题,您可以添加第三个应用程序或一个简单的 servlet,它会根据您的版本重定向到适当的版本 header。

不相关:这里 a good talk 关于 RESTful API 的版本控制是否以及何时有意义(从 00:26 开始)。