Restful的标头中的API版本控制服务

时间:2015-07-02 18:43:47

标签: java web-services rest jersey

所有!

我在Rest Header中查看Version API的服务,我使用的是Java语言和Jersey框架。请求中没有唯一的URI头(POST,GET,PUT和DELETE)。请参阅下面的示例。

实施例: GET /员工 标题 - 版本:1.0< - 这是我需要在版本服务中实现的标题。

有人有提示或传给我关于它的文章和教程。

非常感谢。

1 个答案:

答案 0 :(得分:3)

在REST的面向资源的架构风格下,您将对资源本身而不是服务进行版本控制。您可以使用自定义的版本化媒体类型来实现此功能。例如,使用Java和JAX-RS可能看起来像这样:

@Path("/resource/account/{id}")
@GET
@Produces("application/vnd.mycompany.account-1.0+json")
public Response getAccount(@PathParam("id") String id) {
    ...

注意@Produces注释中媒体类型字符串中的版本号。

然后,在您的客户端发出请求时,使用Accept标头指定您想要给定的媒体类型:

Accept: application/vnd.mycompany.account-1.0+json

换句话说,不要这样做:

@Path("/resource/account/v1/{id}")

如果您想支持多个版本,您的服务类可能如下所示:

@Path("/resource/account")
public class AccountWebService {

    @GET
    @Path("/{id}")
    @Produces("application/vnd.mycompany.account-1.0+json")
    public Response getAccount(@PathParam("id") String id) {
    ...

    @GET
    @Path("/{id}")
    @Produces("application/vnd.mycompany.account-2.0+json")
    public Response getAccountV2(@PathParam("id") String id) {
    ...

我们通常将媒体类型拉入公共静态,以便我们可以从我们的测试客户端访问和使用它们。请务必使用JerseyTest来测试您的网络服务,作为单元测试的一部分。