Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Minimal API と DI の良い組み合わせ
Search
Yuta Matsumura
November 28, 2022
Technology
1
2.4k
Minimal API と DI の良い組み合わせ
.NET Conf Recap Fukuoka での登壇資料です。
https://msdevjp.connpass.com/event/264482/
Yuta Matsumura
November 28, 2022
Tweet
Share
More Decks by Yuta Matsumura
See All by Yuta Matsumura
私のMCPの使い方
tsubakimoto_s
0
140
これからはじめる Model Context Protocol
tsubakimoto_s
0
50
Cloudflare の MCP サーバーをためしてみた
tsubakimoto_s
1
46
re:Invent の裏でアップデートされていた .NET Aspire で統合するAWS のクラウドリソース
tsubakimoto_s
1
120
.NET AspireでAzure Functionsやクラウドリソースを統合する
tsubakimoto_s
0
320
Microsoft Entra External IDとAzure AD B2C
tsubakimoto_s
0
2k
Minimal Observability on Minimal API
tsubakimoto_s
0
120
ワークフローのコピペを自作で解消した話
tsubakimoto_s
0
88
Azure AI ことはじめ
tsubakimoto_s
0
690
Other Decks in Technology
See All in Technology
AWS IAM Identity Centerによる権限設定をグラフ構造で可視化+グラフRAGへの挑戦
ykimi
2
660
自己的售票系統自己做!
eddie
0
310
品質保証の取り組みを広げる仕組みづくり〜スキルの移譲と自律を支える実践知〜
tarappo
2
790
Flutterで実装する実践的な攻撃対策とセキュリティ向上
fujikinaga
1
110
LINE公式アカウントの技術スタックと開発の裏側
lycorptech_jp
PRO
0
300
エンタープライズ企業における開発効率化のためのコンテキスト設計とその活用
sergicalsix
1
150
Pythonで構築する全国市町村ナレッジグラフ: GraphRAGを用いた意味的地域検索への応用
negi111111
8
3.3k
QAセントラル組織が運営する自動テストプラットフォームの課題と現状
lycorptech_jp
PRO
0
240
プロダクトエンジニアとしてのマインドセットの育み方 / How to improve product engineer mindset
saka2jp
2
210
メタプログラミングRuby問題集の活用
willnet
2
680
エンジニア採用と 技術広報の取り組みと注力点/techpr1112
nishiuma
0
110
龍昌餃子で理解するWebサーバーの並行処理モデル - 東葛.dev #9
kozy4324
1
140
Featured
See All Featured
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
970
How to Ace a Technical Interview
jacobian
280
24k
Reflections from 52 weeks, 52 projects
jeffersonlam
355
21k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.3k
Designing for humans not robots
tammielis
254
26k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Making Projects Easy
brettharned
120
6.4k
GitHub's CSS Performance
jonrohan
1032
470k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.5k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
Transcript
#dotnetconf Minimal API と DI の良い組み合わせ 2022/11/25 .NET Conf Recap
Fukuoka Yuta Matsumura
#dotnetconf 松村 優大 (Yuta Matsumura) Chief Technical Architect (C#, PHP,
Azure) Microsoft MVP (Developer Technologies) #fukuten #devblogradio の中の人 @tsubakimoto_s Currently working for
#dotnetconf 本日お話しすること 1. ASP.NET Core Minimal API とは 2. これまでの
Web API 開発との違い 3. これから始める Minimal API 4. Minimal API x Dependency Injection 5. .NET 7 の Minimal API の新機能
#dotnetconf ASP.NET Core Minimal API とは • ASP.NET Core 6.0
で登場した機能 • 依存関係が最小限の Web API を作成 • ルーティングで構成するエンドポイント定義
#dotnetconf ASP.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 #dotnetconf Program.cs
#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
#dotnetconf ルーティングで構成するエンドポイント定義 HTTP メソッド エンドポイント定義 HTTP GET MapGet HTTP POST
MapPost HTTP PUT MapPut HTTP DELETE MapDelete など https://learn.microsoft.com/ja-jp/aspnet/core/fundamentals/routing
#dotnetconf #dotnetconf Program.cs
#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
#dotnetconf Swagger を構成しましょう .NET では Swashbuckle というライブラリを用いることで、 アプリケーションに Swagger を導入することができます。
https://github.com/domaindrivendev/Swashbuckle.AspNetCore
#dotnetconf ルーティングで構成するエンドポイント定義 HTTP メソッド エンドポイント定義 HTTP GET MapGet HTTP POST
MapPost HTTP PUT MapPut HTTP DELETE MapDelete など https://learn.microsoft.com/ja-jp/aspnet/core/fundamentals/routing
#dotnetconf #dotnetconf
#dotnetconf #dotnetconf Minimal API (Program.cs) DB (Usersテーブル) DbContext
#dotnetconf #dotnetconf データアクセスは 依存関係の解決 (DI) を介する
#dotnetconf #dotnetconf
#dotnetconf #dotnetconf ▼グルーピング可能
#dotnetconf #dotnetconf
#dotnetconf #dotnetconf
#dotnetconf #dotnetconf
#dotnetconf #dotnetconf パラメーターの取得元を 明示したい場合
#dotnetconf #dotnetconf API認証
#dotnetconf Minimal API x Dependency Injection
#dotnetconf “Fat Program.cs” 実際の API では様々なビジネスロジックが登場します。 しかし、これらを Program.cs に書くと複雑になります。 •
パラメーターのバリデーション • ログ出力 • データストアの CRUD • 他サービスとの連携 • HTTP レスポンスの構成
#dotnetconf Dependency Injection の活用 ビジネスロジック部分は専用のクラスで管理しましょう。 ※単一責任の原則 (SRP) ASP.NET Core では
Dependency Injection の仕組みがサポー トされているため、インターフェースで依存関係を構成する ことで、結果的に「テストしやすいAPI」となります。 https://learn.microsoft.com/ja-jp/aspnet/core/fundamentals/dependency-injection
#dotnetconf #dotnetconf ▶
#dotnetconf #dotnetconf
#dotnetconf .NET 7 の Minimal API の新機能 https://learn.microsoft.com/ja-jp/aspnet/core/release-notes/aspnetcore-7.0
#dotnetconf Rate Limit Middleware レート制限(時間内のリクエスト試行回数の制限)を ASP.NET Core 単体で構成することが可能となった。 レート制限に達した HTTP
リクエストに対しては HTTP 429 (Too Many Requests) のレスポンスを行う。
#dotnetconf Minimal API エンドポイントのフィルター エンドポイント前後で処理を 実行することが可能となった。
#dotnetconf 配列と文字列値のバインド ヘッダーやクエリ文字列に指定された値を配列にバインドす ることが可能となった。
#dotnetconf AsParametersAttribute 引数のバインドをクラスに置き換え可能となった。 ▼
#dotnetconf OpenAPI の機能強化 Microsoft.AspNetCore.OpenApi (nuget) を使用すると、 Minimal API のエンドポイントにて OpenAPI
定義を設定する ことが可能となった。
#dotnetconf ルートグループ リソース単位で API グルーピングする機能。 グループレベルで認証構成などが可能。
#dotnetconf おまけ 開発をラクにするちょっとしたツールたち
#dotnetconf dotnet-httprepl コマンドラインで使用する Web API クライアント。
#dotnetconf dotnet user-jwts 開発環境で使用する JWT (JSON Web Token) を発行するため のコマンドラインツール。
JWT に関する情報はユーザーシークレットに保管される。
#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
#dotnetconf ご清聴ありがとうございました