.NET 9使用Scalar替代Swagger

背景

.NET 9刚刚正式发布了,如果你创建一个空的Asp.Net Core 9.0的Web API项目,启动之后,你会惊讶地发现陪伴你多年的Swagger没有了!——这是因为ASP.NET Core项目组已经将Swashbuckle.AspNetCore从.NET 9里移除了,详情看这里 [github]Announcement: Swashbuckle.AspNetCore is being removed in .NET 9

image

Swagger被移除的原因可以总结为以下几点:

  • Swashbuckle 维护不力:Swashbuckle 项目不再由社区所有者积极维护,存在许多问题未得到解决,并且未发布兼容 .NET 8 的正式版本。

  • 转向 Microsoft.AspNetCore.OpenApi:ASP.NET Core 团队将增强 Microsoft.AspNetCore.OpenApi 的功能,以取代 Swashbuckle 并实现 OpenAPI 文档生成。

  • 已有替代方案:除了 Swashbuckle,还有 NSwag 等其他项目支持 OpenAPI 文档生成和客户端/服务器代码生成,开发者可以根据项目需求选择合适的方案。

  • 增强内置 API 支持:从 ASP.NET Core 3.1 开始,框架已经提供了 ApiExplorer 等元数据支持,结合 Visual Studio 和 Visual Studio Code 对 .http 文件的内置支持,API 测试和调试体验更佳。

  • 推动 OpenAPI 成为核心组件:ASP.NET Core 团队计划在 .NET 9 中进一步提升 OpenAPI 的集成度,将其作为核心组件,专注于生成 JSON 格式的 OpenAPI 文档。

除了上面提到了NSwag,Scalar也是Swagger优秀的替代品。

Scalar

Scalar 是一个开源的 API 平台, 提供现代化的 REST API 客户端、精美的 API 文档和一流的OpenAPI/Swagger支持,官方几乎支持所有编程语言和平台。
image

Github地址:https://github.com/scalar/scalar

.NET 9集成Scalar

.NET也是Scalar支持的一等公民,集成非常简单,nuget安装Scalar.AspNetCore包


   
dotnet add package Scalar.AspNetCore

然后只用增加一个代码即可app.MapScalarApiReference()


   
using Scalar.AspNetCore;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddOpenApi();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.MapScalarApiReference(); // scalar/v1
app.MapOpenApi();
}
app.MapGet("/", () => "Hello world!");
app.Run();

最后启动项目,打卡scalar/v1这个地址就是Scalar界面。
image

界面非常清爽,使用也很简单,并且支持夜间模式

添加JWT认证

在Scalar添加JWT也很简单,自定义一个BearerSecuritySchemeTransformer类来实现IOpenApiDocumentTransformer接口即可。


   
public sealed class BearerSecuritySchemeTransformer(IAuthenticationSchemeProvider authenticationSchemeProvider): IOpenApiDocumentTransformer {
public async Task TransformAsync(OpenApiDocument document, OpenApiDocumentTransformerContext context, CancellationToken cancellationToken) {
var authenticationSchemes = await authenticationSchemeProvider.GetAllSchemesAsync();
if (authenticationSchemes.Any(authScheme => authScheme.Name == "Bearer")) {
// Add the security scheme at the document level
var requirements = new Dictionary < string,
OpenApiSecurityScheme > {
["Bearer"] = new OpenApiSecurityScheme {
Type = SecuritySchemeType.Http,
Scheme = "bearer", // "bearer" refers to the header name here
In = ParameterLocation.Header,
BearerFormat = "Json Web Token"
}
};
document.Components ??= new OpenApiComponents();
document.Components.SecuritySchemes = requirements;
// Apply it as a requirement for all operations
foreach(var operation in document.Paths.Values.SelectMany(path => path.Operations)) {
operation.Value.Security.Add(new OpenApiSecurityRequirement {
[new OpenApiSecurityScheme {
Reference = new OpenApiReference {
Id = "Bearer", Type = ReferenceType.SecurityScheme
}
}] = Array.Empty < string > ()
});
}
}
}
}

然后注册即可


   
builder.Services.AddOpenApi(opt =>
{
opt.UseTransformer<BearerSecuritySchemeTransformer>();
});

最后

Scalar是一个优秀的Swagger替代品,某些功能甚至比Swagger更强大,推荐大家赶紧去试试。

(完)

原创作者: netry 转载于: https://www.cnblogs.com/netry/p/18543378/scalar-an-alternative-to-swagger-in-dotnet-9
### 回答1: writer.add_scalar是TensorBoardX中的一个函数,用于将标量数据写入TensorBoard的事件文件中。它的使用方法如下: 1. 导入TensorBoardX库 ``` from tensorboardX import SummaryWriter ``` 2. 创建一个SummaryWriter对象 ``` writer = SummaryWriter(log_dir=&#39;logs&#39;) ``` 其中,log_dir参数指定TensorBoard事件文件的保存路径。 3. 使用writer.add_scalar函数将标量数据写入事件文件 ``` writer.add_scalar(tag=&#39;loss&#39;, scalar_value=.5, global_step=1) ``` 其中,tag参数指定标量数据的名称,scalar_value参数指定标量数据的值,global_step参数指定标量数据的步数。 4. 关闭SummaryWriter对象 ``` writer.close() ``` 这样就完成了将标量数据写入TensorBoard事件文件的过程。可以通过TensorBoard查看事件文件中的标量数据。 ### 回答2: writer.add_scalar是PyTorch中的一种记录方法,用于记录单个标量值和整个时间序列。它可以通过TensorBoard这个可视化工具,将数据以图形方式呈现出来,便于我们观察和比较数据。 使用writer.add_scalar的语法格式如下:writer.add_scalar(tag, scalar_value, global_step=None, walltime=None) 其中,tag是数据的标签,scalar_value是要记录的数据值,global_step是一个可选参数,它提供了记录数据的时间,为整数类型,默认值为None。如果在记录下一个数据时,传递的global_step和上一个数据的global_step之间存在差值,那么这两个数据将被视为时间序列中的连续数据,通过TensorBoard进行可视化时,将以时间序列的方式呈现出来。walltime这个参数也是一个可选参数,如果指定了walltime,那么就会根据这个时间戳来记录数据。 一般而言,writer的创建和使用,我们需要遵循以下的步骤: 1. 创建一个writer对象,它用来记录所需的数据:from torch.utils.tensorboard import SummaryWriter writer = SummaryWriter() 2. 调用writer.add_scalar方法,开始记录数据: writer.add_scalar(&#39;train_loss&#39;, train_loss, epoch) writer.add_scalar(&#39;train_acc&#39;, train_acc, epoch) writer.add_scalar(&#39;test_loss&#39;, test_loss, epoch) writer.add_scalar(&#39;test_acc&#39;, test_acc, epoch) 在上述代码中,我们依次记录了训练损失、训练精度、测试损失和测试精度。使用的时候需要注意tag的不同,以保证图像的正确的绘制。 最后,需要运行命令tensorboard --logdir=runs打开TensorBoard可视化工具,可以看到我们记录的各项数据的变化情况。简单来说,writer.add_scalar可以记录单个标量值和整个时间序列,用于调试和可视化的过程中,是非常有用的工具。 ### 回答3: writer.add_scalar是PyTorch中一个用于记录实验结果的函数,通常用于可视化训练过程中的损失和准确率等信息。这个函数可以让我们方便地记录训练或验证过程中某一个标量量的取值,并将这些取值展示在TensorBoard中,从而直观地观察模型的学习过程。 该函数的函数签名如下: ``` writer.add_scalar(tag, scalar_value, global_step=None, walltime=None) ``` 其中,tag表示要记录值的名称,scalar_value表示该值的数值,global_step表示当前的训练步数(可选,若提供则展示在x轴上),walltime表示此次记录的时间(可选,展示在横轴上),若不指定,将自动使用当前系统时间。 使用该函数需要先初始化一个SummaryWriter变量,如下: ``` from torch.utils.tensorboard import SummaryWriter # 创建一个SummaryWriter对象,指定日志的保存路径 writer = SummaryWriter(log_dir=&#39;logs&#39;) ``` 即可开始使用add_scalar函数。例如,记录训练集的loss,验证集的loss和验证集的准确率,代码如下: ``` for epoch in range(epochs): # train loop... train_loss = ... # validation loop... val_loss = ... val_accuracy = ... # 将指定变量添加到TensorBoard中,分别设置tag为&#39;train/loss&#39;、&#39;val/loss&#39;和&#39;val/accuracy&#39; writer.add_scalar(&#39;train/loss&#39;, train_loss, epoch) writer.add_scalar(&#39;val/loss&#39;, val_loss, epoch) writer.add_scalar(&#39;val/accuracy&#39;, val_accuracy, epoch) ``` 添加完成后,可以在TensorBoard中查看这些变量随时间的变化趋势,以及它们之间的关系。TensorBoard是一个强大的工具,可以帮助我们更直观地了解模型的表现,从而帮助我们更快地调试和优化模型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值