当前位置: 首页 > news >正文

Scalar可视化OpenAPI文档中心

前言

山水一程,各有天命;

对错不由心,聚散不由人。

1.API Versioning

在微服务或 Web API 中,接口会随着业务发展不断迭代:

  • v1:旧版本接口,客户端仍在使用
  • v2:新版本接口,引入新功能或改进

如果没有版本控制,升级接口会破坏已有客户端。

API Versioning 就是用来支持多版本接口并保持兼容性的机制。

常见做法:

  • URL 版本:/api/v1/products
  • Query 参数:?api-version=1.0(eshop就是使用的这种方式)
  • Header 版本:api-version: 1.0

withApiVersioning 就是“多版本 API 的配置对象”,它让你的应用和文档生成知道有哪些 API 版本,并支持不同版本的接口共存。

2.配置OpenAPI Scalar

在应用运行时注册OpenAPI路由和开发环境下的Scalar 文档路由。

  • 检查appsettings.jsonOpenAPI配置
  • 映射OpenAPI 路由到应用
  • 仅在开发环境打开Scalar 文档

image-20251009220535816

3.注册OpenAPI和多版本配置

根据配置注册 OpenAPI,并支持 API 版本化的多个文档。

  • 获取appsettings.json中的OpenAPIIdentity的配置节点
  • 提取IdentityScopes,用于OpenAPI 安全检查

image-20251009222653280

  • 判断apiVersioning
  • 假设有v1v2俩个版本, 为这2个版本注册OpenAPI 文档

image-20251009223501996

4.注册多版本OpenAPI

Programe调用AddDefaultOpenApi注册多版本OpenAPI

image-20251009225057384

5.Minimal API多版本路由配置

``app.NewVersionedApi("Catalog")`:创建一个版本化 API 的路由组

vApi.MapGroup("api/catalog") :创建一个路由组,所有 /api/catalog 下的接口都可以挂在它下面

HasApiVersion(1,0) :表示这个路由组只属于 v1

HasApiVersion(2,0) :表示这个路由组只属于 v2

可以给同一条路由同时指定多个版本,比如 api 路由同时支持 v1 和 v2

image-20251009225627707

启动项目,可以成功访问2个版本的api

image-20251009230347651

6.访问不同版本的接口

6.1源码解读

AddApiVersioning跟踪到AddApiVersioningServices

image-20251012010219321

然后查看AddApiVersioningServices的实现

我们发现单利注册2次ApiVersionReader,这是依赖注入的常见做法:一个对象实现多个接口,需要分别注册

  • IApiVersionReader :用于解析 API 版本
  • IApiVersionParameterSource:用于提供版本来源信息

image-20251012010559821

接着查看ApiVersionReader的实现,这里的Versioning.ApiVersionReader.Default就是获取接口版本的默认实现,上面提到有三种方式区分接口版本:查询字符串(/api/products?api-version=2.0)、HTTP头(Header: api-version: 2.0)、URL路径(/v2/products

image-20251012011001658

接着查看ApiVersionReader Default的实现:默认会从查询字符串和地址获取版本

Combine 方法(多来源 API 版本读取器组合器):

  • 把多个 IApiVersionReader 组合成一个,允许从多个来源读取 API 版本(query string、URL、header 等)。
  • 返回一个 CombinedApiVersionReader,按顺序尝试每个读取器。

剩下的不多跟了,本来这块不想看这么细的,突然好奇如何区分版本的,就捯饬了一下

image-20251012012215281

6.1访问不通版本接口

我们打开俩个版本的scalar访问/api/catalog/items/{id}接口,发现版本号在查询参数里面

http://localhost:5222/scalar/v1#tag/items/GET/api/catalog/items/{id}
http://localhost:5222/scalar/v2#tag/items/GET/api/catalog/items/{id}

image-20251012014415096

既然发现了API Versioning 的 实现方式,我们就可以通过不同的api-version访问接口

这里为了方便测试,选了2个版本都有的接口GetItemById,自己可以在GetItemById打上断点,发现不管请求api-version=1.0还是api-version=2.0,请求都可以进断点,知道规则后以后就知道如何单独访问2个版本的接口了

http://localhost:5222/api/catalog/items/1?api-version=1.0
http://localhost:5222/api/catalog/items/1?api-version=2.0

image-20251012014630475

📌 创作不易,感谢支持!

每一篇内容都凝聚了心血与热情,如果我的内容对您有帮助,欢迎请我喝杯咖啡☕,您的支持是我持续分享的最大动力!

💬 加入交流群(QQ群):576434538

微信打赏

http://www.jsqmd.com/news/63170/

相关文章:

  • eshop创建订单执行流程详解
  • 最新版Flutter3.38+Dart3.10仿写抖音APP直播+短视频+聊天应用程序
  • eshop订单状态流转详解
  • ehop环境搭建
  • Blazor入门
  • 警惕!React服务器组件爆出高危远程代码执行漏洞
  • .NET Core 微服务之Grpc远程调用
  • 用 C++ + OpenCV + Tesseract 实现英文数字验证码识别
  • 用 PHP(Laravel)+ ImageMagick + Tesseract 实现验证码识别
  • 用 TensorFlow 构建深度学习验证码识别系统
  • 20251205 之所思 - 人生如梦
  • 12.5每日总结
  • 永久关闭Windows自动更新
  • git洁癖:如果冲突采用远端
  • 大道至简,仅需三行代码训练YOLOv11
  • 快捷键
  • 球星 C 罗投资 AI 初创 Perplexity;微软开源 VibeVoice-Realtime,低延迟流式输出丨日报
  • 网络学习细节学习
  • 12月5日日记
  • Windows PyTorch安装
  • 日总结 36
  • faster r cnn 用到所有技术和流程
  • FEM/BDC Test Platform for BMW Key Programmer – Test F20 F30 F35 X5 X6 I3 Without Gearbox Plug
  • 春招准备之MyBatis框架篇 - 详解
  • 上海助听器验配哪家好?2025 年12月权威机构推荐报告:从资质核验到场景适配的全维度选择策略
  • 使用fail2ban屏蔽LINUX恶意暴力破解密码
  • 对接墨西哥股票市场 k线图表数据klinechart 数据源API
  • 代码随想录Day28_贪心2
  • 10412_基于Springboot的员工绩效管理系统
  • NFL如何用统一数据平台提升比赛与体验