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

标签 api rest oop design-patterns

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

假设我已经有了一个 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 相关的服务都应实现相同的接口(interface),该接口(interface)指定您可能需要的额外提供者服务的契约(Contract)。这将是您的域服务层知道和使用的接口(interface)。

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

关于api - 在现有 API 中使用多个第三方 API 的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69713852/

相关文章:

rest - 在 Falcon REST 中解码 JSON 文件上传

java - 实现REST客户端的类加载问题

api - 使用 RESTful API 在应用程序中存储 'shared' 项 MongoDB

javascript - 如何通过简单的脚本从YouTube视频和mp4文件中获取 “screenshot”或帧?

python - Sharepoint API Python Office365 Rest API 库的身份验证错误

oop - 多重继承是邪恶的吗?

javascript - 面向对象的 JavaScript 中的私有(private)函数

api - GitHub v3 API - 如何在存储库中创建初始提交?

java - 预计还有 1 项未满足的期望。执行了 0 个请求

oop - 在基于着色器的游戏中渲染的 OO 架构