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: データベース ORM
    • utoipa: 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 作成時やマージ時に自動的に生成・更新が行われます。

results matching ""

    No results matching ""