使用 C# 将 REST API 数据自动化为 csv

Automating REST API data to csv with C#

我有使用 GET 调用从 API 带回的数据。我将它存储到 .csv,但是对于 C# 和 Visual Studio 包来说都是新的。数据将在一夜之间更新,因此我需要这个包每天 运行。我想问的是通过 SQL 服务器,我通常会将存储过程添加到 SQL 作业并设置调度程序。自动化 C# 脚本的最佳实践是什么? Windows 任务计划程序是最佳选择吗?或者对此有更好的解决方案吗?

从源获取数据到 sql 服务器。

(单向)(C#“中心”)

在 DotNetCore 世界中。

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/hosted-services?view=aspnetcore-5.0&tabs=visual-studio

在ASP.NET Core 中,后台任务可以作为托管服务实现。托管服务是 class 具有实现 IHostedService 接口的后台任务逻辑。本主题提供三个托管服务示例:

运行计时器上的后台任务。 激活作用域服务的托管服务。作用域服务可以使用依赖注入 (DI)。 按顺序 运行 排队的后台任务。

这将是读取源数据“CSV”并将数据发送到 Sql 服务器的代码。

已经有几个“读取 csv”nuget 库可用。

例如:

https://www.nuget.org/packages/CsvHelper/

=========

(另一种方式)(Sql 服务器“中心”)

https://docs.microsoft.com/en-us/sql/integration-services/ssis-how-to-create-an-etl-package?view=sql-server-ver15

https://www.sqlshack.com/how-to-import-export-csv-files-with-r-in-sql-server-2016/

============

然后您创建一个“WebApi”项目,该项目将从 SqlServer 读取……并将数据服务器化。

========

关于“托管服务”,这里有更多信息:

您可以为此创建一个 heartbeat 任务。通常,您需要一个心跳管理器,它是一个具有无限循环的 class,并安排了一段时间的休眠,因此它不会耗尽您的资源。

睡觉

你需要一个

while (true) {
    //Perform the tasks
    Thread.Sleep(1000); //Sleeps for a second
}

在您的心跳管理器中。

心跳接口

建议为心跳任务创建一个 interface,它有一个 IsActive 布尔方法 Run 和一个 Join。您的所有任务(最初您只有一个任务,但这种方法支持多个任务)都需要实现此接口。

管理任务

在你的无限循环中,你需要一个 IEnumerable of IHeartbeat(或者你给 interface 起的任何名字)元素并循环 IEnumerable 的元素,像这样:

while (true) {
    for (IHeartbeat hb in myHeartbeats) {
        if (hb.IsActive()) hb.Run();
    }
    Thread.Sleep(1000);
}

正在同步

您可能想要同步您的作业。最好的方法是初始化一个空 List 作为 while 的第一步,在 foreach 循环中添加每个 hb,其 IsActivetrueList 并且在 foreach 循环之后有另一个 foreach 循环,您可以在其中调用 hb.Join().

执行心跳任务

您需要实施 IHeartbeat 以确保一致性,并且在幕后您需要为已启动的作业创建一个 Thread,这样作业才能运行,您可以 Join 需要的时候。

有效

检查当前时间是否满足作业的条件运行(我们是否在正确的时间)。

运行

创建一个 Thread 并使用它来执行作业的批量。

加入

调用 myThread.Join().

时机

为了简单起见,睡眠时间为 1000 毫秒,或者在这种情况下更简单地说是一秒,但您可能希望根据需要稍微增强它。