背景

下一篇在继续 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/swashbucklebuilder.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相关推荐

  1. 浅尝不辄止系列之试试腾讯云的 TUIRoom(上)

    背景 昨天晚上因为和几个朋友约好了,喝了点酒,又不想因为这个断更,白天也实在是没空,就匆忙写了个开头,占了个位置,今天早上赶早赶紧补上~~ 近期公司准备要上一期直播活动,因为之前已经集成过腾讯云的 T ...

  2. 浅尝不辄止系列之试试腾讯云的 TUIRoom(下)

    书接上回<浅尝不辄止系列之试试腾讯云的 TUIRoom(上)> 前提 上篇主要聊了一下集成 TURRoom 的前端部分. 涉及到的代码不是很多,主要是思路,因为我觉得思路和画面感对程序员来 ...

  3. 阿里浅尝元宇宙成功了吗?

    图片来源:由无界版图AI创作工具生成. 作者 | 山竹 出品 | 锌产业 还记得去年9月,身处元宇宙热潮中的阿里申请的「阿里元宇宙」.「淘宝元宇宙」商标吗? 今年5月,这些元宇宙商标均被国家知识产权局 ...

  4. 浅尝UI自动化之Airtest实践

    1.浅尝UI自动化之Airtest实践 背景 由于很多公司都采用敏捷开发的模式,测试也要跟着进行敏捷测试.而每个迭代的周期非常短,经常要对原有功能进行回归测试,这样就增加了大量重复人力成本. 引入UI ...

  5. [技术手册] 浅尝超融合之Nutanix(下)安装篇

    上一篇中介绍了超融合和Nuntaix,了解了超融合技术和Nutanix超融合解决方案的软硬件架构,本篇主要是介绍Nutanix社区版的安装. http://www.nutanix.club/forum ...

  6. 浅尝key-value数据库(三)——MongoDB的分布式

    浅尝key-value数据库(三)--MongoDB的分布式 测试了单机MongoDB的随机读和写入性能,这一节来讲一讲MongoDB的分布式. MongoDB的分布式分成两种,一种是Replicat ...

  7. Android 项目集成腾讯X5浏览器内核

    1.为什么要集成腾讯 X5 浏览器内核 肯定是事出有因,简单来说,JS代码写的不标准,与部分机型内嵌套的浏览器内核产生矛盾,出现底层(os)bug导致,不得不费事搞一个其它内核进行加载网页,具体原因. ...

  8. 论文浅尝 | 利用多语言 wordnet 上随机游走实现双语 embeddings

    论文笔记整理:谭亦鸣,东南大学博士生,研究方向为知识图谱问答. 来源:Knowledge Based System 链接:https://www.sciencedirect.com/science/a ...

  9. 论文浅尝 | 图神经网络综述:方法及应用

    论文链接:https://arxiv.org/pdf/1812.08434.pdf GNN相关论文列表链接:https://github.com/thunlp/GNNPapers 近日,清华刘知远老师 ...

最新文章

  1. stanford coursera 机器学习编程作业 exercise 3(逻辑回归实现多分类问题)
  2. OKR 和 KPI 的适用场景
  3. RocketMQ简介
  4. Suffix Zeroes
  5. 我们分析了成千上万的编程访谈。 这就是我们学到的东西。
  6. 选择图层_PS图层之——基本功能详细介绍
  7. 华三OSPF多区域配置实例
  8. 7类 登录/注册 安全漏洞
  9. jadx学习记录01
  10. 网易云短信接口调入(java)
  11. 运筹学基础【一】 之 导论
  12. 去掉图片水印方法 小技巧
  13. 2020-12-17
  14. mt4下载正版官网下载(如何分辨真假MT4软件)
  15. IT后端技术学习路线图(初阶)
  16. MT6735VCM和MT6735VCA在代码选工程是否有区别?
  17. vue 中哪些操作自动触发更新视图
  18. 自然语言处理从入门到应用——自然语言处理的基础任务:词性标注(POS Tagging)和句法分析(Syntactic Parsing)
  19. ​一生e本B11学习笔记本电脑即将上市?具体几号?
  20. 【观察】紫光云:十年创新筑牢发展底座,政企云市场打出逆袭战

热门文章

  1. 关于:复杂是软件的死敌
  2. vsCode html文件格式化
  3. 日有所思(4)——磁密,磁场强度,磁通量傻傻分不清
  4. eof() 和fail()
  5. eCharts改变饼图的默认颜色
  6. mkv视频格式转换mp4格式
  7. 在iphone中添加日历库kal
  8. Blender软件使用Maps Models Importer插件导入Google地图3d模型(非常简单)
  9. 江在川上曰:vue中使用swiper
  10. tushare更新,get_k_data支持分时k线数据,可替代以前的get_hist_data