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

Posted

技术标签:

【中文标题】使用 C# 将 REST API 数据自动转换为 csv【英文标题】:Automating REST API data to csv with C# 【发布时间】:2021-08-27 09:39:48 【问题描述】:

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

【问题讨论】:

您应该澄清您使用的是 dotnetCORE 还是 dotnetFRAMEWORK。答案可能略有不同。如果您正在“部署”到云环境或本地。 是的,windows任务调度器是个不错的选择 【参考方案1】:

您可以为此创建一个heartbeat 任务。一般来说,您需要一个心跳管理器,这是一个具有无限循环的类,并安排了一段时间的睡眠,因此它不会占用您的资源。

睡觉

你需要一个

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

在您的心跳管理器中。

心跳接口

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

管理任务

在您的无限循环中,您将需要一个 IEnumerableIHeartbeat(或您为 interface 指定的任何名称)元素并循环 IEnumerable 的元素,如下所示:

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

正在同步

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

心跳任务的实现

您需要实施IHeartbeat 以确保一致性,并且在后台您需要为已启动的作业创建一个Thread,以便该作业可以正常工作,您可以在需要时使用Join

活跃

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

运行

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

加入

致电myThread.Join()

时间

为简单起见,睡眠时间为 1000 毫秒,或者在本例中为 1 秒,但您可能需要根据自己的需要稍微增强一下。

【讨论】:

【参考方案2】:

从源获取数据到sql server。

(一种方式)(C#“中心”)

在 DotNetCore 世界中。

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

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

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

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

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

例如:

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

=========

(另一种方式)(Sql Server“以”为中心)

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 中读取......并提供数据。

========

关于“托管服务”,这里有更多信息:Does it make sense to run a c# worker service in docker?

【讨论】:

以上是关于使用 C# 将 REST API 数据自动转换为 csv的主要内容,如果未能解决你的问题,请参考以下文章

C# Rest API 文件上传

REST API - 使用JQUERY将JSON数据转换为HTML表

如何将firebase REST API响应转换为打字稿中的数组?

将 REST API 获取请求转换为 GraphQL

获取 REST API 数据并使用 C# 将它们保存到 SQL 表中

如何在 C# 中使用 rest api 从 github 为用户(人)获取数据?