【问题标题】:One table for data fetched from multiple different third party apis or multiple tables per third party rest api endpoint?从多个不同的第三方 api 或每个第三方 rest api 端点获取多个表的数据的一个表?
【发布时间】:2021-10-21 08:23:25
【问题描述】:

我有一个要求,我需要向用户显示具有 4 或 5 条不同信息的标准化数据模型,例如“手续费”、“帐号”、“总订单”等,这些信息可能来自许多不同的第三方api。 例如: 仓库 A 有一个返回一些 JSON 数据的 api 仓库 B 有一个返回一些 JSON 数据的 api

两个 API 都有不同格式的 JSON 响应,但是它们都包含我需要的数据。他们只是在不同的领域。然而,在未来的某个时候,可能需要发出额外的请求才能从给定的 Warehouse api 获取所需的数据。

我需要在本地存储这些数据。目前我做以下事情:

private async Task<Warehouse> GetWareHouseDataAsync(Warehouse warehouse, CancellationToken ct = default)
{   
    switch (Warehouse.ChainType)
    {
        case ChainType.UPS:
            {    
                RawUpsDataDTO rawUpsWarehouse = await _UpsWarehouseService.GetWarehouseDataAsync(warehouse.Id, ct);
                    
                Warehouse freshWareHouseData = WarehouseConverter.Convert(rawUpsWarehouse);                    
                return freshUpsWareHouseData;
            }
        case ChainType.Amazon:
            {
                ...
            }                    
        case ChainType.None:
        default:
           {
                ...
           }
    }
}

Warehouse 是所有 api 的标准化模型。

然后我将Warehouse 持久化到数据库中:

warehouse = await _warehouseRepository.AddAsync(warehouse, ct);

我有点困惑,试图找出哪种方法更适合:

A.为支持的仓库创建单独的数据库表 B. 创建一个名为“WarehouseOperations”之类的标准化数据库表(目前是这样),并在 Convert 方法中映射字段。

或任何其他可能更好的方法?

【问题讨论】:

    标签: c# asp.net-core asp.net-web-api asp.net-core-webapi


    【解决方案1】:

    在这种情况下,实施取决于您要实现的目标。

    1. 如果您尝试统一来自多个 API 的数据,请相应地创建模型并围绕每个 API 制作一些映射器(或使用 AutoMapper)。
    2. 如果您尝试按原样检索数据,请尝试对每个 API 进行自上而下的实现,并根据请求-响应模式创建 API 抽象。

    如果你想在表中缓存数据,你应该创建一个文本列来保存 JSON 序列化的数据。

    缓存远程数据需要考虑一些场景:

    • 来自远程 API 的数据有多动态
    • 何时使缓存失效并检索新数据
    • 多缓存分布(内存中 + DB,或其他组合)

    如果您需要更多详细信息,请告诉我。编码愉快!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-09
      • 1970-01-01
      • 2016-11-30
      • 1970-01-01
      • 1970-01-01
      • 2013-03-08
      相关资源
      最近更新 更多