Files
AIclinicalresearch/docs/04-开发规范/02-API设计规范.md
HaHafeng 1b53ab9d52 feat(aia): Complete AIA V2.0 with universal streaming capabilities
Major Changes:
- Add StreamingService with OpenAI Compatible format
- Upgrade Chat component V2 with Ant Design X integration
- Implement AIA module with 12 intelligent agents
- Update API routes to unified /api/v1 prefix
- Update system documentation

Backend (~1300 lines):
- common/streaming: OpenAI Compatible adapter
- modules/aia: 12 agents, conversation service, streaming integration
- Update route versions (RVW, PKB to v1)

Frontend (~3500 lines):
- modules/aia: AgentHub + ChatWorkspace (100% prototype restoration)
- shared/Chat: AIStreamChat, ThinkingBlock, useAIStream Hook
- Update API endpoints to v1

Documentation:
- AIA module status guide
- Universal capabilities catalog
- System overview updates
- All module documentation sync

Tested: Stream response verified, authentication working
Status: AIA V2.0 core completed (85%)
2026-01-14 19:15:01 +08:00

11 KiB
Raw Blame History

API霈曇恣閫<EFBFBD><EFBFBD>

*<EFBFBD><EFBFBD>𧋦嚗? v2.0
<EFBFBD><EFBFBD><EFBFBD>擧凒<EFBFBD><EFBFBD> 2025-11-06
*API憌擧聢嚗? RESTful API
*<EFBFBD><EFBFBD>URL嚗? http://localhost:3001/api/v1
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>凒嚗? 撟喳蝱撅?+ <20><EFBFBD>撅?+ 銝𡁜𦛚璅<E79285>撅?


<EFBFBD><EFBFBD> 霈曇恣<E69B87><EFBFBD>

API First<73><EFBFBD>

  • <EFBFBD>?<3F><>挽霈PI嚗<49><E59A97>摰䂿緵<E482BF><EFBFBD>
  • <EFBFBD>?API<50><EFBFBD><E887AC>𡒊垢<F0A1928A><E59EA2><EFBFBD>蝥?
  • <EFBFBD>?API<50>䀹凒<E480B9><E58792><EFBFBD><E996AC><EFBFBD>祆綉<E7A586>?
  • <EFBFBD>?<3F><><EFBFBD>𡅅PI<50><EFBFBD><E8B3AA><EFBFBD>獢?

RESTful霈曇恣

  • <EFBFBD>?雿輻鍂HTTP<54><EFBFBD>銵函內<E587BD><EFBFBD>嚗𠃑ET<45><54>OST<53><54>UT<55><54>ELETE嚗?
  • <EFBFBD>?URL銵函內韏<E585A7><E99F8F>嚗䔶<E59A97>銵函內<E587BD><EFBFBD>
  • <EFBFBD>?雿輻鍂憭齿㺭<E9BDBF><EFBFBD>銵函內韏<E585A7><E99F8F><EFBFBD><EFBFBD><EFBFBD>
  • <EFBFBD>?撋<><E6928B><EFBFBD><E99F8F>銝滩<E98A9D>餈?撅?
  • <EFBFBD>?雿輻鍂HTTP<54><EFBFBD><E59786><EFBFBD>銵函內蝏𤘪<E89D8F>

<EFBFBD><EFBFBD><EFBFBD><EFBFBD>

  • <EFBFBD>?URL雿輻鍂撠誩<E692A0>摮埈<E691AE><E59F88><EFBFBD>摮㛖泵嚗ɑebab-case嚗?
  • <EFBFBD>?<3F>亥砭<E4BAA5><E7A0AD>㺭雿輻鍂撽澆陸<E6BE86><EFBFBD>嚗ẾamelCase嚗?
  • <EFBFBD>?JSON摮埈挾雿輻鍂撽澆陸<E6BE86><EFBFBD>嚗ẾamelCase嚗?

<EFBFBD>㴓 URL霈曇恣閫<E681A3><E996AB>

頝臬<EFBFBD><EFBFBD><EFBFBD>

/api/v{version}/{module}/{resource}/{id?}/{action?}

蝷箔<E89DB7>嚗?
/api/v1/literature/projects               # <20><EFBFBD><E79195><EFBFBD>讃憿寧𤌍<E5AFA7>𡑒”
/api/v1/literature/projects/123           # <20><EFBFBD>ID=123<32><33><EFBFBD>?
/api/v1/literature/projects/123/export    # 撖澆枂憿寧𤌍嚗<F0A48C8D>𢆡雿頣<E99BBF>

<EFBFBD><EFBFBD><EFBFBD>

<EFBFBD> 頝舐眏<EFBFBD><EFBFBD> 蝷箔<EFBFBD>
霈方<EFBFBD> /auth /api/v1/auth/login
<EFBFBD><EFBFBD> /users /api/v1/users/me
AI<EFBFBD><EFBFBD> /chat /api/v1/chat/conversations
<EFBFBD><EFBFBD>雿? /agents /api/v1/agents
AI<EFBFBD><EFBFBD> /literature /api/v1/literature/projects
<EFBFBD><EFBFBD>摨? /knowledge-bases /api/v1/knowledge-bases
<EFBFBD>唳旿皜<EFBFBD><EFBFBD> /data-cleaning /api/v1/data-cleaning/projects
蝏蠘恣<EFBFBD><EFBFBD><EFBFBD> /analysis /api/v1/analysis/projects
蝏蠘恣撌亙<EFBFBD> /tools /api/v1/tools
蝔蹂辣摰⊥䰻 /review /api/v1/review/tasks
LLM蝵穃<EFBFBD> /llm /api/v1/llm/chat
蝞∠<EFBFBD>蝡? /admin /api/v1/admin/users

<EFBFBD><EFBFBD><EFBFBD><EFBFBD>

*<EFBFBD>?甇<>蝷箔<E89DB7>嚗?

GET    /api/v1/literature/projects          # <20><EFBFBD><E79195>𡑒”
GET    /api/v1/literature/projects/:id      # <20><EFBFBD>霂行<E99C82>
POST   /api/v1/literature/projects          # <20>𥕦遣
PUT    /api/v1/literature/projects/:id      # <20>湔鰵
DELETE /api/v1/literature/projects/:id      # <20>𣳇膄

GET    /api/v1/literature/projects/:id/items              # <20><EFBFBD>憿寧𤌍銝讠<E98A9D><E8AEA0><EFBFBD>讃
POST   /api/v1/literature/projects/:id/items/import       # 撖澆<E69296><E6BE86><EFBFBD>讃
POST   /api/v1/literature/projects/:id/screening/execute  # <20><EFBFBD>蝑偦<E89D91>?

*<EFBFBD>?<3F>躰秤蝷箔<E89DB7>嚗?

POST /api/v1/literature/getProjects          # 雿輻鍂<E8BCBB><EFBFBD>
POST /api/v1/literature/createProject        # 雿輻鍂<E8BCBB><EFBFBD>
GET  /api/v1/literature/project              # <20>閙㺭敶<E695B6>
GET  /api/v1/literatureProjectList           # 撽澆陸<E6BE86><EFBFBD>

<EFBFBD>圲 HTTP<54><EFBFBD><EFBFBD><E996AB>

<EFBFBD><EFBFBD>雿輻鍂

<EFBFBD><EFBFBD> <EFBFBD><EFBFBD>? <EFBFBD>臬炏撟<EFBFBD><EFBFBD> <EFBFBD>臬炏摰匧<EFBFBD>
GET <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>? <EFBFBD>?
POST <EFBFBD>𥕦遣韏<EFBFBD><EFBFBD> <EFBFBD>? <EFBFBD>?
PUT 摰峕㟲<EFBFBD>湔鰵韏<EFBFBD><EFBFBD> <EFBFBD>? <EFBFBD>?
PATCH <EFBFBD><EFBFBD><EFBFBD>湔鰵韏<EFBFBD><EFBFBD> <EFBFBD>? <EFBFBD>?
DELETE <EFBFBD>𣳇膄韏<EFBFBD><EFBFBD> <EFBFBD>? <EFBFBD>?

<EFBFBD><EFBFBD>蝷箔<EFBFBD>

# <20><EFBFBD><EFBFBD><E99F8F><EFBFBD>𡑒”
GET /api/v1/literature/projects

# <20><EFBFBD><E79195>蓥葵韏<E891B5><E99F8F>
GET /api/v1/literature/projects/123

# <20>𥕦遣韏<E981A3><E99F8F>
POST /api/v1/literature/projects
Content-Type: application/json
{ "name": "<22>圈★<E59C88>?, "description": "..." }

# 摰峕㟲<E5B395>湔鰵韏<E9B0B5><E99F8F><EFBFBD><E59A97><EFBFBD><EFBFBD>畾蛛<E795BE>
PUT /api/v1/literature/projects/123
Content-Type: application/json
{ "name": "<22>湔鰵", "description": "..." }

# <20><EFBFBD><E585B8>湔鰵韏<E9B0B5><E99F8F><EFBFBD><E59A97><EFBFBD><EFBFBD><EFBFBD>畾蛛<E795BE>
PATCH /api/v1/literature/projects/123
Content-Type: application/json
{ "name": "<22>芣凒<E88AA3><EFBFBD>蝘? }

# <20>𣳇膄韏<E88684><E99F8F>
DELETE /api/v1/literature/projects/123

<EFBFBD><EFBFBD> <20><EFBFBD><E59786><EFBFBD><EFBFBD><E996AB>

<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>

<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> 雿輻鍂<EFBFBD>箸艶
200 OK <EFBFBD>𣂼<EFBFBD>餈𥪜<EFBFBD><EFBFBD>唳旿
201 Created <EFBFBD>𣂼<EFBFBD><EFBFBD>𥕦遣韏<EFBFBD><EFBFBD>
204 No Content <EFBFBD>𣂼<EFBFBD><EFBFBD><EFBFBD>餈𥪜<EFBFBD><EFBFBD>唳旿嚗<EFBFBD><EFBFBD><EFBFBD>𣳇膄嚗?
400 Bad Request 霂瑟<EFBFBD><EFBFBD><EFBFBD><EFBFBD>躰秤
401 Unauthorized <EFBFBD>芾恕霂<EFBFBD><EFBFBD>瘝⊥<EFBFBD>Token<EFBFBD>巁oken餈<EFBFBD><EFBFBD>嚗?
403 Forbidden <EFBFBD><EFBFBD><EFBFBD><EFBFBD>撌脰恕霂<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>銝滩雲嚗?
404 Not Found <EFBFBD><EFBFBD>銝滚<EFBFBD><EFBFBD>?
409 Conflict <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𥕦遣嚗?
422 Unprocessable Entity 霂凋<EFBFBD><EFBFBD>躰秤嚗<EFBFBD><EFBFBD>撉諹<EFBFBD>憭梯揖嚗?
429 Too Many Requests 霂瑟<EFBFBD><EFBFBD><EFBFBD>憸𤑳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
500 Internal Server Error <EFBFBD>滚𦛚<EFBFBD><EFBFBD>霂?

<EFBFBD><EFBFBD><EFBFBD><EFBFBD>雿輻鍂蝷箔<EFBFBD>

// 200 OK - <20>𣂼<EFBFBD><F0A382BC><EFBFBD><E79195>唳旿
res.status(200).json({ success: true, data: projects });

// 201 Created - <20>𣂼<EFBFBD><F0A382BC>𥕦遣韏<E981A3><E99F8F>
res.status(201).json({ success: true, data: newProject });

// 204 No Content - <20>𣂼<EFBFBD><F0A382BC>𣳇膄嚗<E88684><E59A97><EFBFBD><EFBFBD>捆餈𥪜<E9A488>嚗?
res.status(204).send();

// 400 Bad Request - <20><><EFBFBD>躰秤
res.status(400).json({ 
  success: false, 
  error: { code: 'INVALID_PARAMS', message: '<27><><EFBFBD>躰秤' } 
});

// 401 Unauthorized - <20>芾恕霂?
res.status(401).json({ 
  success: false, 
  error: { code: 'UNAUTHORIZED', message: '霂瑕<E99C82><E79195><EFBFBD>' } 
});

// 403 Forbidden - <20><EFBFBD><E4ADBE>?
res.status(403).json({ 
  success: false, 
  error: { code: 'FORBIDDEN', message: '<27><EFBFBD>霈輸䔮' } 
});

// 404 Not Found - 韏<><E99F8F>銝滚<E98A9D><E6BB9A>?
res.status(404).json({ 
  success: false, 
  error: { code: 'NOT_FOUND', message: '韏<><E99F8F>銝滚<E98A9D><E6BB9A>? } 
});

// 422 Unprocessable Entity - 撉諹<E69289>憭梯揖
res.status(422).json({ 
  success: false, 
  error: { 
    code: 'VALIDATION_ERROR', 
    message: '<EFBFBD><EFBFBD>㺭撉諹<EFBFBD>憭梯揖',
    details: [...]
  } 
});

<EFBFBD><EFBFBD> <20><EFBFBD><E6BB9A><EFBFBD><EFBFBD><E996AB>

蝏煺<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 潃?敹<><EFBFBD><EFBFBD>

*<EFBFBD>𣂼<EFBFBD><EFBFBD><EFBFBD>嚗?

{
  "success": true,
  "data": {
    // 摰鮋<E691B0><E9AE8B>唳旿
  },
  "message": "<22><EFBFBD><E6BBA2>𣂼<EFBFBD>"
}

*<EFBFBD>躰秤<EFBFBD><EFBFBD>嚗?

{
  "success": false,
  "error": {
    "code": "ERROR_CODE",
    "message": "<22>躰秤靽⊥<E99DBD>",
    "details": [...]  // <20><EFBFBD><EFBFBD>霂衣<E99C82><E8A1A3>躰秤靽⊥<E99DBD>
  }
}

<EFBFBD>𡑒”<EFBFBD>唳旿<EFBFBD><EFBFBD>

{
  "success": true,
  "data": {
    "items": [
      { "id": 1, "name": "憿寧𤌍1" },
      { "id": 2, "name": "憿寧𤌍2" }
    ],
    "pagination": {
      "page": 1,
      "pageSize": 10,
      "total": 100,
      "totalPages": 10,
      "hasNext": true,
      "hasPrev": false
    }
  },
  "message": "<22><EFBFBD><E79195>𣂼<EFBFBD>"
}

撉諹<EFBFBD><EFBFBD>躰秤<EFBFBD><EFBFBD>

{
  "success": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "<22><>㺭撉諹<E69289>憭梯揖",
    "details": [
      {
        "field": "email",
        "message": "<22>桃拳<E6A183><EFBFBD>銝齿迤蝖?
      },
      {
        "field": "password",
        "message": "<EFBFBD><EFBFBD><EFBFBD>踹漲敹<EFBFBD>◆憭找<EFBFBD>6雿?
      }
    ]
  }
}

<EFBFBD><EFBFBD> 霈方<E99C88>銝擧<E98A9D><E693A7><EFBFBD><EFBFBD><EFBFBD>?

JWT霈方<EFBFBD>

1. <20><EFBFBD><E9A483><EFBFBD>Token

POST /api/v1/auth/login
Content-Type: application/json

{
  "email": "user@example.com",
  "password": "password123"
}

# Response
{
  "success": true,
  "data": {
    "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    "expiresIn": 604800,  // 7憭抬<E686AD>蝘𡜐<E89D98>
    "user": {
      "id": 123,
      "email": "user@example.com",
      "name": "撘牐<E69298>",
      "role": "user"
    }
  }
}

2. 雿輻鍂Token霈輸䔮API

GET /api/v1/literature/projects
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

3. Token餈<6E><E9A488><EFBFBD><E686AD>

# Token餈<6E><E9A488>嚗諹<E59A97><E8ABB9>?01
{
  "success": false,
  "error": {
    "code": "TOKEN_EXPIRED",
    "message": "Token撌脰<E6928C><E884B0><EFBFBD><EFBFBD>霂琿<E99C82><E790BF>啁蒈敶?
  }
}

# 雿輻鍂refreshToken<65>瑟鰵
POST /api/v1/auth/refresh
Content-Type: application/json

{
  "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}

<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>

蝡舐<EFBFBD>蝐餃<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>恕霂? 閫坿𠧧閬<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>蝡舐<EFBFBD> <EFBFBD>? <EFBFBD>?
<EFBFBD><EFBFBD>蝡舐<EFBFBD> <EFBFBD>? user
蝞∠<EFBFBD>蝡舐<EFBFBD> <EFBFBD>? admin

*蝷箔<EFBFBD>嚗?

// <20><EFBFBD>蝡舐<E89DA1><EFBFBD><E59A97><EFBFBD><EFBFBD>霈方<E99C88>嚗?
POST /api/v1/auth/login
POST /api/v1/auth/register

// <20><EFBFBD>蝡舐<E89DA1><EFBFBD><E59A97><EFBFBD>恕霂<E68195><E99C82>user閫坿𠧧嚗?
GET  /api/v1/literature/projects
POST /api/v1/literature/projects

// 蝞∠<E89D9E>蝡舐<E89DA1><EFBFBD><E59A97><EFBFBD>恕霂<E68195><E99C82>admin閫坿𠧧嚗?
GET  /api/v1/admin/users
POST /api/v1/admin/users/:id/disable

<EFBFBD><EFBFBD> <20><>△閫<E296B3><E996AB>

霂瑟<EFBFBD><EFBFBD><EFBFBD>

GET /api/v1/literature/projects?page=1&pageSize=20&sortBy=createdAt&sortOrder=desc

Query<72><79>㺭嚗?
- page: 憿萇<E686BF><EFBFBD><E59A97>霈?嚗?
- pageSize: 瘥誯△<E8AAAF><EFBFBD><EFBFBD><E59A97>霈?0嚗峕<E59A97>憭?00嚗?
- sortBy: <20><EFBFBD>摮埈挾嚗<E68CBE><E59A97>霈勺reatedAt嚗?
- sortOrder: <20><EFBFBD><E98DA6><EFBFBD>嚗Òsc/desc嚗屸<E59A97>霈千esc嚗?

<EFBFBD><EFBFBD><EFBFBD><EFBFBD>

{
  "success": true,
  "data": {
    "items": [...],
    "pagination": {
      "page": 1,
      "pageSize": 20,
      "total": 100,
      "totalPages": 5,
      "hasNext": true,
      "hasPrev": false
    }
  }
}

<EFBFBD><EFBFBD> 蝑偦<E89D91><EFBFBD><E58A90>𦦵揣閫<E68FA3><E996AB>

蝑偦<EFBFBD><EFBFBD><EFBFBD>?

GET /api/v1/literature/projects?status=active&keyword=撉刻捶<E588BB>𤩺𠹭

Query<72><79>㺭嚗?
- status: <20><EFBFBD><E59786><EFBFBD><EFBFBD><EFBFBD>active/inactive嚗?
- keyword: <20>喲睸霂齿<E99C82><E89D9D><EFBD87>𦦵揣name<6D>𩥇escription摮埈挾嚗?
- userId: <20><EFBFBD>ID蝑偦<E89D91><EFBFBD>蝞∠<E89D9E>蝡荔<E89DA1>
- startDate/endDate: <20><EFBFBD><E4BAA4><EFBFBD>凒蝑偦<E89D91>?

<EFBFBD>𦦵揣<EFBFBD><EFBFBD>

{
  "success": true,
  "data": {
    "items": [...],
    "pagination": {...},
    "filters": {
      "status": "active",
      "keyword": "撉刻捶<E588BB>𤩺𠹭"
    }
  }
}

<EFBFBD>𩤃<EFBFBD> <20>躰秤<E8BAB0><E7A7A4>挽霈?

<EFBFBD><EFBFBD><EFBFBD><EFBFBD>躰秤<EFBFBD>?

<EFBFBD>躰秤<EFBFBD>? HTTP<EFBFBD><EFBFBD>? 霂湔<EFBFBD>
VALIDATION_ERROR 422 <EFBFBD><EFBFBD>㺭撉諹<EFBFBD>憭梯揖
UNAUTHORIZED 401 <EFBFBD>芾恕霂?
TOKEN_EXPIRED 401 Token餈<EFBFBD><EFBFBD>
FORBIDDEN 403 <EFBFBD><EFBFBD><EFBFBD>?
NOT_FOUND 404 <EFBFBD><EFBFBD>銝滚<EFBFBD><EFBFBD>?
ALREADY_EXISTS 409 <EFBFBD><EFBFBD>撌脣<EFBFBD><EFBFBD>?
QUOTA_EXCEEDED 429 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
INTERNAL_ERROR 500 <EFBFBD>滚𦛚<EFBFBD><EFBFBD>霂?

銝𡁜𦛚<EFBFBD>躰秤<EFBFBD>?

// 璅<E79285><E288AA><EFBFBD><E5ADB5>躰秤<E8BAB0><E7A7A4><EFBFBD><EFBFBD><EFBFBD><E6BBA8><EFBFBD>嚗?
ASL_IMPORT_FAILED          // AI<41><49>讃嚗𡁜紡<F0A1819C>亙仃韐?
ASL_SCREENING_IN_PROGRESS  // AI<41><49>讃嚗𡁶<E59A97><F0A181B6><EFBFBD>銵䔶葉
PKB_QUOTA_EXCEEDED         // <20><EFBFBD>摨橒<E691A8><E6A992><EFBFBD><EFBFBD><E9A09E>
LLM_QUOTA_EXCEEDED         // LLM嚗𡁻<E59A97>憸肽<E686B8><E882BD>?

<EFBFBD><EFBFBD> <20><EFBFBD>隡睃<E99AA1><EFBFBD><E996AB>

1. <20><>△敹<E296B3>

<EFBFBD><EFBFBD><EFBFBD><EFBFBD>銵冽𦻖<EFBFBD><EFBFBD><EFBFBD>憿餅𣈲<EFBFBD><EFBFBD><EFBFBD>憿蛛<EFBFBD>
- 暺䁅恕pageSize=10
- <20><>憭吠ageSize=100
- 蝳<>迫銝<E8BFAB>甈⊥<E79488><EFBFBD><E689AF>𧼮<EFBFBD><F0A7BCAE>冽㺭<E586BD>?

2. 摮埈挾餈<E68CBE>

GET /api/v1/users/me?fields=id,name,email

<0A><EFBFBD><E88ABE><EFBFBD><EFBFBD><E996AC>摮埈挾嚗<E68CBE><E59A97>撠烐㺭<E78390><EFBFBD>颲?

3. 蝻枏<E89DBB>蝑𣇉裦

# 霈曄蔭蝻枏<E89DBB>憭?
Cache-Control: public, max-age=300

# 雿輻鍂ETag
ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"
If-None-Match: "33a64df551425fcc55e4d42a148795d9f25f89d4"
# 餈𥪜<E9A488>304 Not Modified

<EFBFBD>?璉<><E79289><EFBFBD><E4BAA4>?

霈曇恣<EFBFBD>蚊PI<EFBFBD><EFBFBD>憿餅<EFBFBD><EFBFBD><EFBFBD>

  • URL蝚血<EFBFBD>RESTful閫<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>霂?憭齿㺭嚗?
  • 雿輻鍂甇<EFBFBD><EFBFBD><EFBFBD>TTP<EFBFBD><EFBFBD>嚗𠃑ET/POST/PUT/DELETE嚗?
  • 雿輻鍂甇<EFBFBD><EFBFBD><EFBFBD>TTP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
  • <EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝚血<EFBFBD>蝏煺<EFBFBD><EFBFBD><EFBFBD>嚗ìuccess + data/error嚗?
  • <EFBFBD><EFBFBD><EFBFBD>恕霂<EFBFBD><EFBFBD><EFBFBD>亙藁璉<EFBFBD><EFBFBD>仔WT Token
  • <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>亙藁璉<EFBFBD><EFBFBD>亦鍂<EFBFBD><EFBFBD><EFBFBD>?
  • <EFBFBD>𡑒”<EFBFBD>亙藁<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
  • <EFBFBD>𡑒”<EFBFBD>亙藁<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
  • <EFBFBD>躰秤<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𡒊<EFBFBD><EFBFBD><EFBFBD>霂舐<EFBFBD><EFBFBD><EFBFBD>霂臭縑<EFBFBD>?
  • <EFBFBD><EFBFBD><EFBFBD>𡅅PI<EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹝霂湔<EFBFBD>

<EFBFBD><EFBFBD> <20><EFBFBD><E8A9A8><EFBFBD>

*<EFBFBD><EFBFBD>嚗?

*璅⊥踎嚗?

<EFBFBD><EFBFBD><EFBFBD>𡑒挽霈∴<EFBFBD>

  • [撟喳蝱<E596B3><EFBFBD><EFBFBD>(../01-撟喳蝱<E596B3><EFBFBD>撅?README.md)
  • [<5B>𡁶鍂<F0A181B6><EFBFBD><EFBFBD>(../02-<2D>𡁶鍂<F0A181B6><EFBFBD>撅?README.md)
  • [銝𡁜𦛚璅<E79285><EFBFBD>(../03-銝𡁜𦛚璅<E79285>/README.md)

<EFBFBD><EFBFBD><EFBFBD>擧凒<EFBFBD><EFBFBD> 2025-11-06
蝏湔擪鈭綽<EFBFBD> <20><><EFBFBD>舀沲<E88880><E6B2B2><EFBFBD>
*<EFBFBD><EFBFBD>𧋦嚗? v2.0