API仕様
本システムは、フロントエンドとバックエンド間の通信、およびバックエンド内部サービス間の通信にRESTful APIとWebSocketを使用する。FastAPIの自動生成されるOpenAPIドキュメント(Swagger UI/ReDoc)が主要なAPIリファレンスとなるが、ここでは主要なAPIエンドポイントとデータモデルの概要を記述する。
1. 認証API
POST /auth/register
- 説明: ユーザー登録
- リクエストボディ:
{
"username": "string",
"email": "string",
"password": "string"
} - レスポンス:
{
"message": "User registered successfully"
}
POST /auth/login
- 説明: ユーザーログイン
- リクエストボディ:
{
"username": "string",
"password": "string"
} - レスポンス:
{
"access_token": "string",
"token_type": "bearer",
"refresh_token": "string"
}
POST /auth/refresh
- 説明: アクセストークンのリフレッシュ
- リクエストヘッダー:
Cookie:refresh_token=<refresh_token_string>
- レスポンス:
{
"access_token": "string",
"token_type": "bearer"
}
POST /auth/logout
- 説明: ユーザーログアウト
- リクエストヘッダー:
Authorization:Bearer <access_token_string>
- レスポンス:
{
"message": "Logged out successfully"
}
2. グラフデータ管理API
POST /projects/{project_id}/upload-graph
- 説明: グラフデータ(CSV/JSON)のアップロード
- パスパラメータ:
project_id: プロジェクトID
- リクエストボディ:
file: アップロードするグラフデータファイル
- レスポンス:
{
"message": "Graph data uploaded successfully",
"graph_id": "string"
}
GET /projects/{project_id}/graph/{graph_id}
- 説明: 特定のグラフデータを取得
- パスパラメータ:
project_id: プロジェクトIDgraph_id: グラフID
- レスポンス:
- グラフデータ(ノード、エッジ情報を含むJSON形式)
3. LLMインタラクション (WebSocket)
WebSocket /ws/{project_id}/chat
- 説明: ユーザーとLLM間のリアルタイムチャットおよびグラフ操作
- パスパラメータ:
project_id: プロジェクトID
クライアントからサーバーへのメッセージ
- ユーザーメッセージ:
{
"type": "user_message",
"content": "友達が多い人を可視化して"
} - Function Call結果の通知 (LLMからのFunction Call実行後):
{
"type": "function_result",
"tool_call_id": "string",
"result": "any"
}
サーバーからクライアントへのメッセージ
- LLMテキスト応答:
{
"type": "llm_response",
"content": "次数中心性をノードサイズに割り当てました。"
} - Function Call要求 (LLMがFunction Callを提案した場合):
{
"type": "function_call",
"tool_call_id": "string",
"function": {
"name": "string",
"arguments": "object"
}
} - グラフ描画データ更新:
{
"type": "graph_update",
"patch": "array" // JSON Patch形式の差分データ
} - エラーメッセージ:
{
"type": "error",
"message": "string"
}
4. 内部サービス間API
(FastAPIの依存性注入や内部関数呼び出しにより直接連携されるため、明示的なHTTP APIとしては公開されないが、論理的なインターフェースとして存在する)
計算サービスインターフェース
calculate_metric(project_id: str, graph_id: str, metric_type: str) -> dictcalculate_layout(project_id: str, graph_id: str, layout_type: str) -> dict
状態管理サービスインターフェース
update_visualization_state(project_id: str, state_patch: dict) -> Noneget_current_visualization_data(project_id: str) -> dict