336 lines
5.2 KiB
Markdown
336 lines
5.2 KiB
Markdown
|
|
# 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`,方便測試和開發。
|
|||
|
|
|