API ドキュメント
このページでは、お問い合わせシステムのバックエンド API について説明します。
アーキテクチャ概要
バックエンドは、AWS Lambda と Amazon API Gateway HTTP API を中心に構成されています。
クライアント
└─▶ Amazon API Gateway HTTP API (JWT Authorizer)
└─▶ AWS Lambda (Rust)
└─▶ Amazon Aurora DSQL (SeaORM 経由)
エンドポイント
すべての API リクエストには、Amazon Cognito から発行された有効な JWT ID トークンを Authorization: Bearer <token> ヘッダーに含める必要があります(/health を除く)。
1. お問い合わせ一覧取得
- パス:
GET /messages - 説明: 認証済みユーザーが送信した(または受け取った)メッセージの一覧を、作成日時の降順で取得します。
- 認可: 必須(Cognito JWT)
- レスポンス例:
{ "email": "user@example.com", "count": 2, "messages": [ { "cognito_id": "uuid-v4", "is_from_user": true, "body": "こんにちは", "created_at": "2024-03-20T12:00:00Z" } ] }
2. 新規お問い合わせ作成
- パス:
POST /message/new - 説明: 新しいお問い合わせメッセージを送信します。
- 認可: 必須(Cognito JWT)
- リクエストボディ:
{ "body": "お問い合わせ内容" } - レスポンス例:
{ "message": { "id": "uuid-v7", "cognito_id": "uuid-v4", "is_from_user": true, "body": "お問い合わせ内容", "created_at": "2024-03-20T12:00:00Z" } }
3. ヘルスチェック
- パス:
GET /health - 説明: API とデータベースの接続状態を確認します。
- 認可: 不要
- レスポンス:
OK(200 OK)
実装詳細
Lambda ハンドラー (Rust)
- ソース:
inquiry-api/api/lambda/src/ - ランタイム:
provided.al2023(Custom Runtime) - アーキテクチャ:
arm64(Graviton) - 主要ライブラリ:
lambda_runtime: Lambda 実行用tokio: 非同期ランタイムsea-orm: データベース ORMutoipa: OpenAPI ドキュメント生成
認証処理
API Gateway の JWT Authorizer で検証された sub (Cognito ID) と email クレームを使用して、ユーザーを識別します。sub クレームはデータベースの cognito_id カラムと照合され、各ユーザーは自分自身のデータにのみアクセスできます。
OpenAPI 生成
本プロジェクトでは、コードから OpenAPI 仕様書を自動生成しています。
- 生成ツール:
inquiry-api/api/lambda/src/bin/generate-openapi.rs - 実行方法:
cargo run --features openapi --bin generate-openapi - 出力先:
inquiry-api/api/openapi.yaml
GitHub Actions の CI/CD フローにより、PR 作成時やマージ時に自動的に生成・更新が行われます。