Java 在分层体系结构spring boot中放置外部API调用的位置

Java 在分层体系结构spring boot中放置外部API调用的位置,java,rest,spring-boot,Java,Rest,Spring Boot,我有一个SpringBoot应用程序,它有四层;域、控制器、服务和存储库 我使用控制器为客户机创建端点,但在应用程序中,我希望使用REST对外部API进行一些外部API调用,我不想直接为我的客户机公开这些外部API 您将在结构中的何处执行此类外部调用?我和一位朋友讨论过,创建某种适配器包并在服务层中调用它可能是一个好主意,但我不太确定。我认为在大多数情况下,这将在您的服务层中,但这也是高度依赖于大小写的,如果不是的话,也是基于意见的 根据定义,服务层应该为您服务。这意味着,当请求到达应用程序的控

我有一个SpringBoot应用程序,它有四层;域、控制器、服务和存储库

我使用控制器为客户机创建端点,但在应用程序中,我希望使用REST对外部API进行一些外部API调用,我不想直接为我的客户机公开这些外部API


您将在结构中的何处执行此类外部调用?我和一位朋友讨论过,创建某种适配器包并在服务层中调用它可能是一个好主意,但我不太确定。

我认为在大多数情况下,这将在您的服务层中,但这也是高度依赖于大小写的,如果不是的话,也是基于意见的

根据定义,服务层应该为您服务。这意味着,当请求到达应用程序的控制器层(处理与外部世界的通信)时,控制器层只应传输数据(以适当的格式,例如序列化、反序列化),并将工作委托给服务层(显然反之亦然,将结果传递给外部世界)

存储库层完全超出了放置外部rest调用的范围。域层应该为数据建模,而存储库通常用于抽象数据的存储

现在关于服务层,我认为这就是应用程序逻辑所在的位置。这是您选择存储数据(例如,转到存储库)或转到外部rest服务的位置


然而,有一点需要强调的是这种情况的案例依赖性:Elasticsearch与rest接口一起工作,可以被视为一个数据存储。那么我们把对它的调用放在哪里呢?Spring framework选择在存储库类中表示这些调用,我也会这样做。

我认为您可以在服务层或数据访问层中进行外部API调用只是为了获取数据,您可以从数据访问层进行外部API调用。但是,如果是针对数据访问以外的任何内容,您可以从服务层进行调用

您可以创建adapater类,用于将从外部服务调用接收的数据转换为应用程序中使用的格式