在现有 API 中使用多个第三方 API 的最佳实践
Best practises for consuming multiple third party APIs in existing API
我正在尝试找出设计以下场景的最佳方法。
假设我已经有一个 REST API
实现,它将从不同的供应商那里获取书籍并将它们返回给我自己的客户。
- 每个提供商都提供单独的
API
来向其消费者提供图书。
- 每个提供商的响应结构都与前一个提供商完全不同。
- 我的客户端应该始终获得完全相同的格式,以便前端客户端应用程序可以处理响应。
一些输出示例:
提供商 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 相关的两个服务都应实现相同的接口,该接口指定您可能需要的其他提供者服务的合同。这将是您的域服务层知道和使用的接口。
这或多或少是您已有的,但如果您想给它起个名字,您可以阅读有关六边形架构的内容,它与所描述的解决方案有一些相似之处。我推荐以下文章:
我正在尝试找出设计以下场景的最佳方法。
假设我已经有一个 REST API
实现,它将从不同的供应商那里获取书籍并将它们返回给我自己的客户。
- 每个提供商都提供单独的
API
来向其消费者提供图书。 - 每个提供商的响应结构都与前一个提供商完全不同。
- 我的客户端应该始终获得完全相同的格式,以便前端客户端应用程序可以处理响应。
一些输出示例:
提供商 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 相关的两个服务都应实现相同的接口,该接口指定您可能需要的其他提供者服务的合同。这将是您的域服务层知道和使用的接口。
这或多或少是您已有的,但如果您想给它起个名字,您可以阅读有关六边形架构的内容,它与所描述的解决方案有一些相似之处。我推荐以下文章: