本文へスキップ

FastAPI ↔ ASP.NET Core 対照表 ​

FastAPI を使ったことがあれば、ASP.NET Core Minimal API にも共通する考え方が多いと気付くでしょう。関数でエンドポイントを定義し、型でパラメーターを宣言し、OpenAPI ドキュメントを自動生成します。この表では、すでに知っている知識を対応付けて整理します。

注意

この対照表は理解を助けるための類推であり、両者の動作が完全に同じという意味ではありません。大きな違いがある箇所には明記しています。詳しくは各章を参照してください。

プロジェクトとツール ​

FastAPI / PythonASP.NET Core / .NET説明章
python + pip + venvdotnet CLI実行、依存関係管理、ビルドを1つのツールで扱えます。仮想環境は不要です環境準備
pyproject.toml.csproj プロジェクトファイルターゲットフレームワークと依存パッケージを宣言します環境準備
PyPINuGetパッケージレジストリ環境準備
pip install xxxdotnet add package Xxx依存関係を追加しますはじめの一歩
uvicornKestrelWeb サーバーです。Kestrel はアプリに組み込まれており、別途起動する必要はありませんはじめの一歩
fastapi dev / uvicorn --reloaddotnet watch開発中に自動で再読み込みします。ホットリロードに対応した変更ならプロセスの再起動は不要です開発ツールの練習

エンドポイントの定義 ​

FastAPI / PythonASP.NET Core / .NET説明章
app = FastAPI()builder + app = builder.Build().NET では「サービスの登録」と「リクエストの処理」を2つの段階に分けますはじめの一歩
@app.get("/")app.MapGet("/", ...)デコレーターではなくメソッド呼び出しでエンドポイントを登録しますはじめの一歩
dict を返す匿名型 new { ... } または record を返すJSON に自動シリアライズされ、プロパティ名は camelCase に変換されますはじめの一歩
/docs/scalar(Scalar.AspNetCore)対話型ドキュメントです。.NET では生成と表示が別々のパッケージに分かれていますはじめの一歩
/openapi.json/openapi/v1.jsonOpenAPI ドキュメントです。.NET 10 は既定で OpenAPI 3.1 を生成しますはじめの一歩

リクエストパラメーター ​

FastAPI / PythonASP.NET Core / .NET説明章
/items/{item_id} + item_id: int/items/{id:int} + int id名前によるバインドと型変換ルートパラメーター
宣言順にルートを照合優先順位に基づいてルートを照合違い:.NET では登録順はマッチ結果に影響しませんルートパラメーター
{file_path:path}{*path}/ を含む残りのパスに一致しますルートパラメーター
クエリパラメーター q: str | None = Nonestring? qnullable 型で省略可能なパラメーターを表しますクエリパラメーター
リクエスト本文に Pydantic モデルリクエスト本文に recordJSON を強い型付けのオブジェクトに自動バインドしますリクエスト本文
Field(ge=1) などの検証Data Annotations と .NET 10 の組み込み検証パラメーター検証
Header() / Cookie()[FromHeader] / HttpRequest.Cookies.NET に [FromCookie] 属性はありません。Cookie はリクエストオブジェクトから読み取りますヘッダーと Cookie

レスポンスとエラー ​

FastAPI / PythonASP.NET Core / .NET説明章
response_modelTypedResults と Results<T1, T2>型付き結果はハンドラーの戻り値を制約し、ドキュメント用メタデータを提供します。Pydantic の実行時レスポンス検証やフィルタリングと同じではありませんレスポンス型
HTTPExceptionTypedResults.NotFound()、ProblemDetailsステータスコードとエラー処理
APIRouterapp.MapGroup(...)ルートのグループ化と共通プレフィックスルートグループ

アプリケーションの骨格 ​

FastAPI / PythonASP.NET Core / .NET説明章
Depends()依存性注入コンテナー builder.Services.NET には組み込みの DI コンテナーがあり、3種類のライフタイムを指定できます依存性注入
pydantic-settings構成システム + Options パターンappsettings.json、環境変数、User Secrets を利用します構成と Options
@app.middleware("http")app.Use(...) ミドルウェアパイプライン方式で、実行順序が重要ですミドルウェア
loggingILogger<T>構造化ログログ

データ、セキュリティ、本番公開 ​

FastAPI / PythonASP.NET Core / .NET説明章
SQLAlchemy / SQLModelEF CoreORM です。DbContext がエンティティの変更を追跡して保存しますEF Core 入門
relationship / クエリ式ナビゲーションプロパティ、LINQ、Includeリレーションの宣言、プロジェクション、関連オブジェクトの読み込みを区別しますリレーションとクエリ
Session 内でエンティティを変更してコミット追跡対象のエンティティ + SaveChangesAsync()入力 DTO とデータベースのエンティティを分けますCRUD 全体
AlembicEF Core マイグレーション(dotnet ef)スキーマの更新に使用します。第23章ではマイグレーションで更新を管理しますデータベースのマイグレーション
OAuth2PasswordBearer + JWT 検証ロジックAddJwtBearer + RequireAuthorization()FastAPI の認証情報抽出は JWT 検証と同じではありません。ローカル用トークンは dotnet user-jwts で生成します認証(JWT)
Security() / 依存関係の中で権限を確認名前付きポリシー + RequireAuthorization()この例では editor ロールに書き込みを制限します認可
CORSMiddlewareAddCors + UseCorsブラウザーのクロスオリジンアクセスを許可します。認証や認可の代わりにはなりませんCORS
TestClientWebApplicationFactoryアプリをメモリ内で起動して統合テストを実行しますテスト

SQL に慣れている方は、EF Core / LINQ ↔ PostgreSQL 対照表もご覧ください。クエリ、ページング、リレーション、追加・更新・削除を比較できます。

.NET 10 と Minimal API を使用 · 各章に実行可能なサンプルを用意