Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Minimal API と DI の良い組み合わせ

Minimal API と DI の良い組み合わせ

.NET Conf Recap Fukuoka での登壇資料です。
https://msdevjp.connpass.com/event/264482/

Yuta Matsumura

November 28, 2022
Tweet

More Decks by Yuta Matsumura

Other Decks in Technology

Transcript

  1. #dotnetconf 松村 優大 (Yuta Matsumura) Chief Technical Architect (C#, PHP,

    Azure) Microsoft MVP (Developer Technologies) #fukuten #devblogradio の中の人 @tsubakimoto_s Currently working for
  2. #dotnetconf 本日お話しすること 1. ASP.NET Core Minimal API とは 2. これまでの

    Web API 開発との違い 3. これから始める Minimal API 4. Minimal API x Dependency Injection 5. .NET 7 の Minimal API の新機能
  3. #dotnetconf ASP.NET Core Minimal API とは • ASP.NET Core 6.0

    で登場した機能 • 依存関係が最小限の Web API を作成 • ルーティングで構成するエンドポイント定義
  4. #dotnetconf ASP.NET Core Minimal API とは • ASP.NET Core 6.0

    で登場した機能 • 依存関係が最小限の Web API を作成 • ルーティングで構成するエンドポイント定義
  5. #dotnetconf 最小限の依存関係 前提 (.NET 6.0 ~ / ASP.NET Core 6.0

    ~) 最小化されたホスティングモデル • Startup.cs が Program.cs に統合された • トップレベルステートメント • global using により using の記述量が減る
  6. #dotnetconf #dotnetconf $ dotnet run info: Microsoft.Hosting.Lifetime[14] Now listening on:

    http://localhost:5000 info: Microsoft.Hosting.Lifetime[0] Application started. Press Ctrl+C to shut down. info: Microsoft.Hosting.Lifetime[0] Hosting environment: Production info: Microsoft.Hosting.Lifetime[0] Content root path: C:¥Users¥yuta¥...¥MinimalConsole
  7. #dotnetconf ルーティングで構成するエンドポイント定義 HTTP メソッド エンドポイント定義 HTTP GET MapGet HTTP POST

    MapPost HTTP PUT MapPut HTTP DELETE MapDelete など https://learn.microsoft.com/ja-jp/aspnet/core/fundamentals/routing
  8. #dotnetconf これまでの Web API 開発との違い • MVC の構成に合わせて実装する必要あり • Controller

    クラス (ControllerBase クラス 要継承) • ApiController 属性 : API 用のコントローラーである目印 • Route 属性 : ルーティング構成 リソース数が増えると必要な Controller も増える https://learn.microsoft.com/en-us/aspnet/core/tutorials/min-web-api#differences-between-minimal-apis-and-apis-with-controllers
  9. #dotnetconf ルーティングで構成するエンドポイント定義 HTTP メソッド エンドポイント定義 HTTP GET MapGet HTTP POST

    MapPost HTTP PUT MapPut HTTP DELETE MapDelete など https://learn.microsoft.com/ja-jp/aspnet/core/fundamentals/routing
  10. #dotnetconf “Fat Program.cs” 実際の API では様々なビジネスロジックが登場します。 しかし、これらを Program.cs に書くと複雑になります。 •

    パラメーターのバリデーション • ログ出力 • データストアの CRUD • 他サービスとの連携 • HTTP レスポンスの構成
  11. #dotnetconf Dependency Injection の活用 ビジネスロジック部分は専用のクラスで管理しましょう。 ※単一責任の原則 (SRP) ASP.NET Core では

    Dependency Injection の仕組みがサポー トされているため、インターフェースで依存関係を構成する ことで、結果的に「テストしやすいAPI」となります。 https://learn.microsoft.com/ja-jp/aspnet/core/fundamentals/dependency-injection
  12. #dotnetconf Appendix • .NET Conf での Minimal API セッション •

    https://www.youtube.com/watch?v=uoVeZzKl6WQ (2021) • https://www.youtube.com/watch?v=HXHwtEjQoyM (2022) • Minimal API サンプルコード • https://github.com/tsubakimoto/dotnetconf-minimal-api-sample • https://github.com/captainsafia/TrainingApi • ドキュメント • https://learn.microsoft.com/ja-jp/aspnet/core/fundamentals/minimal-apis • https://learn.microsoft.com/ja-jp/aspnet/core/release-notes/aspnetcore-7.0 • https://learn.microsoft.com/ja-jp/aspnet/core/web-api/http-repl/ • https://learn.microsoft.com/ja-jp/aspnet/core/security/authentication/jwt-authn