通过集成腾讯 IM 来浅尝一下.net 6 的 MINI API
背景
下一篇在继续 Go 的学习笔记,因为这阵子一直有项目压着,确实没有精力去总结学习成果。所以这篇就先换换口味,切回老本行,分享一下.net 6 的一个小知识。
前些天,我们对外提供的一些管理系统,要升级一下消息中心,之前我是用微软的 signalr 框架来做的,但由于用户提供的服务器是 Windows server 2008,版本较低,没办法支持 websocket,所以 signalr 框架自动给降级成了 SSE 机制,降级之后,由于网络抖动问题,导致链接经常莫名其妙的就断开了,也是因为不是长链接,所以判定链接是否断开也有点复杂,也就没办法在准确的时机来执行重连机制。所以不得不说,Windows server 2012 之前的服务器版本真的太拉胯了。
这种情况按说最好的解决办法就是升级一下用户服务器系统,但这几乎是不可能的,所以就想了一个办法,接入一下第三方的 IM 服务,这样,消息的控制中心全部转移到第三方,来回的消息推送也通过第三方来执行,虽然多了一些开发成本,但这已经是目前情况下的最优解了。
正好也可以借此机会,来体验一下.net 6 最新推出的 mini api,话说这还是当时.net 6 框架推出时的一个主打特性,据说是参考了 Go 这样的新型语言特性,推出的一个超级轻量级的 webapi 开发框架,因为采用了"top-level statements"(不知道咋翻译更合适,属于只能意会不能言传吧~哈哈)这样的语法特性,所以新建的项目文件代码非常精炼。
创建项目
创建项目本身没啥好说的,只是因为要用最小化开发,所以在选择的时候注意一下,最下面那个“使用最小 API”和“Do not use top-level statements”的选项不要勾选哦,如果勾选了,就是之前的老面孔了,其余的按需选择就好。
新建好的项目,是这样
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
var summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
app.MapGet("/weatherforecast", () =>
{
var forecast = Enumerable.Range(1, 5).Select(index =>
new WeatherForecast
(
DateTime.Now.AddDays(index),
Random.Shared.Next(-20, 55),
summaries[Random.Shared.Next(summaries.Length)]
))
.ToArray();
return forecast;
})
.WithName("GetWeatherForecast");
app.Run();
internal record WeatherForecast(DateTime Date, int TemperatureC, string? Summary)
{
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
}
复制代码
因为我勾选了启用 openapi,所以,代码会对多几行,为了体现它的“最小”特性,我把默认的天气接口和 swagger 相关的配置都去掉。然后就成这样了~
只剩 3 行,甚至这三行还可以简化成 1 行,呈现成 3 行纯纯只是为了清晰。
依赖注入
项目建好后,我们还是老规矩,编写接口和接口方法。这里我是接入的腾讯云 IM 的服务端接口,也就先浅浅的展示一个例子,跑通之后,剩下的就是纯体力劳动了~
接入腾讯云 IM
首先要在腾讯云控制台,开通 IM 服务,这里呢,我们这边因为是后台管理系统使用,所以用户量不多,采用的是免费版,大家有需要的可以到官网了解下。
接入流程官方文档也给的很明白,首先先是获取 usersig,这个呢,官方提供了 sdk,我这里也就是捡了个现成的,直接接入。大家做接入的时候,也可以按官方提供的方案接入,除了可以在服务端生成 usersig,也可以在客户端生成,但为了安全,还是在后端生成吧~
得到这个字符串后,可以先到腾讯云的控制台验证一下自己的生成的 usersig 对不对,如果验证是通过的,就可以继续接入服务端接口了,这样可以稍微提高一点效率~
这样就算是验证通过了,然后开始编写接口方法来。
接口函数
我这里接入 IM 接口的第一个方法,导入用户,这也是接入的第一步,只有导入到 IM 中的用户,才能执行后面的消息推送等功能
public interface IAccountAPI
{
Task<dynamic> Import(string userId, string nick = "", string faceUrl = "");
}
复制代码
然后实现接口方法
internal class AccountAPI : IAccountAPI
{
public AccountAPI()
{
}
public CommonRequestModel requestModel = new CommonRequestModel();
public async Task<dynamic> Import(string userId,string nick="",string faceUrl="")
{
requestModel.usersig = new TLSSigAPIv2({你的sdkid}, "{你的秘钥}").genUserSig(requestModel.identifier);
AnsiConsole.WriteLine($"usersig:{requestModel.usersig}");
requestModel.sdkappid = {你的sdkid};
HttpClient client = new HttpClient();
var response = await client.PostAsync("https://console.tim.qq.com/v4/im_open_login_svc/account_import"+requestModel.urlParam, new StringContent(
System.Text.Json.JsonSerializer.Serialize(new { UserID = userId, Nick = nick, FaceUrl = faceUrl })
));
return await response.Content.ReadAsStringAsync();
}
}
复制代码
注入
接口编写好后,就可以注入到容器中了
using API.TecentLib;
using Microsoft.AspNetCore.Mvc;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddScoped<IAccountAPI, AccountAPI>();//注入接口实例
var app = builder.Build();
复制代码
request
app.MapPost("/import", async ([FromBody] ImportModel user, IAccountAPI accountapi) =>
{
Console.WriteLine(await accountapi.Import(user.user));
});
复制代码
区别于传动的 controller 形式,mini api 最大的特点就是可以通过简单的形式,来构造路由,仅仅需要两个参数就可以实现想要的功能。
app.MapPost 标识这是一个 post 方法,对应的还有 MapGet,MapPut,MatDelete 方法,来区别不同的请求方式,第一个参数标识请求路由,第二个参数是实现方法,而实现方法可以是一个 lambda 表达式,也可以是一个具体的方法。
response
上面的结果,我们就可以实际得到腾讯云返回的实际内容了
但我们的目的并不是让她打印在控制台上,还要作为 json 结构返回到客户端,所以稍加改造(注意我这里只是作为分享例子来简单呈现,实际返回值应该是多样化的,不能只有这一种类型)
app.MapPost("/import", async ([FromBody] ImportModel user, IAccountAPI accountapi) =>
{
return new { code = 0, msg = "success", data = await accountapi.Import(user.user) };
});
复制代码
在通过 postman 来测试一下
OK,如此,通过集成腾讯云的 IM 这样一个实际的案例,浅尝了一下 MINI API 的魅力,总体来说非常舒服,如果只是开发小型甚至中型的一些接口,这种形式无疑非常适合,而且效率奇高!
好了今天就这样了。
PS.本文已于2022.5.30首发于InfoQ写作社区(原地址:通过集成腾讯IM来浅尝一下.net 6的MINI API_.net core_为自己带盐_InfoQ写作社区),2022.12.5日由作者本人转载至CSDN社区
通过集成腾讯 IM 来浅尝一下.net 6 的 MINI API相关推荐
- 浅尝不辄止系列之试试腾讯云的 TUIRoom(上)
背景 昨天晚上因为和几个朋友约好了,喝了点酒,又不想因为这个断更,白天也实在是没空,就匆忙写了个开头,占了个位置,今天早上赶早赶紧补上~~ 近期公司准备要上一期直播活动,因为之前已经集成过腾讯云的 T ...
- 浅尝不辄止系列之试试腾讯云的 TUIRoom(下)
书接上回<浅尝不辄止系列之试试腾讯云的 TUIRoom(上)> 前提 上篇主要聊了一下集成 TURRoom 的前端部分. 涉及到的代码不是很多,主要是思路,因为我觉得思路和画面感对程序员来 ...
- 阿里浅尝元宇宙成功了吗?
图片来源:由无界版图AI创作工具生成. 作者 | 山竹 出品 | 锌产业 还记得去年9月,身处元宇宙热潮中的阿里申请的「阿里元宇宙」.「淘宝元宇宙」商标吗? 今年5月,这些元宇宙商标均被国家知识产权局 ...
- 浅尝UI自动化之Airtest实践
1.浅尝UI自动化之Airtest实践 背景 由于很多公司都采用敏捷开发的模式,测试也要跟着进行敏捷测试.而每个迭代的周期非常短,经常要对原有功能进行回归测试,这样就增加了大量重复人力成本. 引入UI ...
- [技术手册] 浅尝超融合之Nutanix(下)安装篇
上一篇中介绍了超融合和Nuntaix,了解了超融合技术和Nutanix超融合解决方案的软硬件架构,本篇主要是介绍Nutanix社区版的安装. http://www.nutanix.club/forum ...
- 浅尝key-value数据库(三)——MongoDB的分布式
浅尝key-value数据库(三)--MongoDB的分布式 测试了单机MongoDB的随机读和写入性能,这一节来讲一讲MongoDB的分布式. MongoDB的分布式分成两种,一种是Replicat ...
- Android 项目集成腾讯X5浏览器内核
1.为什么要集成腾讯 X5 浏览器内核 肯定是事出有因,简单来说,JS代码写的不标准,与部分机型内嵌套的浏览器内核产生矛盾,出现底层(os)bug导致,不得不费事搞一个其它内核进行加载网页,具体原因. ...
- 论文浅尝 | 利用多语言 wordnet 上随机游走实现双语 embeddings
论文笔记整理:谭亦鸣,东南大学博士生,研究方向为知识图谱问答. 来源:Knowledge Based System 链接:https://www.sciencedirect.com/science/a ...
- 论文浅尝 | 图神经网络综述:方法及应用
论文链接:https://arxiv.org/pdf/1812.08434.pdf GNN相关论文列表链接:https://github.com/thunlp/GNNPapers 近日,清华刘知远老师 ...
最新文章
- stanford coursera 机器学习编程作业 exercise 3(逻辑回归实现多分类问题)
- OKR 和 KPI 的适用场景
- RocketMQ简介
- Suffix Zeroes
- 我们分析了成千上万的编程访谈。 这就是我们学到的东西。
- 选择图层_PS图层之——基本功能详细介绍
- 华三OSPF多区域配置实例
- 7类 登录/注册 安全漏洞
- jadx学习记录01
- 网易云短信接口调入(java)
- 运筹学基础【一】 之 导论
- 去掉图片水印方法 小技巧
- 2020-12-17
- mt4下载正版官网下载(如何分辨真假MT4软件)
- IT后端技术学习路线图(初阶)
- MT6735VCM和MT6735VCA在代码选工程是否有区别?
- vue 中哪些操作自动触发更新视图
- 自然语言处理从入门到应用——自然语言处理的基础任务:词性标注(POS Tagging)和句法分析(Syntactic Parsing)
- ​一生e本B11学习笔记本电脑即将上市?具体几号?
- 【观察】紫光云:十年创新筑牢发展底座,政企云市场打出逆袭战