Java 外部 API 版本控制的包命名
Java package naming for versioning external APIs
是否有关于如何命名包含 类 且使用外部版本化 API 的 Java 包的约定?
假设我们有一个服务的主要-次要语义版本控制方案,我们必须实现一个与该服务的特定版本兼容并绑定到该特定版本的消费者 API。命名包(和 类)的最佳做法是什么?
目前,我们使用的方案是:${service}_${M}_${N}
(M = 主要版本,N = 次要版本)。例如:com.example.theService_1_0.
。
但是 sonarqube 抱怨它不符合惯例。
当然我也可以禁用这个规则,但是我想知道有没有什么最佳实践?
我正在寻找一种通用方法,而不仅仅是特定于 REST 的方法,因为我遇到过 WebService、REST 和 CORBA 的消费者实现。而且我不确定,工件版本控制(如在 Maven 中)在这里工作得很好,因为它与实现的版本有关,而不是 API.
我知道有关于 api versioning 的问题,但这些问题是关于生产者的,而不是关于消费者的。
是的,Java 包名称在指示依赖项的版本方面有一种强烈而模糊的约定:不要。
如果您将应用程序更改为使用新版本的外部 API,则会创建一个新版本的应用程序。您要查找的版本号是您的应用程序的版本号。在许多 Java 项目中,依赖项的版本由 Maven 配置文件管理。
在任何情况下,当 classes 使用特定的 API 版本时,class 和包名称没有任何业务暴露此信息,这将违反封装,除此之外别的。这些名称有不同的用途。
请注意,当您使用 HTTP/REST APIs 或 Java APIs 时,这没有什么不同。毕竟,我不认为你会命名你的 class TheServiceWithLog4J_12_1_5
。至少我希望不会。
你没有提到你是否有同时支持这个外部的多个版本的要求API。即使你这样做了,我仍然不建议在包名中暴露 API 版本号。相反,使用包名称来表明为什么你有两个版本,以及重要的区别。
是否有关于如何命名包含 类 且使用外部版本化 API 的 Java 包的约定?
假设我们有一个服务的主要-次要语义版本控制方案,我们必须实现一个与该服务的特定版本兼容并绑定到该特定版本的消费者 API。命名包(和 类)的最佳做法是什么?
目前,我们使用的方案是:${service}_${M}_${N}
(M = 主要版本,N = 次要版本)。例如:com.example.theService_1_0.
。
但是 sonarqube 抱怨它不符合惯例。
当然我也可以禁用这个规则,但是我想知道有没有什么最佳实践?
我正在寻找一种通用方法,而不仅仅是特定于 REST 的方法,因为我遇到过 WebService、REST 和 CORBA 的消费者实现。而且我不确定,工件版本控制(如在 Maven 中)在这里工作得很好,因为它与实现的版本有关,而不是 API.
我知道有关于 api versioning 的问题,但这些问题是关于生产者的,而不是关于消费者的。
是的,Java 包名称在指示依赖项的版本方面有一种强烈而模糊的约定:不要。
如果您将应用程序更改为使用新版本的外部 API,则会创建一个新版本的应用程序。您要查找的版本号是您的应用程序的版本号。在许多 Java 项目中,依赖项的版本由 Maven 配置文件管理。
在任何情况下,当 classes 使用特定的 API 版本时,class 和包名称没有任何业务暴露此信息,这将违反封装,除此之外别的。这些名称有不同的用途。
请注意,当您使用 HTTP/REST APIs 或 Java APIs 时,这没有什么不同。毕竟,我不认为你会命名你的 class TheServiceWithLog4J_12_1_5
。至少我希望不会。
你没有提到你是否有同时支持这个外部的多个版本的要求API。即使你这样做了,我仍然不建议在包名中暴露 API 版本号。相反,使用包名称来表明为什么你有两个版本,以及重要的区别。