在现有API中使用多个第三方API的最佳实践



我正在尝试找出设计以下场景的最佳方法。

让我们假设,我已经有了一个REST API实现,它将从不同的提供者那里获取书籍,并将它们提供给我自己的客户端。

  1. 每个提供商都提供一个单独的API来为其消费者提供图书服务。
  2. 每个提供者的响应结构与前一个完全不同。
  3. 我的客户端应该总是得到完全相同的格式,所以前端客户端应用程序可以处理响应。

一些输出示例:

提供者1

[
{
"bookId": 32,
"bookName": "foo",
"author" : {
"name" : "John",
"surname": "Doe"
},
"publisher": {
"name" : "Foo Books",
"address": "New York"
}
},
...
]

供应商2

[
{
"publisherCompany": {
"name": "Foo Books",
"position": "New York",
"books": [
{
"id": 32,
"title": "Foo",
"author": {
"name" : "John",
"lastName": "Doe"
} 
},
...
]
}
},
...
]

这两个提供程序都输出相同的值,但格式不同。而且有些键是完全不同的。

我正在寻找的是一个架构设计或设计模式,所以我可以将每个不同的输出映射到我自己的格式。

我过去做过什么

  • 我已经创建了我自己的实体
  • 我为每个消费者提供不同的服务,在获取数据后,我实例化了我自己的实体并相应地映射了响应。
  • 在我的对象(实体)填满数据后,我将它们传递给变压器函数以将它们转换为所需的输出。

我的问题:

  • 是否有Design Pattern用于此?
  • 这个场景有什么术语吗,这样我可以做一个研究?
  • 你会如何处理这种情况?
  • 有阅读资源吗?

谢谢,)

并非所有东西都必须遵循设计模式或有名称,只需使用您的知识和常识。

在这种情况下,您需要做的是:

  • 拥有自己的领域模型和服务层,可以从所有的提供商那里获取数据。
  • 为提供者1模型提供一个特定的模型和一个特定的服务层,该服务层将处理对提供者1的调用和到您自己的域模型的映射。
  • 为提供者2模型提供一个特定的模型和一个特定的服务层,该服务层将处理对提供者2的调用和到您自己的域模型的映射。

与提供者1和2相关的两个服务应该实现相同的接口,该接口指定了您可能需要的其他提供者服务的契约。这将是您的域服务层将知道和使用的接口。

这或多或少是你已经拥有的,但如果你想给它一个名字,你可以阅读六边形架构,它与所描述的解决方案有一些相似之处。我建议购买以下文章:

  • https://medium.com/ssense-tech/hexagonal-architecture-there-are-always-two-sides-to-every-story-bc0780ed7d9c
  • https://reflectoring.io/spring-hexagonal/

最新更新