NET9 AspnetCore将整合OpenAPI的文档生成功能而无需三方库
OpenAPI 规范是用于描述 HTTP API 的标准。该标准允许开发人员定义 API 的形状,这些 API 可以插入到客户端生成器、服务器生成器、测试工具、文档等中。尽管该标准具有普遍性和普遍性,但 ASP.NET Core 在框架内默认不提供对 OpenAPI 的支持。
当前 ASP.NET Core 不提供对 OpenAPI 的内置支持。不过内置支持了 ApiExplorer
这是一个有用的抽象,它提供有关在应用程序中注册的路由的元数据。此元数据可通过 DI 容器访问,并由生态系统中的工具(如 Asp.Api.Versioning、NSwag 和 Swashbuckle)通过ApiExplorer查询聚合的metadata
在 .NET 6 中,引入了Minimal Api
,并通过 EndpointMetadataApiDescriptionProvider 添加了对Minimal Api的支持,这允许ApiExplorer查询metadata并注册这些api的Endpoint。
在 .NET 7 中,引入了Microsoft.AspNetCore.OpenApi
(注意:此包通过 NuGet 提供,不是shared framework 成员)。WithOpenApi扩展 公开了用于修改Minimal API 中与单个Endpoint关联的扩展方法。该包依赖于 Microsoft.OpenApi 包,提供对象模型和反序列化程序/序列化程序,用于与各种版本的 OpenAPI 规范进行交互。
为了解决三方库兼容的问题并为用户提供更无缝的体验,在NET9以后的版本中,AspnetCore团队将OpenAPI文档生成作为 ASP.NET Core 的内置功能。
我们用VS最新预览版创建一个NET9的 WebApi项目 名为SwaggerBye (#.#),引用Microsoft.AspNetCore.OpenApi
库 然后简单的敲击以下代码:
builder.Services.AddOpenApi();
var app = builder.Build();
app.MapOpenApi();//生成文档的Endpoint
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
(
DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
Random.Shared.Next(-20, 55),
summaries[Random.Shared.Next(summaries.Length)]
))
.ToArray();
return forecast;
})
.WithName("GetWeatherForecast")
.WithOpenApi();
app.MapMethods("hello/{world}", ["GET"],
(string world) => { return Results.Json(new HelloDto(world)); })
.WithOpenApi()
.Produces<HelloDto>(200);
然后我们访问 ~/openapi/v1.json 就可以看到生成的scheme文档了:
当然只有Scheme文档可能还不够,我们可以扩展一个UI挂载文档:
public static IEndpointConventionBuilder MapScalarUi(this IEndpointRouteBuilder endpoints)
{
return endpoints.MapGet("/scalar/{documentName}", (string documentName) => Results.Content($$"""
<!doctype html>
<html>
<head>
<title>Scalar API Reference -- {{documentName}}</title>
<meta charset="utf-8" />
<meta
name="viewport"
content="width=device-width, initial-scale=1" />
</head>
<body>
<script
id="api-reference"
data-url="/openapi/{{documentName}}.json"></script>
<script>
var configuration = {
theme: 'purple',
}
document.getElementById('api-reference').dataset.configuration =
JSON.stringify(configuration)
</script>
<script src="https://cdn.jsdelivr.net/npm/@scalar/api-reference"></script>
</body>
</html>
""", "text/html")).ExcludeFromDescription();
}
然后调用MapScalarUi()扩展
if (app.Environment.IsDevelopment())
{
app.MapScalarUi();
}
最后我们访问 ~/scalar/v1
太帅了,我们只用了几行代码就完整的实现文档工具的所有功能,以后可以有更多的时间摸鱼了,不得不为巨硬 点一个大大的赞!
最后呢这属于NET9+的叠加功能,因此在NET8下是不可用的,如果想赶在年底体验 可以下载VS的最新预览版和NET9的preview4 SDK.
另外我也发现当前生成文档还存在一丝丝BUG,比如MinimalApi返回了ValidationProblem定义,文档生成器会报错,后续正式版发布这些问题应该都会解决~
最后呢,微软是在走别人的路让别人无路可走 , 我们有没有发现,现在STJ成为了顶级成员Newtonsoft.Json慢慢被遗忘,MS DI横空出世 Autofac就黯然落幕,现在Microsoft.AspNetCore.OpenApi
整合了对OpenApi的完整支持,那NSwag和Swashbuckle也将被遗弃,对于一般开发者而言可能是好事,但是这些曾经风光的开源项目就慢慢被历史遗忘,确实有些遗憾~
NET9 AspnetCore将整合OpenAPI的文档生成功能而无需三方库的更多相关文章
- Taurus.MVC 2.3 开源发布:增强属性Require验证功能,自带WebAPI文档生成功能
背景: 上周,把 Taurus.MVC 在 Linux (CentOS7) 上部署任务完成后. 也不知怎么的,忽然就想给框架集成一下WebAPI文档功能,所以就动手了. 以为一天能搞完,结果,好几天过 ...
- 【开源】AspnetCore 2.0 自动API文档生成组件,支持protobuffer
本文地址 http://www.cnblogs.com/likeli/p/8204054.html 关于 API文档自动生成,用于对APP端的开发帮助文档生成,默认ProtoBuffer传输格式. 本 ...
- Objective-C规范注释心得——同时兼容appledoc(docset、html)与doxygen(html、pdf)的文档生成
作者:zyl910 手工写文档是一件苦差事,幸好现在有从源码中抽取注释生成文档的专用工具.对于Objective-C来说,目前最好用的工具是appledoc和doxygen.可是这两种工具对于注释的要 ...
- SpringBoot之Swagger2文档生成
SpringBoot之Swagger2文档生成 1.Swagger2介绍 编写和维护接口文档是每个程序员的职责,前面我们已经写好的接口现在需要提供一份文档,这样才能方便调用者使用.考虑到编写接口文档是 ...
- 求你别再用swagger了,给你推荐几个在线文档生成神器
前言 最近公司打算做一个openapi开放平台,让我找一款好用的在线文档生成工具,具体要求如下: 必须是开源的 能够实时生成在线文档 支持全文搜索 支持在线调试功能 界面优美 说实话,这个需求看起来简 ...
- 再见丑陋的 SwaggerUI,这款开源的API文档生成神器界面更炫酷,逼格更高!
一般在使用 Spring Boot 开发前后端分离项目的时候,都会用到 Swagger.Swagger 是一个规范和完整的框架,用于生成.描述.调试和可视化 RESTful 风格的 Web API 服 ...
- 【C#附源码】数据库文档生成工具支持(Excel+Html)
[2015] 很多时候,我们在生成数据库文档时,使用某些工具,可效果总不理想,不是内容不详细,就是表现效果一般般.很多还是word.html的.看着真是别扭.本人习惯用Excel,所以闲暇时,就简单的 ...
- 微软开源全新的文档生成工具DocFX
微软放弃Sandcastle有些年头了,微软最近开源了全新的文档生成工具DocFX,目前支持C#和VB,类似JSDoc或Sphinx,可以从源代码中提取注释生成文档之外,而且还有语法支持你加入其他的文 ...
- DBImport v3.44 中文版发布:数据库数据互导及文档生成工具(IT人员必备)
前言: 距离上一个版本V3.3版本的文章发布,已经是1年10个月前的事了. 其实版本一直在更新,但也没什么大的功能更新,总体比较稳定,所以也不怎么写文介绍了. 至于工作上的事,之前有半年时间跑去学英语 ...
- .NET平台开源项目速览(4).NET文档生成工具ADB及使用
很久以前就使用ADB这个工具来生成项目的帮助文档.功能强大,在学习一些开源项目的过程中,官方没有提供CHM帮助文档,所以为了快速的了解项目结构和注释.就生成文档来自己看,非常好用.这也是一个学习方法吧 ...
随机推荐
- Drop 、Delete、Truncate的区别是什么
Drop .Delete.Truncate 的区别是什么? DROP 删除表结构和数据,truncate 和 delete 只删除数据 truncate 操作,表和索引所占用的空间会恢复到初始大小:d ...
- mysql 必知必会整理—数据库的维护[十八]
前言 简单介绍一下数据库的维护. 正文 像所有数据一样,MySQL的数据也必须经常备份. 由于MySQL数据库是基于磁盘的文件,普通的备份系统和例程就能备份MySQL的数据. 但是,由于这些文件总是处 ...
- Kafka的实现细节
Kafka的实现细节 一.Topic和Partition 在Kafka中的每一条消息都有一个topic.一般来说在我们应用中产生不同类型的数据,都可以设置不同的主题.一个主题一般会有多个消息的订阅者, ...
- Signalr断线重连机制
前言 Signalr 即时消息发布到服务器后发现链接老是自动断开,导致无法发送广播后面百度搜了一下,signalr有个超时的机制 解决办法(js) //链接到自己的hub var connection ...
- 记录如何用php做一个网站访问计数器的方法
简介创建一个简单的网站访问计数器涉及到几个步骤,包括创建一个用于存储访问次数的文件或数据库表,以及编写PHP脚本来增加计数和显示当前的访问次数. 方法以下是使用文件存储访问次数的基本步骤: 创建一个文 ...
- 剑指offer38(Java)-字符串的排列(中等)
题目: 输入一个字符串,打印出该字符串中字符的所有排列. 你可以以任意顺序返回这个字符串数组,但里面不能有重复元素. 示例: 输入:s = "abc"输出:["abc&q ...
- 力扣657(java & python)-机器人能否返回原点(简单)
题目: 在二维平面上,有一个机器人从原点 (0, 0) 开始.给出它的移动顺序,判断这个机器人在完成移动后是否在 (0, 0) 处结束. 移动顺序由字符串 moves 表示.字符 move[i] 表示 ...
- Flutter+FaaS一体化任务编排的思考与设计
作者:闲鱼技术-古风 Flutter+Serverless三端一体研发架构,客户端不仅仅是编写双端的代码,而是扩展了客户端的工作边界,形成完整的业务闭环.在新的研发模式落地与实践的过程中,一直在思考如 ...
- SysAK 应用抖动诊断篇—— eBPF又立功了! | 龙蜥技术
简介:且看 SysAK 是如何打造一款性能开销不大.安全可靠.且灵活的关中断检测工具. 文 / 系统运维 SIG 编者按:还记得曾经风靡一时的狄仁杰探案系列之<他抖任他抖,IO诊断在我手& ...
- Serverless Devs 2.0 全新发布,让 Serverless 应用开发更简单
简介: 2020 年 10 月 23日,阿里巴巴正式宣布开源其首个 Serverless 开发者平台 Serverless Devs.历经近一年精心打磨,今天 Serverless Devs 2.0 ...