Scalar可视化OpenAPI文档中心

news/2025/12/5 23:49:27/文章来源:https://www.cnblogs.com/pengboke/p/19313981

前言

山水一程,各有天命;

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

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.mzph.cn/news/989319.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

eshop创建订单执行流程详解

前言 心灯不借他人火,自照乾坤步步明 创建订单(CreateOrderAsync)是eshop订单服务Ordering.API核心命令,涉及MiniAPI、验证器、日志管道、验证管道、事务管道、命令处理器,比取消订单和发货订单写的详细 启动项目,…

最新版Flutter3.38+Dart3.10仿写抖音APP直播+短视频+聊天应用程序

25年12月爆肝flutter3.38+getx纯手搓集成直播+聊天+短视频app商城系统。 flutter3_douyin:基于最新款跨平台框架flutter3.38.2+dart3.10+getx+media_kit开发高性能仿抖音app界面短视频+直播+聊天app软件。实现抖音短视…

eshop订单状态流转详解

前言 与万事言和, 与独处相安, 自行,自醒,自清欢。 1.配置多个启动项目 打开配置启动项目创建eshop配置文件:认证服务(Identity.API)和购物车服务(Basket.API)使用的是https协议 移动端HybridApp和ClientApp没有环…

ehop环境搭建

前言 何可言,何能言, 何处言,何时言, 何必言,言而言之无可言。 1.eshop的SDK环境 global.json 文件写死了 SDK 要求为 9.0.200我们就安装下 9.0.200版本 地址:https://dotnet.microsoft.com/en-us/download/dotn…

警惕!React服务器组件爆出高危远程代码执行漏洞

React团队发出警告,在React服务器组件(RSC)中发现一个严重的安全漏洞(CVE-2025-55182),可导致远程代码执行(RCE)。该漏洞影响多个版本,建议管理员立即升级到已修复的安全版本。React警告服务器组件中存在关键…

.NET Core 微服务之Grpc远程调用

前言 在无人问津的窗口,种自己的玫瑰 1.概念 Grpc gRPC 是一个高性能、开源的远程过程调用(RPC)框架,最早由 Google 设计。 基于 HTTP/2(多路复用、头压缩、流控制) + Protobuf(或其它序列化格式)来定义接口和…

用 C++ + OpenCV + Tesseract 实现英文数字验证码识别

本文展示如何用 C++ 结合 OpenCV 做图像预处理,再调用 Tesseract OCR 识别验证码。适用于希望在高性能后端或本地服务里集成 OCR 的场景。方案包含: 环境与依赖安装 图像预处理(灰度、二值化、形态学去噪、放大) 使…

用 PHP(Laravel)+ ImageMagick + Tesseract 实现验证码识别

一、概述与适用场景 本文演示如何在 PHP 服务端用 ImageMagick 做图像预处理,再调用系统安装的 Tesseract 做 OCR,最后用 Laravel 封装为 REST API。适合把验证码识别功能接入测试工具、后台自动化流程或内部管理平台…

用 TensorFlow 构建深度学习验证码识别系统

验证码识别一直是计算机视觉领域中的一个实际应用场景,它不仅需要图像处理的预处理能力,还需要深度学习模型对复杂字符进行准确的分类和预测。本文将基于 TensorFlow 来构建一个验证码识别系统,涵盖从数据生成、模型…

20251205 之所思 - 人生如梦

20251205 之所思做的好的地方:1) 培养新人培养的很好,将接班人推到前台,给他提供锻炼的机会,同时在他困难的时候支持他。==>给他人机会,成就他人,自己也会有成就感,继续保持。2)对员工的安排很合适,识别到…

12.5每日总结

今天的主要课程有人机交互和机器学习,同时也是人机交互技术的最后一节课,完美结课,希望成绩理想,机器学习的实验做完近一半了,有新布置了一个要求特别高的期末报告,加油

永久关闭Windows自动更新

永久关闭Windows自动更新 分为三步,具体如下: 1. 组策略禁用 Windows 更新 Win键+R,输入 gpedit.msc,启动组策略编辑器。 左侧选择 [本地计算机配置] -> [管理模板] -> [Windows 组件] -> [Windows 更新]…

git洁癖:如果冲突采用远端

git洁癖:如果冲突采用远端 假设将main分支合并到当前分支,如冲突采用mian git rebase -s recursive -X theirs main

大道至简,仅需三行代码训练YOLOv11

大道至简,仅需三行代码训练YOLOv11 克隆项目 git clone https://github.com/li-yibing/yolov11.安装依赖 pip install -r requirements.txt推理图像 python predict.py推理结果:

快捷键

IDEACommand + Option + M 自动将选中部分抽取为方法

球星 C 罗投资 AI 初创 Perplexity;微软开源 VibeVoice-Realtime,低延迟流式输出丨日报

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的技术」、「有亮点的产品」、「有思考的文章」、「有态…

网络学习细节学习

今天看了youtube的一些网络相关的视频,了解了以西的一些内容及其细节: 1,静态路由问题 在静态路由中我们需要配置下一跳或者出接口,同时配置下一跳和出接口可以减少一次设备查询工作。在只有配置下一跳的时候,先进…

12月5日日记

1.今天上形势与政策 2.明天放假 3.Cookie 的生效路径、过期时间如何设置?哪些情况会导致 Cookie 丢失?

Windows PyTorch安装

GPU 驱动 先确保安装了硬件驱动 https://developer.nvidia.com/cuda/wsl https://www.nvidia.com/en-us/drivers/ 现在 WSL 的驱动 包含在 Windows 驱动中,都是同一驱动。CUDA Toolkit 查看自己的GPU信息 nvidia-smi这…

日总结 36

要让网页视觉效果更出色,核心是搭建清晰视觉层次(通过字号、字重、颜色区分内容优先级,遵循 8px 网格原则合理留白),统一设计规范(收敛色彩体系至 1-2 种主色 + 3-4 种辅助色 + 5 种内中性色,全站字体不超过 2 …