百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 博客教程 > 正文

体验 dotnet 9 中的 OpenAPI 支持

connygpt 2024-12-13 12:42 11 浏览

体验 dotnet 9 中的 OpenAPI 支持

Intro

asp.net 9 中引入了生成 OpenAPI 文档的支持,来体验一下

Get Started

首先我们需要添加对 Microsoft.AspNetCore.OpenApi 的 NuGet 包引用,然后就可以开始改造代码了

var builder = WebApplication.CreateSlimBuilder(args);
//
builder.Services.AddOpenApi();

var app = builder.Build();

//
app.MapOpenApi();

//...

添加 AddOpenApi() 来注册需要的服务,添加 MapOpenApi() 来注册获取 OpenAPI 文档的 endpoint,这样我们就可以访问默认的 /openapi/v1 来查看生成的 OpenAPI 文档了,访问 /openapi/v1.json 应该就可以看到类似下面这样的输出

openapi

OpenAPI UI

生成了 OpenAPI 文档之后,我们可以借助 Swagger UI 框架来根据 openapi 文档来显式 OpenAPI 调试界面,我们可以使用原有的 UI 框架,指定好新的 /openapi/v1.json 路径即可

比如说我们使用原来的 Swashbuckle Swagger UI,可以自定义 UI options

app.UseSwaggerUI(option =>
{
option.SwaggerEndpoint("/openapi/v1.json", "OpenAPI V1 Docs");
option.RoutePrefix = string.Empty;
option.DocumentTitle = "SparkTodo API";
});

这样我们就可以使用 Swashbuckle Swagger UI 来展示我们的 API 了,效果和使用 Swashbuckle Swagger 生成 openapi 文档基本一致,只是对于 OpenAPI 文档自定义的支持有所不同

Swashbuckle Swagger UI

在 dotnetconf 2024 的 session 分享上,展示了另外一个 swagger UI 的选项 -- scalar

在 dotnet 9 还没正式发布的时候有注意到 OpenAPI 功能主要开发贡献的 Safia 就有向这个项目贡献 dotnet 的支持

我们来看下集成 scalar ui,首先添加 Scalar.AspNetCore NuGet 包引用,在原来集成 OpenApi 的基础上,需要添加对 scalar endpoint 的注册

var builder = WebApplication.CreateSlimBuilder(args);
//
builder.Services.AddOpenApi();

var app = builder.Build();

//
app.MapOpenApi();
app.MapScalarApiReference();

//...

注册好之后允许访问 /scalar/v1 即可看到 UI,效果如下:

scalar-ui

另外一个 API 的 ui 效果如下

scalar-ui2

注意截图的话可以看到,这个默认请求示例是 cURL,也支持很多其他的方式,包括很多编程语言,还有一个 httpie,httpie 相比 cURL 会非常的简洁,经常使用 httpie 来测试一些比较简单的 API,我也写了一个 dotnet 版本的 dotnet-httpie 感兴趣的朋友可以去 Github 查看更多示例:https://github.com/WeihanLi/dotnet-httpie

除了使用 dotnet 9 生成的 OpenApi 文档,也支持结合 Swashbuckle Swagger / NSwag 等使用,具体可以参考 scalar 的文档

More

从目前的使用来看,scalar ui 简单的使用还是比较方便的,支持多种语言,

相对来说,但是和 Swashbuckle 相比有些功能还是不太完善的 ,比如说多文档的支持,目前 scalar-ui 对于多文档的支持还有些 bug 而且 UI 不支持像 Swashbuckle Swagger UI 一样在一个页面切换不同的 OpenApi 文档,对于需要一个页面展示多个 openapi 文档的需求 scalar 暂时不支持, 可以仍然使用 Swashbuckle Swagger UI ,大家可以根据能否满足项目需要进行选用

另外目前 OpenApi 的支持不是特别完善, 有位大佬写了一些 OpenApi 的扩展以支持 xml 文档注释等, 输出 yaml 以及设置 example 等, 具体实现可以参考大佬的开源项目源码 https://github.com/martincostello/openapi-extensions, 有一些功能会在 dotnet 10 里支持, 大家有需要在 dotnet 9 里需要这些功能的可以先用大佬的轮子

我们也可以根据需要类似地通过 OpenApi 的 transformer 接口进行扩展, 具体可以参考 https://learn.microsoft.com/en-us/aspnet/core/fundamentals/openapi/customize-openapi?view=aspnetcore-9.0, 或者等待后续的一些分享~

References

  • https://learn.microsoft.com/en-us/aspnet/core/fundamentals/openapi/overview?view=aspnetcore-9.0&WT.mc_id=DT-MVP-5004222

  • https://sparktodo.weihanli.xyz/index.html?urls.primaryName=OpenAPI+V1+Docs

  • https://sparktodo.weihanli.xyz/scalar/v1

  • https://github.com/WeihanLi/WeihanLi.Web.Extensions/blob/dev/samples/WeihanLi.Web.Extensions.Samples/Program.cs

  • https://github.com/WeihanLi/SparkTodo/blob/main/SparkTodo.API/Program.cs

  • https://github.com/scalar/scalar/

  • https://github.com/scalar/scalar/blob/main/documentation/integrations/dotnet.md

  • https://github.com/scalar/scalar/issues/1851

  • https://github.com/WeihanLi/dotnet-httpie

  • https://github.com/martincostello/openapi-extensions


相关推荐

自学Python,写一个挨打的游戏代码来初识While循环

自学Python的第11天。旋转~跳跃~,我~闭着眼!学完循环,沐浴着while的光芒,闲来无事和同事一起扯皮,我说:“编程语言好神奇,一个小小的循环,竟然在生活中也可以找到原理和例子”,同事也...

常用的 Python 工具与资源,你知道几个?

最近几年你会发现,越来越多的人开始学习Python,工欲善其事必先利其器,今天纬软小编就跟大家分享一些常用的Python工具与资源,记得收藏哦!不然下次就找不到我了。1、PycharmPychar...

一张思维导图概括Python的基本语法, 一周的学习成果都在里面了

一周总结不知不觉已经自学Python一周的时间了,这一周,从认识Python到安装Python,再到基本语法和基本数据类型,对于小白的我来说无比艰辛的,充满坎坷。最主要的是每天学习时间有限。只...

三日速成python?打工人,小心钱包,别当韭菜

随着人工智能的热度越来越高,许多非计算机专业的同学们也都纷纷投入到学习编程的道路上来。而Python,作为一种相对比较容易上手的语言,也越来越受欢迎。网络上各类网课层出不穷,各式广告令人眼花缭乱。某些...

Python自动化软件测试怎么学?路线和方法都在这里了

Python自动化测试是指使用Python编程语言和相关工具,对软件系统进行自动化测试的过程。学习Python自动化测试需要掌握以下技术:Python编程语言:学习Python自动化测试需要先掌握Py...

Python从放弃到入门:公众号历史文章爬取为例谈快速学习技能

这篇文章不谈江流所专研的营销与运营,而聊一聊技能学习之路,聊一聊Python这门最简单的编程语言该如何学习,我完成的第一个Python项目,将任意公众号的所有历史文章导出成PDF电子书。或许我这个Py...

【黑客必会】python学习计划

阅读Python文档从Python官方网站上下载并阅读Python最新版本的文档(中文版),这是学习Python的最好方式。对于每个新概念和想法,请尝试运行一些代码片段,并检查生成的输出。这将帮助您更...

公布了!2025CDA考试安排

CDA数据分析师报考流程数据分析师是指在不同行业中专门从事行业数据搜集、整理、分析依据数据作出行业研究评估的专业人员CDA证书分为1-3级,中英文双证就业面广,含金量高!!?报考条件:满18...

一文搞懂全排列、组合、子集问题(经典回溯递归)

原创公众号:【bigsai】头条号:程序员bigsai前言Hello,大家好,我是bigsai,longtimenosee!在刷题和面试过程中,我们经常遇到一些排列组合类的问题,而全排列、组合...

「西法带你学算法」一次搞定前缀和

我花了几天时间,从力扣中精选了五道相同思想的题目,来帮助大家解套,如果觉得文章对你有用,记得点赞分享,让我看到你的认可,有动力继续做下去。467.环绕字符串中唯一的子字符串[1](中等)795.区...

平均数的5种方法,你用过几种方法?

平均数,看似很简单的东西,其实里面包含着很多学问。今天,分享5种经常会用到的平均数方法。1.算术平均法用到最多的莫过于算术平均法,考试平均分、平均工资等等,都是用到这个。=AVERAGE(B2:B11...

【干货收藏】如何最简单、通俗地理解决策树分类算法?

决策树(Decisiontree)是基于已知各种情况(特征取值)的基础上,通过构建树型决策结构来进行分析的一种方式,是常用的有监督的分类算法。决策树算法是机器学习中的一种经典算法,它通过一系列的规则...

面试必备:回溯算法详解

我们刷leetcode的时候,经常会遇到回溯算法类型题目。回溯算法是五大基本算法之一,一般大厂也喜欢问。今天跟大家一起来学习回溯算法的套路,文章如果有不正确的地方,欢迎大家指出哈,感谢感谢~什么是回溯...

「机器学习」决策树——ID3、C4.5、CART(非常详细)

决策树是一个非常常见并且优秀的机器学习算法,它易于理解、可解释性强,其可作为分类算法,也可用于回归模型。本文将分三篇介绍决策树,第一篇介绍基本树(包括ID3、C4.5、CART),第二篇介绍Ran...

大话AI算法: 决策树

所谓的决策树算法,通俗的说就是建立一个树形的结构,通过这个结构去一层一层的筛选判断问题是否好坏的算法。比如判断一个西瓜是否好瓜,有20条西瓜的样本提供给你,让你根据这20条(通过机器学习)建立起...