BFF 概要
システム概要
mloca6-bff は MLoca6 の BFF(Backend for Frontend)です。 フロントエンド(Web)からのリクエストを受け付け、複数のバックエンドサービスへのアクセスを集約・変換して返します。
GraphQL を主インターフェースとして採用しており、認証・認可・データ取得・変換のロジックをここに集約することで、フロントエンドが複数のバックエンドを直接意識しなくて済む構成になっています。
アーキテクチャ図
graph TB
FE[フロントエンド]
subgraph BFF[mloca6-bff]
direction TB
GQL["/graphql GraphQL"]
REST["/api/v1/... REST"]
AUTH[認証ミドルウェア JWT / API Key]
GQL --> AUTH
REST --> AUTH
end
DAPR[Dapr 経由\nmloca-api / geo-api / voip-api / chat-api]
HTTP[HTTP 直接\nvpt / chat / realtime-event / linebus / mobustation\nKeycloak / mfa / auditLog / p2relay / ext-api]
INFRA[インフラ\nAWS S3 / DynamoDB / SQS / MCNS Server]
FE -->|GraphQL| GQL
FE -->|REST| REST
AUTH --> DAPR
AUTH --> HTTP
AUTH --> INFRA
エンドポイント一覧
| メソッド | パス | 認証方式 | 用途 |
|---|---|---|---|
| POST | /graphql |
JWT Bearer(@isAuthenticated ディレクティブ) |
GraphQL メインエンドポイント |
| GET | /playground |
なし(非本番環境のみ) | GraphQL Playground |
| GET | /.well-known/jwks.json |
なし | JWT 公開鍵(JWK)取得 |
| POST | /api/v1/DrivingReport/GenerateCallback |
API キー(x-api-key ヘッダー) |
運転日報生成コールバック |
| POST | /api/v1/UserAccount/BulkOperationCallback |
API キー(x-api-key ヘッダー) |
ユーザーアカウント一括操作コールバック |
| POST | /api/v1/Mobile/BulkUpdateCallback |
API キー(x-api-key ヘッダー) |
移動局一括更新コールバック |
| GET | /health/ready |
なし | ヘルスチェック(依存サービス含む) |
| GET | /health/live |
なし | ヘルスチェック(自身の死活) |
/playgroundは環境変数ENVIRONMENT_NAMEがproduction以外のときのみ有効。
リクエストフロー
GraphQL リクエスト(@isAuthenticated あり)
sequenceDiagram
participant FE as フロントエンド
participant BFF as BFF
participant AUTH as 認証ミドルウェア
participant MLOCA as mloca-api
participant BE as バックエンドサービス
FE->>BFF: POST /graphql<br/>Authorization: Bearer <token>
BFF->>AUTH: @isAuthenticated ディレクティブで検証
AUTH->>MLOCA: 公開鍵取得(JWK)
MLOCA-->>AUTH: RSA 公開鍵
AUTH->>AUTH: JWT 検証(RS256)<br/>クレーム検証(org:id, region, iss 等)
AUTH-->>BFF: auth_user をコンテキストに格納
BFF->>BE: バックエンドAPI呼び出し
BE-->>BFF: レスポンス
BFF-->>FE: GraphQL レスポンス
コールバック REST リクエスト(API キー認証)
sequenceDiagram
participant CALLER as 呼び出し元サービス
participant BFF as BFF
CALLER->>BFF: POST /api/v1/DrivingReport/GenerateCallback<br/>x-api-key: <key>
BFF->>BFF: API キー検証
alt 認証失敗
BFF-->>CALLER: 401 Unauthorized
else 認証成功
BFF->>BFF: 運転報告書生成処理
BFF-->>CALLER: 200 OK
end
依存サービス一覧
詳細は data-sources.md を参照。
| サービス | 通信方式 | ヘルスチェック対象 |
|---|---|---|
| mloca-api | Dapr | ✅ |
| geo-api | Dapr | ✅ |
| voip-api | Dapr | ✅ |
| chat-api | Dapr / HTTP | ❌ |
| vpt-api | HTTP | ❌ |
| realtime-event-api | HTTP | ❌ |
| linebus-api | HTTP | ❌ |
| mobustation-api | HTTP | ❌ |
| Keycloak | HTTP | ❌ |
| mfa-api | HTTP | ❌ |
| auditLog-api | HTTP | ❌ |
| p2relay-api | HTTP | ❌ |
| ext-api | HTTP | ❌ |
| AWS S3 | AWS SDK | ❌ |
| AWS DynamoDB | AWS SDK | ❌ |
| AWS SQS | AWS SDK | ❌ |
| MCNS Server | TCP | ❌ |
ヘルスチェック対象のサービスは
/health/readyエンドポイントで確認できます。 geo-api・mloca-api・voip-api のいずれかが NG の場合、status: NGを返します。
技術スタック
| 項目 | 内容 |
|---|---|
| 言語 | Go 1.24 |
| Web フレームワーク | Gin |
| GraphQL ライブラリ | gqlgen v0.17 |
| サービス間通信 | Dapr |
| JWT 検証 | RS256(dgrijalva/jwt-go) |
| AWS SDK | aws-sdk-go / aws-sdk-go-v2 |
| ログ | zerolog |
開発リソース
| 環境 | URL |
|---|---|
| ステージング Playground | https://stg-mloca6-bff.mcapps.jp/playground |