d48cda4081
CI / Test (ubuntu-latest, Node 18.x, bun) (push) Failing after 15m1s
CI / Test (ubuntu-latest, Node 18.x, npm) (push) Failing after 15m1s
CI / Test (ubuntu-latest, Node 18.x, pnpm) (push) Failing after 15m1s
CI / Test (ubuntu-latest, Node 18.x, yarn) (push) Failing after 15m1s
CI / Test (ubuntu-latest, Node 20.x, bun) (push) Failing after 17m13s
CI / Test (ubuntu-latest, Node 20.x, npm) (push) Failing after 18m42s
CI / Test (ubuntu-latest, Node 20.x, pnpm) (push) Failing after 15m0s
CI / Test (ubuntu-latest, Node 20.x, yarn) (push) Failing after 49m44s
CI / Test (ubuntu-latest, Node 22.x, bun) (push) Failing after 51m55s
CI / Test (ubuntu-latest, Node 22.x, pnpm) (push) Failing after 21m57s
CI / Test (ubuntu-latest, Node 22.x, npm) (push) Failing after 37m39s
CI / Test (ubuntu-latest, Node 22.x, yarn) (push) Failing after 34m7s
CI / Validate Components (push) Failing after 37m15s
CI / Python Tests (push) Failing after 10m1s
CI / Security Scan (push) Failing after 10m1s
CI / Lint (push) Failing after 17m12s
CI / Coverage (push) Failing after 20m19s
CI / Test (macos-latest, Node 18.x, bun) (push) Has been cancelled
CI / Test (macos-latest, Node 18.x, npm) (push) Has been cancelled
CI / Test (macos-latest, Node 18.x, pnpm) (push) Has been cancelled
CI / Test (macos-latest, Node 18.x, yarn) (push) Has been cancelled
CI / Test (windows-latest, Node 18.x, npm) (push) Has been cancelled
CI / Test (windows-latest, Node 18.x, pnpm) (push) Has been cancelled
CI / Test (windows-latest, Node 18.x, yarn) (push) Has been cancelled
CI / Test (macos-latest, Node 20.x, bun) (push) Has been cancelled
CI / Test (macos-latest, Node 20.x, npm) (push) Has been cancelled
CI / Test (macos-latest, Node 20.x, pnpm) (push) Has been cancelled
CI / Test (macos-latest, Node 20.x, yarn) (push) Has been cancelled
CI / Test (windows-latest, Node 20.x, npm) (push) Has been cancelled
CI / Test (windows-latest, Node 20.x, pnpm) (push) Has been cancelled
CI / Test (windows-latest, Node 20.x, yarn) (push) Has been cancelled
CI / Test (macos-latest, Node 22.x, bun) (push) Has been cancelled
CI / Test (macos-latest, Node 22.x, npm) (push) Has been cancelled
CI / Test (macos-latest, Node 22.x, pnpm) (push) Has been cancelled
CI / Test (macos-latest, Node 22.x, yarn) (push) Has been cancelled
CI / Test (windows-latest, Node 22.x, npm) (push) Has been cancelled
CI / Test (windows-latest, Node 22.x, pnpm) (push) Has been cancelled
CI / Test (windows-latest, Node 22.x, yarn) (push) Has been cancelled
59 lines
2.5 KiB
Markdown
59 lines
2.5 KiB
Markdown
---
|
|
paths:
|
|
- "**/app/**/*.py"
|
|
- "**/fastapi/**/*.py"
|
|
- "**/*_api.py"
|
|
---
|
|
# FastAPI ルール
|
|
|
|
FastAPI プロジェクトでは、一般的な Python ルールと併せてこれらのルールを使用してください。
|
|
|
|
## 構造
|
|
|
|
- アプリの構築は `create_app()` に配置する。
|
|
- ルーターは薄く保つ; 永続化とビジネスロジックはサービスまたは CRUD ヘルパーに移動する。
|
|
- リクエストスキーマ、更新スキーマ、レスポンススキーマは分離する。
|
|
- データベースセッションと認証は依存関係に配置する。
|
|
|
|
## 非同期
|
|
|
|
- I/O を実行するエンドポイントには `async def` を使用する。
|
|
- 非同期エンドポイントからは非同期データベースクライアントと HTTP クライアントを使用する。
|
|
- 非同期ルートから `requests`、同期 SQLAlchemy セッション、またはブロッキングファイル/ネットワーク操作を呼び出さない。
|
|
|
|
## 依存性注入
|
|
|
|
```python
|
|
@router.get("/users/{user_id}")
|
|
async def get_user(
|
|
user_id: str,
|
|
db: AsyncSession = Depends(get_db),
|
|
current_user: User = Depends(get_current_user),
|
|
):
|
|
...
|
|
```
|
|
|
|
ルートハンドラ内で `SessionLocal()` や長寿命クライアントを作成しない。
|
|
|
|
## スキーマ
|
|
|
|
- レスポンスモデルにパスワード、パスワードハッシュ、アクセストークン、リフレッシュトークン、内部認証状態を含めない。
|
|
- アプリケーションデータを返すエンドポイントには `response_model` を使用する。
|
|
- 手書きのバリデーションの代わりに、Pydantic でルールを表現できる場合はフィールド制約を使用する。
|
|
|
|
## セキュリティ
|
|
|
|
- CORS オリジンは環境固有にする。
|
|
- ワイルドカードオリジンと認証情報付き CORS を組み合わせない。
|
|
- JWT の有効期限、発行者、オーディエンス、アルゴリズムを検証する。
|
|
- 認証および書き込み負荷の高いエンドポイントにレート制限を適用する。
|
|
- ログから認証情報、Cookie、Authorization ヘッダー、トークンを除去する。
|
|
|
|
## テスト
|
|
|
|
- `Depends` で使用される正確な依存関係をオーバーライドする。
|
|
- テスト後に `app.dependency_overrides` をクリアする。
|
|
- 非同期アプリケーションには非同期テストクライアントを優先する。
|
|
|
|
スキル: `fastapi-patterns` を参照してください。
|