Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot Spring引导API版本控制(代码体系结构)_Spring Boot_Code Design - Fatal编程技术网

Spring boot Spring引导API版本控制(代码体系结构)

Spring boot Spring引导API版本控制(代码体系结构),spring-boot,code-design,Spring Boot,Code Design,我正在SpringBoot中开发服务。 现在假设我开发了10个API,没有指定任何版本,并在生产中发布代码 现在两个API需要突破性的更改,所以我需要创建这两个API的新版本 那么,我应该如何创建代码设计呢?我是否应该创建一个基本控制器&然后在每个新版本中创建一个扩展主控制器的新控制器?我应该在墙面上使用吗?还是有更好的办法 另外,我计划最多只保留两个/三个版本的API。我们也希望不支持旧版本API的时间太长,因此设计还应支持轻松删除旧版本?使用URL版本方法。添加带有()注释的重载方法。在Re

我正在SpringBoot中开发服务。 现在假设我开发了10个API,没有指定任何版本,并在生产中发布代码

现在两个API需要突破性的更改,所以我需要创建这两个API的新版本

那么,我应该如何创建代码设计呢?我是否应该创建一个基本控制器&然后在每个新版本中创建一个扩展主控制器的新控制器?我应该在墙面上使用吗?还是有更好的办法


另外,我计划最多只保留两个/三个版本的API。我们也希望不支持旧版本API的时间太长,因此设计还应支持轻松删除旧版本?

使用URL版本方法。添加带有()注释的重载方法。在RequestMapping的值中指定版本号

@Controller
@RequestMapping(value="/controller")
public class SampleController {

    @RequestMapping(value = "/sample", method = RequestMethod.GET)
    public ResponseEntity<?> getDefaultData() {

    }

    @RequestMapping(value = "/sample/v1", method = RequestMethod.GET)
    public ResponseEntity<?> getData() {

    }

    @RequestMapping(value = "/sample/v2", method = RequestMethod.GET)
    public ResponseEntity<?> findData() {

    }
}
等等

使用此方法,您可以获得以下好处:

  • 你总是知道你在跟哪个版本说话
  • 保持向后兼容性
  • 您不必担心依赖性问题。每个版本都有一套完整的服务。您只需确保不会在调用之间混合版本(但这取决于服务的消费者,而不是作为开发人员的您)

  • 您只创建了一个控制器。我问的是如何为不同的版本构造代码。不同版本的不同控制器?或者使用接口?您可以对同一api的不同版本使用单个控制器。我的项目太大了。显然我能。这是好的代码架构吗?是的,我相信。应使用单个控制器来处理对可能是不同版本的功能的请求。当您想要重构代码时,它会给您带来好处。
        http://example.com/controller/sample/v1
        http://example.com/controller/sample/v2
        http://example.com/controller/sample