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.7k
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
AspireとGitHub Modelsで作るお手軽AIアプリ
tsubakimoto_s
0
50
Memories of GitHub Universe & San Francisco
tsubakimoto_s
0
42
私のMCPの使い方
tsubakimoto_s
0
150
これからはじめる Model Context Protocol
tsubakimoto_s
0
60
Cloudflare の MCP サーバーをためしてみた
tsubakimoto_s
1
83
re:Invent の裏でアップデートされていた .NET Aspire で統合するAWS のクラウドリソース
tsubakimoto_s
1
130
.NET AspireでAzure Functionsやクラウドリソースを統合する
tsubakimoto_s
0
340
Microsoft Entra External IDとAzure AD B2C
tsubakimoto_s
0
2.3k
Minimal Observability on Minimal API
tsubakimoto_s
0
130
Other Decks in Technology
See All in Technology
意外と知らない状態遷移テストの世界
nihonbuson
PRO
1
310
TED_modeki_共創ラボ_20251203.pdf
iotcomjpadmin
0
170
AWS re:Invent 2025~初参加の成果と学び~
kubomasataka
1
200
AWSに革命を起こすかもしれない新サービス・アップデートについてのお話
yama3133
0
520
Snowflake Industry Days 2025 Nowcast
takumimukaiyama
0
140
[Neurogica] 採用ポジション/ Recruitment Position
neurogica
1
140
Entity Framework Core におけるIN句クエリ最適化について
htkym
0
130
202512_AIoT.pdf
iotcomjpadmin
0
150
モダンデータスタックの理想と現実の間で~1.3億人Vポイントデータ基盤の現在地とこれから~
taromatsui_cccmkhd
2
280
Claude Skillsの テスト業務での活用事例
moritamasami
1
120
M&Aで拡大し続けるGENDAのデータ活用を促すためのDatabricks権限管理 / AEON TECH HUB #22
genda
0
290
Building Serverless AI Memory with Mastra × AWS
vvatanabe
1
750
Featured
See All Featured
How to train your dragon (web standard)
notwaldorf
97
6.5k
The SEO identity crisis: Don't let AI make you average
varn
0
39
It's Worth the Effort
3n
187
29k
Technical Leadership for Architectural Decision Making
baasie
0
190
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
120
New Earth Scene 8
popppiees
0
1.3k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
170
Being A Developer After 40
akosma
91
590k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
720
Paper Plane (Part 1)
katiecoart
PRO
0
2.3k
Highjacked: Video Game Concept Design
rkendrick25
PRO
0
260
The Cost Of JavaScript in 2023
addyosmani
55
9.4k
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 ご清聴ありがとうございました