当前位置: 首页 > 知识库问答 >
问题:

如何配置Spring REST服务来处理多个版本?

逑阳泽
2023-03-14
    null
    null
// on V1 Question look like this:
public class project.domain.Question
{
    private String question;
}

// on v2 Question looks like this:
public class project.domain.Question
{
    private String question;
    private Date creationDate;
}


@Service
public class project.service.QuestionService
{
    public long create(Question q) {...};
    public Question read(long id) {...};
    public void remove(long id) {...};
    public void update(Question qd) {...};

}


@Controller
@RequestMapping("/v2/question")
public class project.web.v2.QuestionController
{
    @Autowired
    project.service.QuestionService questionService;

    @RequestMapping(method = RequestMethod.POST)
    @ResponseBody
    public long create(Question q)
    {
        return questionService.create(q);
    }
}

@Controller
@RequestMapping("/v1/question")
public class project.web.v1.QuestionController
{
    @Autowired
    project.service.QuestionService questionService;

    @RequestMapping(method = RequestMethod.POST)
    @ResponseBody
    public long create(Question q)
    {
        // this will not work, because the v1 haven't had the 'creationDate' field.
        return questionService.create(q);
    }
}

共有1个答案

向杜吟
2023-03-14

REST API的版本化是一个复杂的问题。首先,让我们确定一些版本控制的高级方法:

  • URI版本控制-资源被认为是不可变的,我们使用版本指示符在资源表示中创建一个新的URI空间更改
  • 语言扩展/版本控制-考虑到正在更改的是资源的表示形式,此解决方案将在不影响URI空间的情况下对表示形式本身进行版本化

考虑到这一点,让我们考虑一些目标:(直接从API演进)

    null

语言的设计应该明确地考虑到前向兼容性,客户应该忽略他们不理解的信息。

因此,将信息添加到资源的表示形式并不是不兼容的更改。

这种对语言的扩展/更改可以利用Accept头和内容协商--使用自定义供应商MIME媒体类型对表示进行版本控制。这些文章更深入地讨论了以下内容:API版本控制、REST Web服务版本控制。

    null

其他一些非常有用的资源:

  • 版本兼容性策略

希望这有帮助。

 类似资料:
  • 我正在中创建。如果我没有错的话,是,也就是说,它们在内部被转换成servlet。 所以,我只是想知道,所有的服务方法(用注释的方法)都转换成单独的servlet了吗?

  • 问题内容: 我们有一个使用maven配置的Java应用程序,该应用程序使用多个数据库。这是一个应用程序-许多架构。 我已经配置了flyway,已经过测试,并且效果很好,但是我的配置仅适用于一个数据库。 这是我的pom.xml使用一种模式进行测试: 更新:通过使用现在提供的答案,我将以下pom.xml配置为2个模式。 我执行飞行操作,但没有成功,这是我收到的错误: 数据库配置正常。另外,我检查了架构

  • 我们有一个用maven配置的java应用程序,它使用多个数据库。它是一个应用程序——许多模式。 我已经配置了flyway,经过测试,效果很好,但我的配置只针对一个数据库。 这是我的pom。用一种模式测试xml: 更新:通过使用现在提供的答案,我有以下pom。xml配置了两种模式。 我执行了flyway操作,但没有成功,下面是我得到的错误: 数据库配置正常。我还检查了模式是否正常。我缺少什么? 更新

  • 配置代理服务器能干嘛 NEI toolkit 提供了代理服务器的功能,帮助将接口代理到NEI官网或者特定的服务器上 将接口代理到NEI官网 开启该功能只需将server.config.js中的online设为true, 那么对Mock Server的所有请求都将会代理到NEI官网上,该模式也被称为在线模式。 启用在线模式可以减少执行nei update的操作,在频繁更改官网数据的情况下能够大幅加快

  • 我是码头工人和库伯内特斯的新手。使用的技术: < li >点网核心2.2 < li>Asp。NET Core WebAPI 2.2 < li >启用Kubernetes支持的Docker for windows(Edge) < li >代码 我将两个服务托管到两个docker容器容器1和容器2中。 下面是我的部署。yaml 当我运行命令时: 我获得的状态为 。 但是当我只配置了一个容器时,同样运行

  • 我有ApacheTomcatWeb服务器,在这里我运行3-4JavaSpring和hibernate应用程序。但问题是,当有太多请求进入服务器时,服务器会给出内存不足错误或堆大小错误,最后由于服务器没有响应而导致站点关闭。有时还会出现连接错误或套接字错误。我希望我的服务器至少能处理2000个请求。 到现在为止,我用了很多方法来处理这个问题。 通过更改setenv中的大小来增加服务器的堆大小。sh文