◾️はじめに
https://dk521123.hatenablog.com/entry/2025/10/05/014051
https://dk521123.hatenablog.com/entry/2025/10/06/000101
を通して、FastAPIの基本的な知識やTipsを書き溜めておく。
目次
【1】自動生成されるAPIドキュメント 【2】REST / HTML の切替 【3】CORS(Cross-Origin Resource Sharing)の設定 1)サンプル 2)各パラメータについて
【1】自動生成されるAPIドキュメント
* 自動でAPIドキュメントが生成され、以下のURLから参照可能。 => サーバが起動されているかの確認にも使える!
【2】REST / HTML の切替
* 詳細なサンプルは、以下の関連記事を参照。
FastAPI ~ ファイルアップロード ~
https://dk521123.hatenablog.com/entry/2025/10/06/000101
Case1:REST の場合
# 特に意識する必要がなく、ReturnはRESTのJSONを返すだけ @app.post("/upload/") async def upload_file(upload_file: UploadFile = File(...)): return { "status": "success", "filename": upload_file.filename, "file_type": file_type }
Case2:HTML の場合
from fastapi.responses import HTMLResponse from fastapi.templating import Jinja2Templates # ★「response_class=HTMLResponse」を追加する @app.get("/", response_class=HTMLResponse) async def upload_form(request: Request): return templates.TemplateResponse("upload_form.html", {"request": request})
【3】CORS(Cross-Origin Resource Sharing)の設定
* 異なるオリジン(ドメイン、プロトコル、ポート番号の組み合わせ)間での リソース共有を可能にする、ウェブブラウザのセキュリティ機能
1)サンプル
import os from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware ENV = os.getenv("ENV", "development") app = FastAPI() if ENV == "production": app.add_middleware( CORSMiddleware, allow_origins=["https://your-frontend.com"], allow_credentials=True, allow_methods=["GET", "POST"], allow_headers=["Content-Type", "Authorization"], ) else: app.add_middleware( CORSMiddleware, allow_origins=["http://localhost:3000"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], )
2)各パラメータについて
* 適切な設定は、悪意のあるクロスサイトスクリプティング(XSS)などの対策になる
| 設定項目 | 開発用 | 本番用のポイント |
|---|---|---|
| allow_origins | ["http://localhost:3000"] | 本番ドメインを指定(*は避ける) |
| allow_credentials | True(クッキー・認証情報を含む通信を許可) | 必要なら True だが * と併用しない |
| allow_methods | "*" | 使うメソッドだけ(例: "GET", "POST") |
| allow_headers | "*" | "Content-Type" など必要最小限だけにすべき |
関連記事
FastAPI ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2025/10/05/014051
FastAPI ~ ファイルアップロード ~
https://dk521123.hatenablog.com/entry/2025/10/06/000101