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

Best practises for consuming multiple third party APIs in existing 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"
          } 
        },
        ...
      ]
    }
  },
 ...
]

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

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

我过去尝试过的

我的问题:

谢谢 ;)

并不是所有的东西都必须遵循设计模式或有名字,只要运用你的知识和常识即可。

在这种情况下,你想要的是:

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

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

这或多或少是您已有的,但如果您想给它起个名字,您可以阅读有关六边形架构的内容,它与所描述的解决方案有一些相似之处。我推荐以下文章: