# 項目 API 文件 ## 目錄 1. [概述](#概述) 2. [認證](#認證) 3. [API 群組](#api-群組) - [前端 API](#前端-api) - [管理員 API](#管理員-api) 4. [端點](#端點) - [前端 API 端點](#前端-api-端點) - [1. 用戶註冊](#1-用戶註冊) - [2. 發送提示](#2-發送提示) - [管理員 API 端點](#管理員-api-端點) - [1. 用戶管理](#1-用戶管理) - [a. 列出用戶](#a-列出用戶) - [b. 啟用用戶](#b-啟用用戶) - [c. 停用用戶](#c-停用用戶) - [2. API 提供者管理](#2-api-提供者管理) - [a. 列出 API 提供者](#a-列出-api-提供者) - [b. 添加 API 提供者](#b-添加-api-提供者) - [c. 移除 API 提供者](#c-移除-api-提供者) - [d. 選擇活躍的 API 提供者](#d-選擇活躍的-api-提供者) 5. [錯誤處理](#錯誤處理) 6. [安全性考量](#安全性考量) 7. [可擴展性](#可擴展性) --- ## 概述 本 API 旨在促進前端與後端系統之間的互動,包括用戶註冊、通過 AI 提供者處理提示以及管理用戶和 API 提供者的管理功能。後端基於 Laravel 構建,確保結構化和安全的框架。 ## 認證 - **方法**: JSON Web Tokens (JWT) - **流程**: - 用戶通過登錄進行認證,獲取 JWT。 - 管理員單獨認證,也會獲取具有高級權限的 JWT。 - **使用方式**: - 在所有受保護的端點中包含 JWT 在 `Authorization` 標頭中。 - 範例: `Authorization: Bearer ` ## API 群組 ### 前端 API 設計用於終端用戶的互動,包括用戶註冊、認證和向 AI 提供者發送提示。 ### 管理員 API 設計用於管理任務,如管理用戶帳戶和配置 AI API 提供者。 ## 端點 ### 前端 API 端點 #### 1. 用戶註冊 - **端點**: `/api/frontend/register` - **方法**: `POST` - **描述**: 註冊一個新用戶帳戶,初始狀態為「未激活」。 - **參數**: - **請求體**: - `username` (字串, 必填) - `email` (字串, 必填, 有效的電子郵件格式) - `password` (字串, 必填, 最少 8 個字符) - **請求範例**: ```json { "username": "john_doe", "email": "john@example.com", "password": "SecurePass123" } ``` - **回應**: - **201 已創建**: ```json { "message": "用戶註冊成功。等待激活。", "user_id": "12345" } ``` - **400 錯誤的請求**: ```json { "error": "驗證失敗。", "details": { "email": "電子郵件地址格式不正確。" } } ``` #### 2. 發送提示 - **端點**: `/api/frontend/send-prompt` - **方法**: `POST` - **描述**: 通過中間件向選定的 AI 提供者發送用戶提示,並返回 AI 的回應。 - **認證**: 必需(用戶 JWT) - **參數**: - **請求體**: - `prompt` (字串, 必填) - **請求範例**: ```json { "prompt": "解釋相對論理論。" } ``` - **回應**: - **200 成功**: ```json { "response": "相對論理論包括阿爾伯特·愛因斯坦的兩個相互關聯的理論:狹義相對論和廣義相對論..." } ``` - **400 錯誤的請求**: ```json { "error": "提示內容不能為空。" } ``` - **500 內部伺服器錯誤**: ```json { "error": "處理提示失敗。請稍後再試。" } ``` ### 管理員 API 端點 #### 1. 用戶管理 ##### a. 列出用戶 - **端點**: `/api/admin/users` - **方法**: `GET` - **描述**: 獲取所有註冊用戶的列表。 - **認證**: 必需(管理員 JWT) - **參數**: - **查詢參數**: - `status` (字串, 選填, 根據用戶狀態篩選:active/inactive) - `page` (整數, 選填, 分頁) - `per_page` (整數, 選填, 每頁項目數) - **請求範例**: ``` GET /api/admin/users?status=active&page=1&per_page=20 ``` - **回應**: - **200 成功**: ```json { "current_page": 1, "per_page": 20, "total": 100, "data": [ { "user_id": "12345", "username": "john_doe", "email": "john@example.com", "status": "active", "registered_at": "2024-04-01T12:34:56Z" } // 更多用戶... ] } ``` ##### b. 啟用用戶 - **端點**: `/api/admin/users/{user_id}/activate` - **方法**: `POST` - **描述**: 啟用用戶帳戶。 - **認證**: 必需(管理員 JWT) - **參數**: - **路徑參數**: - `user_id` (字串, 必填) - **請求範例**: ``` POST /api/admin/users/12345/activate ``` - **回應**: - **200 成功**: ```json { "message": "用戶帳戶已成功啟用。" } ``` - **404 未找到**: ```json { "error": "未找到用戶。" } ``` ##### c. 停用用戶 - **端點**: `/api/admin/users/{user_id}/deactivate` - **方法**: `POST` - **描述**: 停用用戶帳戶。 - **認證**: 必需(管理員 JWT) - **參數**: - **路徑參數**: - `user_id` (字串, 必填) - **請求範例**: ``` POST /api/admin/users/12345/deactivate ``` - **回應**: - **200 成功**: ```json { "message": "用戶帳戶已成功停用。" } ``` - **404 未找到**: ```json { "error": "未找到用戶。" } ``` #### 2. API 提供者管理 ##### a. 列出 API 提供者 - **端點**: `/api/admin/api-providers` - **方法**: `GET` - **描述**: 獲取所有已配置的 AI API 提供者列表。 - **認證**: 必需(管理員 JWT) - **參數**: - **查詢參數**: - `active` (布林值, 選填, 根據活躍狀態篩選) - **請求範例**: ``` GET /api/admin/api-providers?active=true ``` - **回應**: - **200 成功**: ```json { "data": [ { "provider_id": "openai", "name": "OpenAI", "active": true, "config": { "api_key": "sk-********", "endpoint": "https://api.openai.com/v1/" } } // 更多提供者... ] } ``` ##### b. 添加 API 提供者 - **端點**: `/api/admin/api-providers` - **方法**: `POST` - **描述**: 向系統中添加一個新的 AI API 提供者。 - **認證**: 必需(管理員 JWT) - **參數**: - **請求體**: - `provider_id` (字串, 必填, 唯一標識) - `name` (字串, 必填) - `api_key` (字串, 必填) - `endpoint` (字串, 必填, 有效的 URL) - **請求範例**: ```json { "provider_id": "newai", "name": "新 AI 提供者", "api_key": "new-api-key-12345", "endpoint": "https://api.newai.com/v1/" } ``` - **回應**: - **201 已創建**: ```json { "message": "API 提供者已成功添加。", "provider_id": "newai" } ``` - **400 錯誤的請求**: ```json { "error": "驗證失敗。", "details": { "provider_id": "provider_id 已被使用。" } } ``` ##### c. 移除 API 提供者 - **端點**: `/api/admin/api-providers/{provider_id}` - **方法**: `DELETE` - **描述**: 從系統中移除一個現有的 AI API 提供者。 - **認證**: 必需(管理員 JWT) - **參數**: - **路徑參數**: - `provider_id` (字串, 必填) - **請求範例**: ``` DELETE /api/admin/api-providers/newai ``` - **回應**: - **200 成功**: ```json { "message": "API 提供者已成功移除。" } ``` - **404 未找到**: ```json { "error": "未找到 API 提供者。" } ``` ##### d. 選擇活躍的 API 提供者 - **端點**: `/api/admin/api-providers/{provider_id}/activate` - **方法**: `POST` - **描述**: 設定指定的 API 提供者為處理提示的活躍提供者。 - **認證**: 必需(管理員 JWT) - **參數**: - **路徑參數**: - `provider_id` (字串, 必填) - **請求範例**: ``` POST /api/admin/api-providers/openai/activate ``` - **回應**: - **200 成功**: ```json { "message": "API 提供者 'OpenAI' 現已成為活躍狀態。" } ``` - **404 未找到**: ```json { "error": "未找到 API 提供者。" } ``` ### 前端 API 認證端點 *如果需要用戶登錄,應包括額外的端點。* #### 3. 用戶登錄 - **端點**: `/api/frontend/login` - **方法**: `POST` - **描述**: 認證用戶並返回 JWT。 - **參數**: - **請求體**: - `email` (字串, 必填) - `password` (字串, 必填) - **請求範例**: ```json { "email": "john@example.com", "password": "SecurePass123" } ``` - **回應**: - **200 成功**: ```json { "token": "jwt-token-string", "expires_in": 3600 } ``` - **401 未授權**: ```json { "error": "無效的憑證或帳戶未激活。" } ``` ## 錯誤處理 所有錯誤回應遵循一致的結構,便於客戶端進行調試和處理。 - **格式**: ```json { "error": "詳細說明錯誤的消息。" } ```