Skip to content

C# SDK

能力

  • 授权模式(token 管理)
    • [x] client_credentials 模式
    • [ ] password 模式
    • [ ] authorization code 模式
  • 接口调用
    • [x] GET
    • [ ] POST
    • [ ] PUT
    • [ ] DELETE
  • 数据同步(接口必须支持翻页)
    • 全量同步
      • [x] 同步为 csv 格式
      • [ ] 同步为 xls/xlsx 格式
      • [x] 同步到数据库
    • 增量同步(接口必须支持ts增量参数)
      • [x] 同步到数据库

依赖

  • dotnet6.0 以上(C# 10.0)
  • SqlSugar 5.1.4.109
  • Newtonsoft.Json 13.0.3
  • CsvHelper 30.0.1

相关资料

支持的数据库

数据驱动由SqlSugar提供,理论上SqlSugar官网列出的数据库都可以支持,以下是测试的情况

数据库驱动测试情况
MySQLhttps://www.donet5.com/Home/Doc测试通过
SQLitehttps://www.donet5.com/Home/Doc测试通过
PostgreSQLhttps://www.donet5.com/Home/Doc测试通过
SQL Serverhttps://www.donet5.com/Home/Doc测试通过
Oraclehttps://www.donet5.com/Home/Doc测试通过

示例

skd已发布至Nuget中,用户可通过Nuget工具搜索Ecnu.OpenApi.Sdk进行安装,或使用如下脚本安装。

dotnet cli

dotnet add package Ecnu.OpenApi.Sdk --version 1.0.0

NuGet 包管理器命令

NuGet\Install-Package Ecnu.OpenApi.Sdk -Version 1.0.0

安装完成后,进行简单配置即可获得授权接口的数据。以下为简单示例

  • 注意:开发者需要根据所需要数据的接口来编写实体类(如示例代码中的FakeData类需要根据fake或fakewithts接口数据自己编写)
csharp
    static void Main(string[] args)
    {
        //获取token所需要的配置
        OauthConfig.ClientId = "yourid";
        OauthConfig.ClientSecret = "yoursecret";
        //初始化token
        OauthToken.InitialOauthCredential(OauthConfig.ClientId, OauthConfig.ClientSecret);

        //api配置
        ApiConfig.ApiUrl = "/api/v1/sync/fakewithts";
        ApiConfig.OutputFilePath = @"D:\newsync.csv";
        ApiConfig.PageSize = 2000;
        ApiConfig.BatchSize = 10000;
        SdkApi.AddParameter("ts", "0");


        //初始化ouath,获取token
        OauthToken.InitialOauthCredential(OauthConfig.ClientId, OauthConfig.ClientSecret);


        //调用api,获取数据
        var res = SdkApi.CallApi("https://api.ecnu.edu.cn/api/v1/sync/fakewithts?pageSize=100&pageNum=1&ts=0", "get");
        Console.WriteLine(res);
        Console.ReadLine();
    }

详细用法请参考示例:

性能

性能与 ORM 的实现方式(特别是对 upsert 的实现方式),数据库的实现方式,以及网络环境有关,不一定适用于所有情况。

当同步到数据库时,SDK 会采用分批读取/写入的方式,以减少内存的占用。

当同步到模型时,则会将所有数据写入到一个数组中,可能会占用较大的内存。

以下是测试环境

同步程序运行环境

  • i7 cpu
  • 16G 内存
  • windows11 X64
  • WD 固态硬盘
  • dotnet 6.0

数据库运行环境

mysql/postgresql/sqlserver all in one

  • 2 cpu
  • 8G 内存
  • anolis8 amd64
  • ESSD 云盘 PL0

测试接口信息

  • /api/v1/sync/fake
  • 使用 pageSize=2000 仅限同步
  • 接口请求耗时约 0.1 - 0.2 秒
  • 接口数据示例
json
{
	"errCode": 0,
	"errMsg": "success",
	"requestId": "73a60094-c0f1-4daf-bc58-4626fbef7a2b",
	"data": {
		"pageSize": 2000,
		"pageNum": 1,
		"totalNum": 10000,
		"rows": [{
			"id": 1,
			"colString1": "Oxqmn5MWCt",
			"colString2": "mzavQncWeNlOlFgUW7HC",
			"colString3": "mvy6K1HU7rdCicPbvvA3rNZcDWPhvV",
			"colString4": "XGsK5NVQHOu4JrmHZ9ZL1iLf0UYpdIvNIzswULzb",
			"colInt1": 3931594532918648027,
			"colInt2": 337586114254574578,
			"colInt3": 2291922259603323213,
			"colInt4": 3000562485500051124,
			"colFloat1": 0.46541339000557547,
			"colFloat2": 0.6307996439929248,
			"colFloat3": 0.9278393850101392,
			"colFloat4": 0.7286866920659677,
			"colSqlTime1": "2023-10-20 22:02:07",
			"colSqlTime2": "2023-10-20 22:02:07",
			"colSqlTime3": "2023-10-20 22:02:07",
			"colSqlTime4": "2023-10-20 22:02:07"
		}]
	}
}

10000 数据量

同步到模型

  • 耗时:2 秒
  • 内存分配:84.6M

同步到数据库

含模型同步时间

数据库服务版本全量写入耗时全量更新耗时内存分配
MySQL8.0.344秒4秒105M
PostgreSQL10.233秒3秒91M
SQLServer16.04秒4秒85M
SQLite/3秒3秒85M

100000 数据量

同步到模型

  • 耗时:19 秒
  • 内存分配:154M

同步到数据库

含模型同步时间

数据库服务版本全量写入耗时全量更新耗时内存分配
MySQL8.0.3428秒28秒116M
PostgreSQL10.2328秒24秒97M
SQLServer16.020秒24秒97M
SQLite/24秒9.02秒89M

1000000 数据量

同步到模型

  • 耗时:195 秒
  • 内存分配:967M

同步到数据库

含模型同步时间

数据库服务版本全量写入耗时全量更新耗时内存分配
MySQL8.0.34295秒285秒128M
PostgreSQL10.23370秒362秒100M
SQLServer16.0202秒210秒92M
SQLite/185秒198秒96M