尝试同步来自第三方API的数据

时间:2018-12-11 18:35:03

标签: c# sql-server ajax asp.net-core entity-framework-core

这个问题之前可能已经被正确提出,我很乐意接受一个指向我正确答案的答案。问题是我不知道如何正确地问问题才能得到搜索结果。

我正在尝试从第三方API(ADP)中提取数据,并使用asp.net核心将数据存储在数据库中。

我希望将API返回的用户存储在我的数据库中,在该数据库中,我植入了ADP辅助表,其中包含了api的大部分数据。

然后,我想在数据库 FROM API中更新或添加任何丢失或更改的记录。

我正在考虑使用对api的ajax调用来检索记录,然后将数据存储到另一个表中,并使用sql查找在两个表之间更改的记录并进行任何必要的更改(此操作(可以通过按钮手动激活),也可以使用某种预定的后台任务通过我的C#代码中的方法(而不是Ajax)执行此操作。

我的问题是:

  1. 是否更适合作为sql中的存储过程来执行此操作,或者更确切地说让我的Web应用程序中的方法执行数据转换?
  2. 我正在寻找迭代返回的数据以及更新/创建数据库中记录的任何示例。
  3. 我只看到的不完全是我在寻找的示例,对于实现此目标的最佳方法也没有明确的定义。如果我能找到任何参考资料或示例,我会很乐意进行研究,但我什至不知道从哪里开始,或者不知道要搜索的正确术语。我研究了模型绑定,ajax调用,json序列化和反序列化。我可能想得太多了。

我应该看的任何建议或技术将不胜感激。谢谢你的时间。

我的应用是使用EF Core在asp.net core 2.2中编写的

*编辑*

对于任何寻找-https://docs.microsoft.com/en-us/dotnet/csharp/tutorials/console-webapiclient

的人

这与John Wu的答案一起帮助我实现了我所寻找的目标。

1 个答案:

答案 0 :(得分:1)

如果这是我的项目,这就是我按顺序分解任务的方式。

首先,启动一个空的控制台应用程序。

接下来,编写一个从API获取用户列表的方法。您根本没有告诉我们有关API的任何信息,因此这是一个使用HTTP客户端的虚拟示例。

public async Task<List<User>> GetUsers()
{
    var client = new HttpClient();
    var response = await client.GetAsync("https://SomeApi.com/Users");
    var users = await ParseResponse(response);
    return users.ToList();
}

测试以上内容(例如,编写一些小代码来运行它并转储结果,等等)以确保其独立运行。您想在继续之前确保它牢固。

接下来,创建一个或多个临时表,这些临时表与从API返回的数据对象的模式匹配。现在,您只需要完全按照检索方式存储它即可。

接下来,编写一些代码以将记录插入到表中。再次,单独进行测试,并查看表中的数据以确保所有数据均正常工作。可能看起来像这样:

public async Task InsertUser(User user)
{
    using (var conn = new SqlConnection(Configuration.ConnectionString))
    {
        var cmd = new SqlCommand();
        //etc.
        await cmd.ExecuteNonQueryAsync();
    }
}

一旦您知道如何提取和存储数据,就可以完成代码以从API提取数据并将其插入。可能看起来像这样:

public async Task DoTheMigration()
{
    var users = await GetUsers();
    var tasks = users.Select
    (
        u => InsertUser(u)
    );
    await Task.WhenAll(tasks.ToArray());
}

作为最后一步,编写一系列存储过程或DTS包,以将数据从临时表移至其最终的存放位置。如果您使用的是MS Access,则可以编写一系列查询并与某些VBA一起执行。在较高水平上,它将:

  1. 检查临时表中是否存在但最终表中不存在的任何记录,并将它们插入最终表中。

  2. 检查最终表中是否存在但临时表中不存在的任何记录,然后删除它们或将它们标记为已删除。

  3. 检查具有相同列值的所有公共记录,并更新最终表。

这些开发活动中的每一个都会引发自己的一系列问题,您可以将其与详细信息一起发回到StackOverflow。因为这是您的问题,没有足够的针对性来提供更深入的答案。