2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

C# 浦島太郎な私が Visual Studio 2022 で Minimal API を試したら手軽だった

Posted at

はじめに

この記事では、ASP.NET Core の Minimal API を使用して、簡潔で迅速に開発できる Web API の作成方法を紹介します。

4 年ほど前(2020 年ごろ)まで C# でバックエンド API の開発をしていた私ですが、下記の記事の執筆時に、そもそも Mock を使わずに動作するのかを検証しようとしました。

呼び出し先の API は慣れた言語で書きたいと思い、C# で記述することは決めていたものの、いつもの WeatherForecast を加工するのも手間だなと思っていたら、Minimal API という存在に気づきました。

手軽に始められるので、簡単な手順と共にご紹介します。

4 年前(2020 年ごろ)の私の知識

Visual Studio で 以前から知っている構成で ASP.NET Core Web API のプロジェクトを新規作成すると、下記のような Controller が生成されます。

    [ApiController]
    [Route("[controller]")]
    public class WeatherForecastController : ControllerBase
    {
        private static readonly string[] Summaries = new[]
        {
            "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
        };

        private readonly ILogger<WeatherForecastController> _logger;

        public WeatherForecastController(ILogger<WeatherForecastController> logger)
        {
            _logger = logger;
        }

        [HttpGet(Name = "GetWeatherForecast")]
        public IEnumerable<WeatherForecast> Get()
        {
            return Enumerable.Range(1, 5).Select(index => new WeatherForecast
            {
                Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
                TemperatureC = Random.Shared.Next(-20, 55),
                Summary = Summaries[Random.Shared.Next(Summaries.Length)]
            })
            .ToArray();
        }
    }

これはこれで、様々な C# のメリットを享受できる実装なのですが、縦にも横にも長いです。
動作検証用の API をサクっと作りたいときには冗長な感じがありますし、久しぶりに C# に触れた私は、API のパス指定方法を思い出せませんでした。

Minimal API を利用したコードの生成

Minimal API を利用する際は、ASP.NET Core Web API のプロジェクトの作成時、下記の赤枠の 2 つのチェックを外してください。

image.png

すると、とてもシンプルなコードが生成されます。
Controller に相当する部分は下記で、直感的で必要最低限の情報量になった印象です。

var summaries = new[]
{
    "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};

app.MapGet("/weatherforecast", () =>
{
    var forecast = Enumerable.Range(1, 5).Select(index =>
        new WeatherForecast
        (
            DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
            Random.Shared.Next(-20, 55),
            summaries[Random.Shared.Next(summaries.Length)]
        ))
        .ToArray();
    return forecast;
})
.WithName("GetWeatherForecast")
.WithOpenApi();

コードの各部位の役割が推測しやすいので、すぐに調整できそうです。
例えば記事執筆時に実装が必要となったコードは抜粋すると下記のようになり、非常に効率的に開発を進めることができました。

app.MapGet("/users/1", () =>
{
    return new
    {
        id    = 1,
        name  = "User A",
        email = "a@example.com"
    };
})
.WithName("GetUser")
.WithOpenApi();

WithName()WithOpenApi() が無くても動きます

デバッグ実行すると、いつもの Swagger UI も立ち上がるので、動作確認もすぐできます。

image.png

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?