使用 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
。您的所有任务(最初您将只有一个任务,但此方法支持多个任务)都需要实现此接口。
管理任务
在您的无限循环中,您将需要一个 IEnumerable
或 IHeartbeat
(或您为 interface
指定的任何名称)元素并循环 IEnumerable
的元素,如下所示:
while (true)
for (IHeartbeat hb in myHeartbeats)
if (hb.IsActive()) hb.Run();
Thread.Sleep(1000);
正在同步
您可能希望同步您的作业。最好的方法是初始化一个空的List
作为while
的第一步,在foreach
循环中添加每个hb
其IsActive
是true
到List
和之后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的主要内容,如果未能解决你的问题,请参考以下文章
REST API - 使用JQUERY将JSON数据转换为HTML表
如何将firebase REST API响应转换为打字稿中的数组?