API版本控制有哪些类型以及如何实现它们?
答案 0 :(得分:0)
为了清楚起见,因为问题非常重要,因此answer
绝不是only
实现project structure and versioning
的方法。可能还有很多其他方式,我只是分享我之前使用的相关内容。
显然,构建代码库有不同的方法,即
在Layer-based project structure
中,您的代码是根据您拥有的不同类型的图层(即控制器,服务等)构建的,而在Feature-based project structure
中,您的代码是基于系统的features
构建的,阅读here了解更多信息。
网上有很多资源可以展示不同类型的包结构,我个人坚持使用layer-based project structure
因为我更喜欢根据layers
而不是功能来组织我的代码库。
开始使用项目框架的一个非常简单的方法是查看一些示例Spring
webapps。例如,我转到Spring Initializer并选择以下
现在,我有一个基于REST的Spring Boot
项目,我可以将其用作骨架,根据我的layers
进行自定义。您不必使用Spring Boot
,但我想要展示的是Spring Boot
推荐REST
网络服务的项目结构。
我通常有以下图层
依此类推,这里是项目结构如何的截图
unit test
包结构如下所示,您可以想象其他测试类的外观如何。
如果你有integration test
或者你在java应用程序本身中引用它end to end test
,那么你需要
src/integ-test/java
src/integ-test/resources
版本端点可能有不同的方法。我之前使用的一种方法是GSON's versioning support
,它可能适用于您,也可能不适合您,但无论如何都要在此分享。
如果你在上面的截图中注意到有以下包
com.myproj.dto.inbound
com.myproj.dto.outbound
DTO
代表Data Transfer Object
,如上所示,UserInDTO.java
表示请求中包含的User.java
对象,您将使用{{1}在控制器的端点中。 @RequestBody
表示已发出的UserOutDTO.java
对象。使用DTO时
User.java
)User.java
中的include
和exclude
字段可以不对您的模型/业务对象进行不必要的更改(即DTOs
)现在您已经拥有了DTO,如果您使用的是User.java
,那么您可以将GSON
功能用于Versioning
和include
字段exclude
1}}使用UserOutDTO.java
和@Since(1.5)
等注释。由于@Until(2.3)
是序列化/反序列化库,或者换句话说它将GSON
转换为JSON
,反之亦然,因此它可以Java Object
和include
exclude
之前的字段转换为Object
,您可以在编写序列化和反序列化适配器的帮助下实现更多目标。
以下是JSON
的示例以及如何对字段进行版本化以在特定版本之后包含和排除
UserOutDTO.java
我希望这有帮助。你也可以查看这个问题,有很多非常有用的答案Package structure for a Java project?