導入
「自分がAPIを提供する側」に回るとき、.NETの Minimal API を使うと、ごく数行でHTTPエンドポイントを公開できます。ホスト(Webサーバー)が必要なため、ここではコード例で読みます。
説明
flowchart LR
C["クライアント"] -->|GET /hello| APP["WebApplication"]
APP -->|ルート登録 MapGet| H["ハンドラ(ラムダ)"]
H -->|オブジェクトを返す| J["自動でJSON化して応答"]
style APP fill:#e1f5fe
サンプル
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
// ルートとハンドラを対応づける
app.MapGet("/hello", () => "Hello, API!");
// オブジェクトを返すと自動でJSONになる
app.MapGet("/users/{id}", (int id) => new { Id = id, Name = "Taro" });
app.MapPost("/orders", (Order order) =>
{
// order は本文のJSONから自動で作られる
return Results.Created($"/orders/{order.Id}", order);
});
app.Run();
record Order(int Id, string Item);
MapGet/MapPostなどでルート(URL)とハンドラを対応づける- ハンドラがオブジェクトを返すと、フレームワークが自動でJSONにする(HTTP通信の章の「逆」)
- パス・クエリ・本文の値は引数として自動で受け取れる(モデルバインディング)
Results.Ok/Results.NotFound/Results.Createdなどでステータスを明示できる
演習
手元で dotnet new web を作り、MapGet("/time", () => DateTime.Now) を足してブラウザで開いてみましょう。返した値がそのままJSONになることを確認できます。
まとめ
- Minimal APIは数行でHTTPエンドポイントを公開できる
- 戻り値のオブジェクトは自動でJSON化される
- パス・クエリ・本文は引数に自動バインドされる
次回: 常駐して働く Worker Service です(読み物)。