はじめに
Minimal APIのチュートリアルはとても丁寧で、スムーズに進めることができるなーと思っていたところ、チュートリアル通りに進めてもSwashbuckleのインストールに失敗してしまう…といったことがありました。本記事ではチュートリアルのはじめからSwashbuckleのインストールからSwaggerの動作確認まで、順番に消化していきます。チュートリアルは以下の2つがありますが、前者の方はシナリオがあったり、カード形式で段階を踏んで実施でき、取っつきやすい雰囲気だったので、前者で実施しました。
プロジェクト作成
まず、.NETのインストールは完了している前提で、プロジェクトを作成していきます。
dotnet new web -o PizzaStore -f net8.0
ビルダー確認
プロジェクトを作成した時点で、Program.csのコードは以下のようになっていると思います。この状態で、dotnet run
してローカルサーバーにアクセスすると、Hello world!
という文字列が返ってくるはずです。
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();
自己文書化
ここでインストールが推奨されているSwaggerですが、これはOpenAPI仕様に基づくオープンソースのツールセットで、APIの設計・構築・文書化・使用を支援するために使用されます。APIの利用者と提供者間のコミュニケーションを円滑にするもので、上手く導入できれば効率的に運用ができるといったシロモノです。
これをインストールしていきます。
dotnet add package Swashbuckle.AspNetCore
インストールが上手くいかない
ドキュメント通りに進めていたところ、
PS C:\Users\xxx\PizzaStore> dotnet add package Swashbuckle.AspNetCore --version 6.5.0
復元対象のプロジェクトを決定しています...
Writing C:\Users\xxx\AppData\Local\Temp\tmphesanb.tmp
info : X.509 certificate chain validation will use the default trust store selected by .NET for code signing.
info : X.509 certificate chain validation will use the default trust store selected by .NET for timestamping.
info : パッケージ 'Swashbuckle.AspNetCore' の PackageReference をプロジェクト 'C:\Users\xxx\PizzaStore\PizzaStore.csproj' に追加しています。
info : C:\Users\xxx\PizzaStore\PizzaStore.csproj のパッケージを復元して
います...
error: NU1100: 'net8.0' に対する 'Swashbuckle.AspNetCore (>= 6.5.0)' を解決できません。
error: パッケージ 'Swashbuckle.AspNetCore' はプロジェクト 'C:\Users\xxx\PizzaStore\PizzaStore.csproj' の 'all' フレームワークとの互換性がありません。
上記のようなエラーが出て、インストールができませんでした。.NETのバージョンを下げても変わらずで、しばらく悩みました。
原因
原因は、dotnet CLIのパッケージソースにnuget.org
が登録されていなかったためでした。
コマンドとしては、以下を実行した後に、dotnet add
すれば解決しました。
dotnet nuget add source https://api.nuget.org/v3/index.json -n nuget.org
Program.cs追記
Swaggerのインストールができたら、Swaggerを使用するために、Program.csにコードを追記します。コード全体は以下です。
using PizzaStore.DB;
using Microsoft.OpenApi.Models;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "PizzaStore API", Description = "Making the Pizzas you love", Version = "v1" });
});
var app = builder.Build();
app.MapGet("/pizzas/{id}", (int id) => PizzaDB.GetPizza(id));
app.MapGet("/pizzas", () => PizzaDB.GetPizzas());
app.MapPost("/pizzas", (Pizza pizza) => PizzaDB.CreatePizza(pizza));
app.MapPut("/pizzas", (Pizza pizza) => PizzaDB.UpdatePizza(pizza));
app.MapDelete("/pizzas/{id}", (int id) => PizzaDB.RemovePizza(id));
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "PizzaStore API V1");
});
}
app.Run();
Swaggerの動作確認
dotnet run
を実行し、立ち上がったローカルサーバーのURLの末尾に/swagger
を追加して、アクセスすると、以下のような画面になります。ここまで確認できればOKです。
コメント