记录有版本的 API
为多个 API 版本提供文档。
记录有版本的 API 是 CoddyKit 上的免费 C# Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 C# Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 C# Academy 课程共包含 4 节课。
每个版本一个文档
当 API 有多个版本时,通常需要为每个版本分别提供 OpenAPI 文档,这样使用者只能看到与其相关的端点。
// /openapi/v1.json -> only v1 endpoints
// /openapi/v2.json -> only v2 endpointsAPI 版本描述提供程序
Asp.Versioning 提供 IApiVersionDescriptionProvider,其中列出了发现的每个 API 版本。您可以遍历它,为每个版本注册一个文档。
var provider = app.Services
.GetRequiredService<IApiVersionDescriptionProvider>();
foreach (var desc in provider.ApiVersionDescriptions)
{
// desc.GroupName is e.g. "v1", "v2"
}为每个版本注册文档
每个版本组调用一次 AddOpenApi,并以该组名称命名每个文档。
builder.Services
.AddApiVersioning()
.AddApiExplorer(o =>
{
o.GroupNameFormat = "'v'VVV";
o.SubstituteApiVersionInUrl = true;
});
builder.Services.AddOpenApi("v1");
builder.Services.AddOpenApi("v2");将端点筛选到正确的文档中
使用文档转换器或 ShouldInclude 谓词,让每个文档只包含属于其版本的端点,并通过组名称进行匹配。
builder.Services.AddOpenApi("v1", options =>
{
options.ShouldInclude = description =>
description.GroupName == "v1";
});映射文档
使用默认模式的 MapOpenApi 会在 /openapi/{documentName}.json 提供每个命名文档。
app.MapOpenApi();
// /openapi/v1.json and /openapi/v2.json both available设置每个文档的信息
在转换器中为每个版本文档设置独立的标题和版本,使文档能够自我说明。
builder.Services.AddOpenApi("v2", options =>
{
options.AddDocumentTransformer((doc, ctx, ct) =>
{
doc.Info.Title = "Catalog API v2";
doc.Info.Version = "2.0";
return Task.CompletedTask;
});
});在文档中标记已弃用的版本
如果某个版本已弃用,请在其文档描述中显示这一点,以便使用者在用户界面中看到警告。
options.AddDocumentTransformer((doc, ctx, ct) =>
{
if (ctx.DocumentName == "v1")
doc.Info.Description = "DEPRECATED - migrate to v2.";
return Task.CompletedTask;
});替换 URL 中的版本
SubstituteApiVersionInUrl = true 会将文档中的 {version:apiVersion} 路由令牌改写为具体版本(例如 v1),使路径更加清晰。
// Without: /api/v{version}/products
// With: /api/v1/products每个版本一个用户界面标签页
大多数查看器都可以显示包含所有文档的下拉列表。配置用户界面,使其指向每个版本的 JSON 文档。
app.MapScalarApiReference(options =>
{
options.AddDocument("v1", "API v1", "/openapi/v1.json");
options.AddDocument("v2", "API v2", "/openapi/v2.json");
});记录请求和响应的数据结构
由于 v2 可能会更改 DTO,请为每个版本提供独立的 DTO 类型。OpenAPI 随后会自动为每个文档呈现不同的架构。
// V1 DTO
public record ProductV1(int Id, string Name);
// V2 DTO (breaking change)
public record ProductV2(int Id, string Title, decimal Price);整合起来
完整流程是:配置版本控制和 API 浏览器,为每个版本注册一个带筛选器的 OpenApi 文档,将这些文档映射出来,然后让用户界面指向每个文档。
builder.Services.AddApiVersioning().AddApiExplorer(o =>
{
o.GroupNameFormat = "'v'VVV";
o.SubstituteApiVersionInUrl = true;
});
builder.Services.AddOpenApi("v1");
builder.Services.AddOpenApi("v2");
// ...
app.MapOpenApi();
app.MapScalarApiReference();快速检查
请确认版本化文档的生成方式。
回顾
您记录了版本化 API 的文档:
- 使用
AddOpenApi("vN")为每个版本注册一个命名的 OpenAPI 文档。 IApiVersionDescriptionProvider枚举版本;ShouldInclude筛选端点。SubstituteApiVersionInUrl呈现包含具体版本的路由。- 让用户界面指向每个文档,以提供每个版本的独立视图。
版本控制和 OpenAPI 课程到此完成。
用 AI 导师学习 C# — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 93
- 课程
- 346
常见问题解答
「记录有版本的 API」课时是免费的吗?
是的 — 「记录有版本的 API」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 C# Academy 课程的其余内容,请升级到 CoddyKit PRO。 C# Academy 课程共包含 4 节课。
「记录有版本的 API」这节课中我会学到什么?
为多个 API 版本提供文档。 你通过在浏览器中直接运行的动手代码来练习 C# Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 C# Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 C# Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「记录有版本的 API」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 C# Academy 课中编写并运行代码吗?
能。每节 C# Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- API 版本控制策略
- 配置 Asp.Versioning
- 生成 OpenAPI 文档
- 记录有版本的 API