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%)
11 KiB
11 KiB
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>閙㺭敶W<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>蝝g<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>嚗?
- API頝舐眏<EFBFBD>餉<EFBFBD> 潃?<3F>亦<EFBFBD><E4BAA6><EFBFBD><EFBFBD>𡅅PI蝡舐<E89DA1>
*璅⊥踎嚗?
<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