.NET Conf Recap Fukuoka での登壇資料です。 https://msdevjp.connpass.com/event/264482/
#dotnetconfMinimal API と DI の良い組み合わせ2022/11/25 .NET Conf Recap FukuokaYuta Matsumura
View Slide
#dotnetconf松村 優大 (Yuta Matsumura)Chief Technical Architect (C#, PHP, Azure)Microsoft MVP (Developer Technologies)#fukuten #devblogradio の中の人@tsubakimoto_sCurrently working for
#dotnetconf本日お話しすること1. ASP.NET Core Minimal API とは2. これまでの Web API 開発との違い3. これから始める Minimal API4. Minimal API x Dependency Injection5. .NET 7 の Minimal API の新機能
#dotnetconfASP.NET Core Minimal API とは• ASP.NET Core 6.0 で登場した機能• 依存関係が最小限の Web API を作成• ルーティングで構成するエンドポイント定義
#dotnetconf最小限の依存関係前提 (.NET 6.0 ~ / ASP.NET Core 6.0 ~)最小化されたホスティングモデル• Startup.cs が Program.cs に統合された• トップレベルステートメント• global using により using の記述量が減る
#dotnetconf#dotnetconfProgram.cs
#dotnetconf#dotnetconf$ dotnet runinfo: Microsoft.Hosting.Lifetime[14]Now listening on: http://localhost:5000info: Microsoft.Hosting.Lifetime[0]Application started. Press Ctrl+C to shut down.info: Microsoft.Hosting.Lifetime[0]Hosting environment: Productioninfo: Microsoft.Hosting.Lifetime[0]Content root path: C:¥Users¥yuta¥...¥MinimalConsole
#dotnetconfルーティングで構成するエンドポイント定義HTTP メソッド エンドポイント定義HTTP GET MapGetHTTP POST MapPostHTTP PUT MapPutHTTP DELETE MapDeleteなどhttps://learn.microsoft.com/ja-jp/aspnet/core/fundamentals/routing
#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
#dotnetconfこれから始める Minimal API
#dotnetconfSwagger を構成しましょう.NET では Swashbuckle というライブラリを用いることで、アプリケーションに Swagger を導入することができます。https://github.com/domaindrivendev/Swashbuckle.AspNetCore
#dotnetconf#dotnetconf
#dotnetconf#dotnetconfMinimal API(Program.cs)DB(Usersテーブル)DbContext
#dotnetconf#dotnetconfデータアクセスは依存関係の解決 (DI) を介する
#dotnetconf#dotnetconf▼グルーピング可能
#dotnetconf#dotnetconfパラメーターの取得元を明示したい場合
#dotnetconf#dotnetconfAPI認証
#dotnetconfMinimal API x Dependency Injection
#dotnetconf“Fat Program.cs”実際の API では様々なビジネスロジックが登場します。しかし、これらを Program.cs に書くと複雑になります。• パラメーターのバリデーション• ログ出力• データストアの CRUD• 他サービスとの連携• HTTP レスポンスの構成
#dotnetconfDependency Injection の活用ビジネスロジック部分は専用のクラスで管理しましょう。※単一責任の原則 (SRP)ASP.NET Core では Dependency Injection の仕組みがサポートされているため、インターフェースで依存関係を構成することで、結果的に「テストしやすいAPI」となります。https://learn.microsoft.com/ja-jp/aspnet/core/fundamentals/dependency-injection
#dotnetconf#dotnetconf▶
#dotnetconf.NET 7 の Minimal API の新機能https://learn.microsoft.com/ja-jp/aspnet/core/release-notes/aspnetcore-7.0
#dotnetconfRate Limit Middlewareレート制限(時間内のリクエスト試行回数の制限)をASP.NET Core 単体で構成することが可能となった。レート制限に達した HTTP リクエストに対してはHTTP 429 (Too Many Requests) のレスポンスを行う。
#dotnetconfMinimal API エンドポイントのフィルターエンドポイント前後で処理を実行することが可能となった。
#dotnetconf配列と文字列値のバインドヘッダーやクエリ文字列に指定された値を配列にバインドすることが可能となった。
#dotnetconfAsParametersAttribute引数のバインドをクラスに置き換え可能となった。▼
#dotnetconfOpenAPI の機能強化Microsoft.AspNetCore.OpenApi (nuget) を使用すると、Minimal API のエンドポイントにて OpenAPI 定義を設定することが可能となった。
#dotnetconfルートグループリソース単位で API グルーピングする機能。グループレベルで認証構成などが可能。
#dotnetconfおまけ開発をラクにするちょっとしたツールたち
#dotnetconfdotnet-httpreplコマンドラインで使用する Web API クライアント。
#dotnetconfdotnet user-jwts開発環境で使用する JWT (JSON Web Token) を発行するためのコマンドラインツール。JWT に関する情報はユーザーシークレットに保管される。
#dotnetconfAppendix• .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
#dotnetconfご清聴ありがとうございました