0Pricing
C# Academy · レッスン

バージョン管理されたAPIのドキュメント化

複数のAPIバージョンのドキュメントを公開します。

「バージョン管理されたAPIのドキュメント化」はCoddyKit上の無料C# Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC# Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C# Academyコースには全4レッスンが含まれています。

バージョンごとに 1 つのドキュメント

API に複数のバージョンがある場合、通常はバージョンごとに個別の OpenAPI ドキュメントを用意します。これにより、利用者には自分に関係するエンドポイントだけが表示されます。

// /openapi/v1.json -> only v1 endpoints
// /openapi/v2.json -> only v2 endpoints

API バージョン説明プロバイダー

Asp.Versioning は IApiVersionDescriptionProvider を公開します。これは検出されたすべての API バージョンを一覧表示します。これをループして、バージョンごとにドキュメントを登録します。

var provider = app.Services
    .GetRequiredService<IApiVersionDescriptionProvider>();

foreach (var desc in provider.ApiVersionDescriptions)
{
    // desc.GroupName is e.g. "v1", "v2"
}

バージョンごとのドキュメント登録

バージョングループごとに AddOpenApi を 1 回呼び出し、各ドキュメントにグループ名を付けます。

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;
    });
});

ドキュメントで非推奨バージョンを示す

バージョンが非推奨の場合は、そのドキュメントの説明に明記して、UI に警告が表示されるようにします。

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

バージョンごとの UI タブ

ほとんどのビューアーでは、すべてのドキュメントをドロップダウンで表示できます。各バージョンの JSON を参照するように UI を構成します。

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 Explorer を構成し、フィルター付きでバージョンごとに OpenAPI ドキュメントを 1 つ登録し、それらをマッピングして、UI から各ドキュメントを参照することです。

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 ドキュメントを 1 つ登録します。
  • IApiVersionDescriptionProvider でバージョンを列挙し、ShouldInclude でエンドポイントをフィルターします。
  • SubstituteApiVersionInUrl で具体的なバージョン付きパスを表示します。
  • UI から各ドキュメントを参照して、バージョンごとの表示を実現します。

これでバージョニングと OpenAPI のコースは完了です。

よくある質問

「バージョン管理されたAPIのドキュメント化」レッスンは無料ですか?

はい。「バージョン管理されたAPIのドキュメント化」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C# Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C# Academyコースには全4レッスンが含まれています。

「バージョン管理されたAPIのドキュメント化」で何を学びますか?

複数のAPIバージョンのドキュメントを公開します。 ブラウザで直接実行するハンズオンコードでC# Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

C# Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのC# Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「バージョン管理されたAPIのドキュメント化」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このC# Academyレッスンでコードを書いて実行できますか?

はい。すべてのC# Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. APIバージョニング戦略
  2. Asp.Versioningの設定
  3. OpenAPIドキュメントの生成
  4. バージョン管理されたAPIのドキュメント化
← C# Academyに戻る