pet_data/docs/API_STRUCTURE.md

336 lines
5.2 KiB
Markdown
Raw Normal View History

2025-11-23 18:03:56 +00:00
# API 端點結構設計
本文檔定義了虛擬寵物系統的 API 端點結構,用於前端與後端整合。
## 基礎配置
- **Base URL**: `http://localhost:3000/api` (開發環境)
- **認證**: 未來可加入 JWT Token
- **資料格式**: JSON
## API 端點列表
### 1. 寵物狀態相關
#### GET `/pet/state`
獲取當前寵物狀態
**Response:**
```json
{
"speciesId": "tinyTigerCat",
"stage": "baby",
"hunger": 80.5,
"happiness": 60.2,
"health": 100,
"weight": 500,
"ageSeconds": 120,
"poopCount": 2,
"str": 5,
"int": 3,
"dex": 8,
"luck": 15,
"isSleeping": false,
"isSick": false,
"isDead": false,
"currentDeityId": "mazu",
"deityFavors": {
"mazu": 20,
"earthgod": 10,
"yuelao": 0,
"wenchang": 0,
"guanyin": 5
},
"dailyPrayerCount": 1,
"destiny": null,
"buffs": [],
"inventory": [],
"generation": 1,
"lastTickTime": 1234567890
}
```
#### POST `/pet/update`
更新寵物狀態(部分更新)
**Request Body:**
```json
{
"hunger": 85,
"happiness": 70
}
```
**Response:**
```json
{
"success": true,
"data": { /* 完整狀態物件 */ }
}
```
#### POST `/pet/save`
儲存完整寵物狀態
**Request Body:**
```json
{ /* 完整 PetState 物件 */ }
```
**Response:**
```json
{
"success": true,
"message": "狀態已儲存"
}
```
---
### 2. 事件系統相關
#### GET `/events/list`
獲取所有事件配置
**Response:**
```json
[
{
"id": "lucky_find",
"type": "good",
"weight": 0.3,
"condition": "function_string_or_null",
"effects": [
{
"type": "modifyStats",
"payload": { "happiness": 10, "luck": 5 }
}
]
}
]
```
#### POST `/events/trigger`
觸發事件
**Request Body:**
```json
{
"eventId": "lucky_find",
"petState": { /* 當前狀態 */ }
}
```
**Response:**
```json
{
"success": true,
"eventId": "lucky_find",
"effects": [
{
"type": "modifyStats",
"updates": { "happiness": 10, "luck": 5 }
}
]
}
```
---
### 3. Buff 系統相關
#### POST `/buffs/apply`
應用 Buff
**Request Body:**
```json
{
"id": "fortune",
"name": "福運加持",
"durationTicks": 5,
"percent": { "luck": 0.2 }
}
```
**Response:**
```json
{
"success": true,
"buff": { /* Buff 物件 */ }
}
```
---
### 4. 神明系統相關
#### GET `/deities/list`
獲取所有神明資料
**Response:**
```json
[
{
"id": "mazu",
"name": "媽祖",
"personality": "溫柔守護",
"buffs": {
"gameSuccessRate": 0.1,
"sicknessReduction": 0.15
},
"buffDescriptions": ["小遊戲 +10%", "生病機率 -15%"],
"dialogues": ["好孩子,媽祖保佑你平安喔"],
"icon": "deity-mazu"
}
]
```
#### POST `/deities/pray`
祈福
**Request Body:**
```json
{
"deityId": "mazu",
"petState": { /* 當前狀態 */ }
}
```
**Response:**
```json
{
"success": true,
"favorIncrease": 5,
"newFavor": 25,
"message": "祈福成功"
}
```
---
### 5. 籤詩系統相關
#### POST `/fortune/draw`
抽籤
**Request Body:**
```json
{
"deityId": "guanyin" // 可選
}
```
**Response:**
```json
{
"success": true,
"lot": {
"id": "1",
"grade": "上上",
"palace": "子宮",
"poem1": "天開地闢萬物全 人力回天事事全",
"poem2": "若問前途與運泰 唯有善德鬼神欽",
"meaning": "大吉大利,萬事亨通",
"explanation": "此籤象徵開天闢地之意,預示大吉",
"oracle": "家宅:平安、事業:順利",
"story": "宋太祖黃袍加身"
},
"buff": {
"id": "fortune_blessing",
"name": "上上籤祝福",
"durationTicks": 20,
"percent": { "luck": 0.3, "dropRate": 0.25 }
}
}
```
---
### 6. 道具系統相關
#### GET `/items/list`
獲取所有道具
**Response:**
```json
[
{
"id": "cookie",
"name": "幸運餅乾",
"type": "consumable",
"effects": {
"modifyStats": { "hunger": 20, "happiness": 10 }
},
"description": "增加飢餓和快樂"
}
]
```
#### POST `/items/use`
使用道具
**Request Body:**
```json
{
"itemId": "cookie",
"count": 1
}
```
**Response:**
```json
{
"success": true,
"itemId": "cookie",
"count": 1,
"effects": {
"modifyStats": { "hunger": 20, "happiness": 10 }
}
}
```
---
## 錯誤處理
所有 API 錯誤應返回以下格式:
```json
{
"success": false,
"error": {
"code": "ERROR_CODE",
"message": "錯誤訊息"
}
}
```
常見錯誤碼:
- `PET_NOT_FOUND`: 寵物不存在
- `INVALID_STATE`: 狀態無效
- `EVENT_CONDITION_FAILED`: 事件條件不滿足
- `DAILY_LIMIT_EXCEEDED`: 每日限制已達上限
- `ITEM_NOT_FOUND`: 道具不存在
- `INSUFFICIENT_ITEM`: 道具數量不足
---
## 實作建議
### 後端實作
1. 使用 RESTful API 設計
2. 實作資料驗證Joi/Yup
3. 加入認證中介層(未來)
4. 實作速率限制rate limiting
5. 使用資料庫儲存狀態PostgreSQL/MongoDB
### 前端整合
1. 使用 `ApiService` 類別統一管理 API 呼叫
2. 實作錯誤處理和重試機制
3. 使用狀態管理Pinia/Vuex同步狀態
4. 實作樂觀更新Optimistic Updates
### Mock 模式
開發階段可使用 `ApiService` 的 mock 模式,所有資料儲存在 `localStorage`,方便測試和開發。