基于.net6的一款开源的低代码、权限、工作流、动态接口平台-动态接口篇
动态接口
概述
动态接口允许用户在运行时创建和修改API端点,而无需重新部署应用程序。这对于需要频繁更改API结构的应用程序特别有用。
通过动态接口,开发人员可以根据业务需求快速调整API,提升开发效率和响应速度。
功能特点
- 动态创建和修改API端点:用户可以在运行时添加、更新或删除API端点。
- 支持JSON数据格式:动态接口支持JSON数据交换格式。
配置说明
-
新增一个动态脚本
- 在管理后台导航到“接口管理”-“脚本管理”模块。
- 点击左侧文件树上方的菜单“+”按钮,新增一个动态脚本文件。
- 修改脚本名称和内容。
- 点击运行按钮,测试脚本是否正常。
- 保存脚本。
例如
using System; using System.Threading.Tasks; using Newtonsoft.Json; using System; using JESAI.Core.Aspects; using JESAI.Platform.Domain.Admin.Repositories; using Jesai.DynamicDataSource.Sqlsugar.DynamicDatasources; public class Program { public string Handle(string param){ //查询数据库 var provider = ServiceLocator.Instance.GetService<IDbProvider>(); var db=provider.GetConnection("Test").Result; var data=db.Ado.SqlQuery<dynamic>("select * from mlt_sys_dynamic_datasource"); // 创建包含多个匿名对象的数组 var tableData = new[] { new { Id = 1, TableName = "用户表", TableCode = "user", TableDesc = "用户信息表", IsValid = 1, CreateTime = "2023-10-01 12:00:00" }, new { Id = 2, TableName = "订单表", TableCode = "order", TableDesc = "订单信息表", IsValid = 1, CreateTime = "2023-10-02 12:00:00" }, new { Id = 3, TableName = "产品表", TableCode = "product", TableDesc = "产品信息表", IsValid = 0, CreateTime = "2023-10-03 12:00:00" } }; var result=new {ErrorCode="000000",Message="操作成功!",CurrentPage=1,Total=3,Data=new {tableData=tableData,DBData=data}}; var str=JsonConvert.SerializeObject(result); return str; } public static async Task Main() { var p= new Program(); var result=p.Handle(null); Console.WriteLine(result); } }- 注意:接口的入口方法必须是public string Handle(string param),其中param是JSON格式的字符串,返回值也是JSON格式的字符串。可以自己修改为动态的方法名。
如图所示,新增一个动态脚本。

运行测试,如图所示,输出结果正常。

2. 通过动态脚本创建API端点
- 在管理后台导航到“接口管理”-“接口定义”模块。
- 点击“新增”按钮,新增一个接口定义。
- 填写接口名称、路径、方法、脚本名称等信息。
- 点击“保存”按钮,保存接口定义。
如图所示,打开接口定义模块。

如图所示,新增一个接口定义。

测试调用
- 打开swagger,查看一下调用接口。

使用JWT认证调用接口
- Postman测试调用接口,传入参数,查看返回结果。

使用API密钥授权或签名认证授权调用接口
- 先从系统查询AppID和AppSecret。(直接从数据库查询,管理模块暂时还没做)

-
计算签名Token,计算方法如下:
- 取当前系统时间戳,使用AppSecret对齐进行加密,得到Token。
- 例如:当前时间戳为1699424000000,AppSecret为TWM8uRwhTNzOCU7PDXAN47fewMMnF9GP,使用Aes加密,得到Token为:
+74ZCFZHXe3z0in4RomdqA==
long currentTimeStamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); var token= AesEncryptor.Instance.Encrypt(currentTimeStamp.ToString(), "TWM8uRwhTNzOCU7PDXAN47fewMMnF9GP"); Console.WriteLine(token); -
调用接口时,在请求头或者参数中添加AppKey和Token。


- 注意:
- 前端调用,一般使用JWT,通过${baseUrl}/api/v1/UniformPlatform/Get/TestDynamicApi?param=1 调用。需要在请求头中添加Authorization,值为Bearer \({jwtToken}。</span> - <span style="color:red;font-weight:bold;">API密钥授权或签名认证授权调用,通过\){baseUrl}/api/v1/UniformApp/Get/TestDynamicApi?param=1 调用。需要在请求头中添加AppKey,Token。
注意事项
- 动态接口脚本在运行时动态加载,第一次初始化可能会对应用程序性能产生影响。
- 动态接口脚本管理这块,目前还没做权限管理,相当于裸奔,后续会加上:目前建议自己加上权限认证,或者最安全的办法是不要对公暴露。
开源地址:https://gitee.com/Jesai/platform.git
开源不易,看到麻烦顺手点个星星!

浙公网安备 33010602011771号