# DramaLing API 文檔 ## API 概覽 DramaLing API 是一個詞彙學習平台的後端服務,提供 AI 智能分析、音頻合成、用戶認證、詞卡管理、統計分析等功能。 **基礎資訊:** - 基礎URL: `https://api.dramaling.com` (production) / `http://localhost:5000` (development) - API版本: v1 - 資料格式: JSON - 字符編碼: UTF-8 ## 認證說明 ### JWT Token 認證 大部分 API 端點需要 JWT Token 認證,除了標示 `[AllowAnonymous]` 的端點。 **認證方式:** ``` Authorization: Bearer {JWT_TOKEN} ``` **Token 獲取:** 透過 `/api/auth/login` 或 `/api/auth/register` 端點獲取 JWT Token。 **Token 有效期:** 7天 ## 錯誤處理 ### 標準錯誤格式 ```json { "Success": false, "Error": "錯誤訊息", "Details": "詳細錯誤資訊", "Timestamp": "2023-10-15T10:30:00Z" } ``` ### HTTP 狀態碼 - `200 OK` - 請求成功 - `400 Bad Request` - 請求參數錯誤 - `401 Unauthorized` - 未授權或Token無效 - `404 Not Found` - 資源不存在 - `500 Internal Server Error` - 伺服器內部錯誤 --- ## 1. AI Controller **路由:** `/api/ai` **認證:** 不需要 ### 1.1 智能分析英文句子 **端點:** `POST /api/ai/analyze-sentence` **功能:** 分析英文句子的語法、詞彙等資訊 **請求體:** ```json { "InputText": "The beautiful girl is reading a book.", "Options": { "IncludeGrammar": true, "IncludeVocabulary": true, "DetailLevel": "detailed" } } ``` **回應:** ```json { "Success": true, "ProcessingTime": 1.23, "Data": { "Analysis": { "Grammar": [], "Vocabulary": [], "Complexity": "B1" }, "Metadata": { "ProcessingDate": "2023-10-15T10:30:00Z" } } } ``` ### 1.2 健康檢查 **端點:** `GET /api/ai/health` **功能:** 檢查 AI 服務狀態 **回應:** ```json { "Status": "Healthy", "Service": "AI Analysis Service", "Timestamp": "2023-10-15T10:30:00Z", "Version": "1.0" } ``` ### 1.3 分析統計資訊 **端點:** `GET /api/ai/stats` **功能:** 獲取 AI 分析服務的統計資訊 **回應:** ```json { "Success": true, "Data": { "TotalAnalyses": 1000, "CachedAnalyses": 800, "CacheHitRate": 0.8, "AverageResponseTimeMs": 150, "LastAnalysisAt": "2023-10-15T10:30:00Z" } } ``` --- ## 2. Audio Controller **路由:** `/api/audio` **認證:** 需要 ### 2.1 文字轉語音 **端點:** `POST /api/audio/tts` **功能:** 將文字轉換為語音 **請求體:** ```json { "Text": "Hello, how are you?", "Accent": "us", "Speed": 1.0, "Voice": "en-US-AriaNeural" } ``` **回應:** ```json { "AudioUrl": "https://storage.dramaling.com/audio/abc123.mp3", "Duration": 2.5, "CacheHash": "abc123def456" } ``` **參數說明:** - `Text`: 要轉換的文字 (最大1000字符) - `Accent`: 口音 ("us" 或 "uk") - `Speed`: 播放速度 (0.5 - 2.0) - `Voice`: 語音ID (可選) ### 2.2 獲取快取音頻 **端點:** `GET /api/audio/tts/cache/{hash}` **功能:** 根據快取雜湊值獲取已快取的音頻 **回應:** ```json { "AudioUrl": "https://storage.dramaling.com/audio/abc123.mp3", "Duration": 2.5 } ``` ### 2.3 發音評估 **端點:** `POST /api/audio/pronunciation/evaluate` **功能:** 評估用戶發音品質 **請求 (multipart/form-data):** - `audioFile`: 音頻檔案 (最大10MB, 支援 WAV/MP3/OGG) - `targetText`: 目標文字 - `userLevel`: 用戶等級 (預設 "B1") **回應:** ```json { "OverallScore": 85, "AccuracyScore": 88, "FluencyScore": 82, "ProsodicScore": 85, "WordScores": [ { "Word": "hello", "Score": 90, "Feedback": "Excellent pronunciation" } ] } ``` ### 2.4 獲取支援語音列表 **端點:** `GET /api/audio/voices` **功能:** 獲取可用的 TTS 語音列表 **回應:** ```json { "US": [ { "Id": "en-US-AriaNeural", "Name": "Aria", "Gender": "Female" } ], "UK": [ { "Id": "en-GB-SoniaNeural", "Name": "Sonia", "Gender": "Female" } ] } ``` --- ## 3. Auth Controller **路由:** `/api/auth` **認證:** 混合 (部分端點需要認證) ### 3.1 用戶註冊 **端點:** `POST /api/auth/register` **認證:** 不需要 **請求體:** ```json { "Username": "john_doe", "Email": "john@example.com", "Password": "securePassword123" } ``` **回應:** ```json { "Success": true, "Data": { "Token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "User": { "Id": "123e4567-e89b-12d3-a456-426614174000", "Username": "john_doe", "Email": "john@example.com", "DisplayName": "john_doe", "AvatarUrl": null, "SubscriptionType": "free" } } } ``` **驗證規則:** - Username: 3-50字符 - Email: 有效的電子郵件格式 - Password: 至少8字符 ### 3.2 用戶登入 **端點:** `POST /api/auth/login` **認證:** 不需要 **請求體:** ```json { "Email": "john@example.com", "Password": "securePassword123" } ``` **回應:** 與註冊相同格式 ### 3.3 獲取用戶資料 **端點:** `GET /api/auth/profile` **認證:** 需要 **回應:** ```json { "Success": true, "Data": { "Id": "123e4567-e89b-12d3-a456-426614174000", "Email": "john@example.com", "DisplayName": "John Doe", "AvatarUrl": "https://example.com/avatar.jpg", "SubscriptionType": "premium", "CreatedAt": "2023-10-15T10:30:00Z" } } ``` ### 3.4 更新用戶資料 **端點:** `PUT /api/auth/profile` **認證:** 需要 **請求體:** ```json { "DisplayName": "John Smith", "AvatarUrl": "https://example.com/new-avatar.jpg", "Preferences": { "theme": "dark", "language": "zh-TW" } } ``` ### 3.5 獲取用戶設定 **端點:** `GET /api/auth/settings` **認證:** 需要 **回應:** ```json { "Success": true, "Data": { "DailyGoal": 20, "ReminderTime": "09:00:00", "ReminderEnabled": true, "DifficultyPreference": "balanced", "AutoPlayAudio": true, "ShowPronunciation": true } } ``` ### 3.6 更新用戶設定 **端點:** `PUT /api/auth/settings` **認證:** 需要 **請求體:** ```json { "DailyGoal": 25, "ReminderTime": "08:30:00", "ReminderEnabled": false, "DifficultyPreference": "aggressive", "AutoPlayAudio": false, "ShowPronunciation": true } ``` **設定選項:** - `DailyGoal`: 1-100 - `DifficultyPreference`: "conservative", "balanced", "aggressive" ### 3.7 檢查認證狀態 **端點:** `GET /api/auth/status` **認證:** 需要 **回應:** ```json { "Success": true, "Data": { "IsAuthenticated": true, "UserId": "123e4567-e89b-12d3-a456-426614174000", "Timestamp": "2023-10-15T10:30:00Z" } } ``` --- ## 4. Image Generation Controller **路由:** `/api/imagegeneration` **認證:** 不需要 (暫時) ### 4.1 為詞卡生成圖片 **端點:** `POST /api/imagegeneration/flashcards/{flashcardId}/generate` **功能:** 為指定詞卡生成例句圖片 **路徑參數:** - `flashcardId`: 詞卡ID (GUID) **請求體:** ```json { "Style": "realistic", "Quality": "high", "Size": "1024x1024" } ``` **回應:** ```json { "success": true, "data": { "RequestId": "789e0123-e45f-67g8-h901-234567890abc", "Status": "pending", "EstimatedTime": 30 } } ``` ### 4.2 獲取生成狀態 **端點:** `GET /api/imagegeneration/requests/{requestId}/status` **功能:** 獲取圖片生成請求的狀態 **回應:** ```json { "success": true, "data": { "RequestId": "789e0123-e45f-67g8-h901-234567890abc", "Status": "completed", "Progress": 100, "ImageUrl": "https://storage.dramaling.com/images/generated/abc123.jpg", "CreatedAt": "2023-10-15T10:30:00Z" } } ``` **狀態值:** - `pending`: 等待中 - `processing`: 處理中 - `completed`: 已完成 - `failed`: 失敗 - `cancelled`: 已取消 ### 4.3 取消生成請求 **端點:** `POST /api/imagegeneration/requests/{requestId}/cancel` **功能:** 取消圖片生成請求 **回應:** ```json { "success": true, "message": "Generation cancelled successfully" } ``` ### 4.4 獲取生成歷史 **端點:** `GET /api/imagegeneration/history` **功能:** 獲取用戶的圖片生成歷史 **查詢參數:** - `page`: 頁碼 (預設: 1) - `pageSize`: 每頁數量 (預設: 20) **回應:** ```json { "success": true, "data": { "requests": [], "pagination": { "currentPage": 1, "pageSize": 20, "totalCount": 0, "totalPages": 0 } } } ``` --- ## 5. Options Vocabulary Test Controller **路由:** `/api/test/optionsvocabularytest` **認證:** 不需要 **功能:** 測試和開發用的詞彙選項生成服務 ### 5.1 測試干擾選項生成 **端點:** `GET /api/test/optionsvocabularytest/generate-distractors` **功能:** 測試為目標詞彙生成干擾選項 **查詢參數:** - `targetWord`: 目標詞彙 (預設: "beautiful") - `cefrLevel`: CEFR等級 (預設: "B1") - `partOfSpeech`: 詞性 (預設: "adjective") - `count`: 生成數量 (預設: 3) **回應:** ```json { "success": true, "targetWord": "beautiful", "cefrLevel": "B1", "partOfSpeech": "adjective", "requestedCount": 3, "actualCount": 3, "distractors": ["pretty", "lovely", "attractive"] } ``` ### 5.2 測試詞彙庫充足性 **端點:** `GET /api/test/optionsvocabularytest/check-sufficiency` **功能:** 檢查特定等級和詞性的詞彙庫是否充足 **查詢參數:** - `cefrLevel`: CEFR等級 (預設: "B1") - `partOfSpeech`: 詞性 (預設: "adjective") **回應:** ```json { "success": true, "cefrLevel": "B1", "partOfSpeech": "adjective", "hasSufficientVocabulary": true } ``` ### 5.3 測試詳細干擾選項生成 **端點:** `GET /api/test/optionsvocabularytest/generate-distractors-detailed` **功能:** 生成帶詳細資訊的干擾選項 **回應:** ```json { "success": true, "targetWord": "beautiful", "cefrLevel": "B1", "partOfSpeech": "adjective", "requestedCount": 3, "actualCount": 3, "distractors": [ { "Word": "pretty", "CEFRLevel": "A2", "PartOfSpeech": "adjective", "WordLength": 6, "IsActive": true } ] } ``` ### 5.4 測試詞彙庫覆蓋率 **端點:** `GET /api/test/optionsvocabularytest/coverage-test` **功能:** 測試多種詞性和等級的詞彙庫覆蓋率 **回應:** ```json { "success": true, "coverageResults": [ { "cefrLevel": "A1", "partOfSpeech": "noun", "hasSufficientVocabulary": true, "generatedCount": 3, "sampleDistractors": ["cat", "dog", "book"] } ] } ``` --- ## 6. Stats Controller **路由:** `/api/stats` **認證:** 需要 ### 6.1 獲取儀表板統計 **端點:** `GET /api/stats/dashboard` **功能:** 獲取用戶學習儀表板的統計資料 **回應:** ```json { "Success": true, "Data": { "TotalWords": 150, "WordsToday": 12, "StreakDays": 7, "AccuracyPercentage": 85, "TodayReviewCount": 23, "CompletedToday": 12, "RecentWords": [ { "Word": "negotiate", "Translation": "協商", "Status": "learned" } ], "CardSets": [] } } ``` ### 6.2 獲取學習趨勢 **端點:** `GET /api/stats/trends` **功能:** 獲取指定時期的學習趨勢資料 **查詢參數:** - `period`: 時期 ("week", "month", "year", 預設: "week") **回應:** ```json { "Success": true, "Data": { "Period": "week", "DateRange": { "Start": "2023-10-09", "End": "2023-10-15" }, "DailyCounts": [ { "Date": "2023-10-09", "WordsStudied": 15, "WordsCorrect": 12, "StudyTimeSeconds": 1800, "SessionCount": 3, "CardsGenerated": 5, "Accuracy": 80 } ], "Summary": { "TotalWordsStudied": 105, "TotalCorrect": 89, "TotalStudyTimeSeconds": 12600, "TotalSessions": 21, "AverageAccuracy": 85, "AverageDailyWords": 15, "AverageSessionDuration": 600 } } } ``` ### 6.3 獲取詳細統計 **端點:** `GET /api/stats/detailed` **功能:** 獲取詳細的學習統計分析 **回應:** ```json { "Success": true, "Data": { "ByDifficulty": { "A1": 30, "A2": 45, "B1": 50, "B2": 25 }, "ByPartOfSpeech": { "noun": 60, "verb": 40, "adjective": 35, "adverb": 15 }, "MasteryDistribution": { "Mastered": 80, "Learning": 60, "New": 10 }, "LearningCurve": [ { "Date": "2023-10-01", "Accuracy": 75, "Count": 8 } ], "Summary": { "TotalCards": 150, "AverageMastery": 53, "OverallAccuracy": 85 } } } ``` --- ## 7. Flashcards Controller **路由:** `/api/flashcards` **認證:** 不需要 (暫時) ### 7.1 獲取詞卡列表 **端點:** `GET /api/flashcards` **功能:** 獲取用戶的詞卡列表 **查詢參數:** - `search`: 搜尋關鍵詞 (可選) - `favoritesOnly`: 僅顯示收藏 (預設: false) **回應:** ```json { "Success": true, "Data": { "Flashcards": [ { "Id": "123e4567-e89b-12d3-a456-426614174000", "Word": "beautiful", "Translation": "美麗的", "Definition": "having beauty; pleasing to the senses", "PartOfSpeech": "adjective", "Pronunciation": "/ˈbjuːtɪf(ə)l/", "Example": "She has a beautiful smile.", "ExampleTranslation": "她有美麗的笑容。", "IsFavorite": true, "DifficultyLevel": "A2", "CreatedAt": "2023-10-15T10:30:00Z", "UpdatedAt": "2023-10-15T10:30:00Z" } ], "Count": 1 } } ``` ### 7.2 創建詞卡 **端點:** `POST /api/flashcards` **功能:** 創建新的詞卡 **請求體:** ```json { "Word": "beautiful", "Translation": "美麗的", "Definition": "having beauty; pleasing to the senses", "PartOfSpeech": "adjective", "Pronunciation": "/ˈbjuːtɪf(ə)l/", "Example": "She has a beautiful smile.", "ExampleTranslation": "她有美麗的笑容。" } ``` **回應:** ```json { "Success": true, "Data": { "Id": "123e4567-e89b-12d3-a456-426614174000", "Word": "beautiful", "Translation": "美麗的", "DifficultyLevel": "A2", "CreatedAt": "2023-10-15T10:30:00Z" }, "Message": "詞卡創建成功" } ``` ### 7.3 獲取單個詞卡 **端點:** `GET /api/flashcards/{id}` **功能:** 獲取特定詞卡的詳細資訊 **回應:** ```json { "Success": true, "Data": { "Id": "123e4567-e89b-12d3-a456-426614174000", "Word": "beautiful", "Translation": "美麗的", "Definition": "having beauty; pleasing to the senses", "PartOfSpeech": "adjective", "Pronunciation": "/ˈbjuːtɪf(ə)l/", "Example": "She has a beautiful smile.", "ExampleTranslation": "她有美麗的笑容。", "IsFavorite": true, "DifficultyLevel": "A2", "CreatedAt": "2023-10-15T10:30:00Z", "UpdatedAt": "2023-10-15T10:30:00Z" } } ``` ### 7.4 更新詞卡 **端點:** `PUT /api/flashcards/{id}` **功能:** 更新特定詞卡的資訊 **請求體:** 與創建詞卡相同格式 **回應:** ```json { "Success": true, "Data": { "Id": "123e4567-e89b-12d3-a456-426614174000", "Word": "beautiful", "Translation": "美麗的", "UpdatedAt": "2023-10-15T10:30:00Z" }, "Message": "詞卡更新成功" } ``` ### 7.5 刪除詞卡 **端點:** `DELETE /api/flashcards/{id}` **功能:** 刪除特定詞卡 **回應:** ```json { "Success": true, "Message": "詞卡已刪除" } ``` ### 7.6 切換收藏狀態 **端點:** `POST /api/flashcards/{id}/favorite` **功能:** 切換詞卡的收藏狀態 **回應:** ```json { "Success": true, "IsFavorite": true, "Message": "已加入收藏" } ``` --- ## 請求/回應範例 ### 完整的詞卡創建流程 **1. 創建詞卡** ```bash curl -X POST "https://api.dramaling.com/api/flashcards" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_JWT_TOKEN" \ -d '{ "Word": "accomplish", "Translation": "完成", "Definition": "to finish something successfully", "PartOfSpeech": "verb", "Pronunciation": "/əˈkʌmplɪʃ/", "Example": "She accomplished her goal.", "ExampleTranslation": "她完成了目標。" }' ``` **2. 為詞卡生成圖片** ```bash curl -X POST "https://api.dramaling.com/api/imagegeneration/flashcards/{flashcard_id}/generate" \ -H "Content-Type: application/json" \ -d '{ "Style": "realistic", "Quality": "high", "Size": "1024x1024" }' ``` **3. 生成音頻** ```bash curl -X POST "https://api.dramaling.com/api/audio/tts" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_JWT_TOKEN" \ -d '{ "Text": "She accomplished her goal.", "Accent": "us", "Speed": 1.0 }' ``` ### 用戶註冊和認證流程 **1. 註冊新用戶** ```bash curl -X POST "https://api.dramaling.com/api/auth/register" \ -H "Content-Type: application/json" \ -d '{ "Username": "john_doe", "Email": "john@example.com", "Password": "securePassword123" }' ``` **2. 登入獲取Token** ```bash curl -X POST "https://api.dramaling.com/api/auth/login" \ -H "Content-Type: application/json" \ -d '{ "Email": "john@example.com", "Password": "securePassword123" }' ``` **3. 使用Token獲取用戶資料** ```bash curl -X GET "https://api.dramaling.com/api/auth/profile" \ -H "Authorization: Bearer YOUR_JWT_TOKEN" ``` ## 開發注意事項 ### 暫時的設定 - FlashcardsController 和 ImageGenerationController 目前設為 `[AllowAnonymous]` 用於開發測試 - 使用固定的測試用戶ID: `00000000-0000-0000-0000-000000000001` - 部分統計資料使用模擬數據 ### 生產環境配置 - 需要設定正確的 JWT Secret 環境變數 - 需要配置 Azure Speech Service - 需要設定檔案存儲服務 ### API 版本控制 目前所有 API 都在 v1 版本,未來新功能將透過版本控制進行管理。 ### 錯誤處理最佳實踐 - 始終檢查 `Success` 欄位 - 根據HTTP狀態碼處理不同錯誤類型 - 實現適當的重試機制 - 記錄和監控API錯誤 --- **文檔版本:** 1.0 **最後更新:** 2023-10-15 **聯絡資訊:** api-support@dramaling.com