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%)
8.4 KiB
[璅∪<E79285><E288AA>滨妍] - API霈曇恣
*<EFBFBD>箇<EFBFBD>頝臬<EFBFBD>嚗? `/api/v1/璅∪<E79285><E288AA>崾
*蝡舐<EFBFBD><EFBFBD>圈<EFBFBD>嚗? X銝? *霈方<EFBFBD>閬<EFBFBD><EFBFBD>嚗? JWT Token
<EFBFBD><EFBFBD><EFBFBD>擧凒<EFBFBD>堆<EFBFBD> YYYY-MM-DD
<EFBFBD><EFBFBD> API璁<49><E79281>
| 蝡舐<EFBFBD> | <EFBFBD>寞<EFBFBD> | 霂湔<EFBFBD> | 霈方<EFBFBD> |
|---|---|---|---|
/api/v1/xxx/resources |
GET | <EFBFBD>瑕<EFBFBD>韏<EFBFBD><EFBFBD><EFBFBD>𡑒” | <EFBFBD>? |
/api/v1/xxx/resources/:id |
GET | <EFBFBD>瑕<EFBFBD>韏<EFBFBD><EFBFBD>霂行<EFBFBD> | <EFBFBD>? |
/api/v1/xxx/resources |
POST | <EFBFBD>𥕦遣韏<EFBFBD><EFBFBD> | <EFBFBD>? |
/api/v1/xxx/resources/:id |
PUT | <EFBFBD>湔鰵韏<EFBFBD><EFBFBD> | <EFBFBD>? |
/api/v1/xxx/resources/:id |
DELETE | <EFBFBD>𣳇膄韏<EFBFBD><EFBFBD> | <EFBFBD>? |
<EFBFBD><EFBFBD> API霂衣<E99C82>霈曇恣
1. <20>瑕<EFBFBD>韏<EFBFBD><E99F8F><EFBFBD>𡑒”
*蝡舐<EFBFBD>嚗? GET /api/v1/xxx/resources
<EFBFBD>券<EFBFBD>䈑<EFBFBD> <20>瑕<EFBFBD>敶枏<E695B6><E69E8F>冽<EFBFBD><E586BD><EFBFBD><EFBFBD>皞𣂼<E79A9E>銵剁<E98AB5><E58981><EFBFBD>△嚗?
*霂瑟<EFBFBD><EFBFBD><EFBFBD>㺭嚗?
*Query<EFBFBD><EFBFBD>㺭嚗?
{
page?: number; // 憿萇<E686BF>嚗屸<E59A97>霈?
pageSize?: number; // 瘥誯△<E8AAAF>圈<EFBFBD>嚗屸<E59A97>霈?0嚗峕<E59A97>憭?00
status?: string; // 蝑偦<E89D91>㚁<EFBFBD><E39A81>嗆<EFBFBD><E59786><EFBFBD>active/inactive嚗?
keyword?: string; // <20>𦦵揣<F0A6A6B5>喲睸霂?
sortBy?: string; // <20>鍦<EFBFBD>摮埈挾嚗ẾreatedAt/updatedAt嚗?
sortOrder?: 'asc' | 'desc'; // <20>鍦<EFBFBD><E98DA6>孵<EFBFBD>嚗屸<E59A97>霈千esc
}
*霂瑟<EFBFBD>蝷箔<EFBFBD>嚗?
GET /api/v1/xxx/resources?page=1&pageSize=10&status=active
Authorization: Bearer <token>
*<EFBFBD>𣂼<EFBFBD><EFBFBD>滚<EFBFBD>嚗? 200 OK
{
"success": true,
"data": {
"items": [
{
"id": 1,
"userId": 123,
"fieldName": "蝷箔<E89DB7>",
"description": "<22>讛膩",
"status": "active",
"createdAt": "2025-11-06T10:00:00.000Z",
"updatedAt": "2025-11-06T10:00:00.000Z"
}
],
"pagination": {
"page": 1,
"pageSize": 10,
"total": 100,
"totalPages": 10
}
},
"message": "<22>瑕<EFBFBD><E79195>𣂼<EFBFBD>"
}
*<EFBFBD>躰秤<EFBFBD>滚<EFBFBD>嚗?
// 401 Unauthorized
{
"success": false,
"error": {
"code": "UNAUTHORIZED",
"message": "<22>芣<EFBFBD><E88AA3><EFBFBD><EFBFBD>霂瑕<E99C82><E79195>餃<EFBFBD>"
}
}
// 400 Bad Request
{
"success": false,
"error": {
"code": "INVALID_PARAMS",
"message": "<22><>㺭<EFBFBD>躰秤",
"details": [
{ "field": "pageSize", "message": "<22><>憭找<E686AD><E689BE>質<EFBFBD>餈?00" }
]
}
}
2. <20>瑕<EFBFBD>韏<EFBFBD><E99F8F>霂行<E99C82>
*蝡舐<EFBFBD>嚗? GET /api/v1/xxx/resources/:id
<EFBFBD>券<EFBFBD>䈑<EFBFBD> <20>瑕<EFBFBD><E79195><EFBFBD><EFBFBD>韏<EFBFBD><E99F8F><EFBFBD><EFBFBD>祕蝏<E7A595>縑<EFBFBD>?
*頝臬<EFBFBD><EFBFBD><EFBFBD>㺭嚗?
id(敹<>‵): 韏<><E99F8F>ID
*霂瑟<EFBFBD>蝷箔<EFBFBD>嚗?
GET /api/v1/xxx/resources/123
Authorization: Bearer <token>
*<EFBFBD>𣂼<EFBFBD><EFBFBD>滚<EFBFBD>嚗? 200 OK
{
"success": true,
"data": {
"id": 123,
"userId": 456,
"fieldName": "蝷箔<E89DB7>",
"description": "霂衣<E99C82><E8A1A3>讛膩",
"status": "active",
"createdAt": "2025-11-06T10:00:00.000Z",
"updatedAt": "2025-11-06T10:00:00.000Z",
// 憸嘥<E686B8><E598A5><EFBFBD><EFBFBD><EFBFBD>娍㺭<E5A88D>?
"user": {
"id": 456,
"name": "<22>冽<EFBFBD><E586BD>?
}
},
"message": "<EFBFBD>瑕<EFBFBD><EFBFBD>𣂼<EFBFBD>"
}
*<EFBFBD>躰秤<EFBFBD>滚<EFBFBD>嚗?
// 404 Not Found
{
"success": false,
"error": {
"code": "NOT_FOUND",
"message": "韏<><E99F8F>銝滚<E98A9D><E6BB9A>?
}
}
// 403 Forbidden
{
"success": false,
"error": {
"code": "FORBIDDEN",
"message": "<EFBFBD>䭾<EFBFBD>霈輸䔮甇方<EFBFBD>皞?
}
}
3. <20>𥕦遣韏<E981A3><E99F8F>
*蝡舐<EFBFBD>嚗? POST /api/v1/xxx/resources
<EFBFBD>券<EFBFBD>䈑<EFBFBD> <20>𥕦遣<F0A595A6>啗<EFBFBD>皞?
霂瑟<EFBFBD>雿橒<EFBFBD>
{
"fieldName": "韏<><E99F8F><EFBFBD>滨妍", // 敹<>‵嚗屸鵭摨?-200
"description": "<22>讛膩", // <20>舫<EFBFBD>㚁<EFBFBD><E39A81><EFBFBD>憭?000摮?
"status": "active" // <20>舫<EFBFBD>㚁<EFBFBD>暺䁅恕active
}
*撉諹<EFBFBD>閫<EFBFBD><EFBFBD>嚗?
fieldName: 敹<>‵嚗?-200摮㛖泵嚗䔶<E59A97><E494B6>賢<EFBFBD><E8B3A2>怎鸌畾𠰴<E795BE>蝚?description: <20>舫<EFBFBD>㚁<EFBFBD><E39A81><EFBFBD>憭?000摮㛖泵status: <20>舫<EFBFBD>㚁<EFBFBD><E39A81>㗇<EFBFBD><E39787>潘<EFBFBD>active, inactive
*霂瑟<EFBFBD>蝷箔<EFBFBD>嚗?
POST /api/v1/xxx/resources
Authorization: Bearer <token>
Content-Type: application/json
{
"fieldName": "<22>啗<EFBFBD>皞?,
"description": "餈蹱糓銝<EFBFBD>銝芣鰵韏<EFBFBD><EFBFBD>"
}
*<EFBFBD>𣂼<EFBFBD><EFBFBD>滚<EFBFBD>嚗? 201 Created
{
"success": true,
"data": {
"id": 124,
"userId": 456,
"fieldName": "<22>啗<EFBFBD>皞?,
"description": "餈蹱糓銝<EFBFBD>銝芣鰵韏<EFBFBD><EFBFBD>",
"status": "active",
"createdAt": "2025-11-06T10:00:00.000Z",
"updatedAt": "2025-11-06T10:00:00.000Z"
},
"message": "<EFBFBD>𥕦遣<EFBFBD>𣂼<EFBFBD>"
}
*<EFBFBD>躰秤<EFBFBD>滚<EFBFBD>嚗?
// 422 Unprocessable Entity
{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "<22><>㺭撉諹<E69289>憭梯揖",
"details": [
{ "field": "fieldName", "message": "摮埈挾<E59F88>滨妍銝滩<E98A9D>銝箇征" },
{ "field": "fieldName", "message": "摮埈挾<E59F88>滨妍<E6BBA8>踹漲敹<E6BCB2>◆<EFBFBD>?-200銋钅𡢿" }
]
}
}
// 409 Conflict
{
"success": false,
"error": {
"code": "ALREADY_EXISTS",
"message": "霂亥<E99C82>皞𣂼歇摮睃銁"
}
}
4. <20>湔鰵韏<E9B0B5><E99F8F>
*蝡舐<EFBFBD>嚗? PUT /api/v1/xxx/resources/:id
<EFBFBD>券<EFBFBD>䈑<EFBFBD> <20>湔鰵<E6B994><E9B0B5><EFBFBD>韏<EFBFBD><E99F8F>嚗<EFBFBD><E59A97><EFBFBD>湔凒<E6B994>堆<EFBFBD>
*頝臬<EFBFBD><EFBFBD><EFBFBD>㺭嚗?
id(敹<>‵): 韏<><E99F8F>ID
霂瑟<EFBFBD>雿橒<EFBFBD>
{
"fieldName": "<22>湔鰵<E6B994>𡒊<EFBFBD><F0A1928A>滨妍",
"description": "<22>湔鰵<E6B994>𡒊<EFBFBD><F0A1928A>讛膩",
"status": "inactive"
}
*霂瑟<EFBFBD>蝷箔<EFBFBD>嚗?
PUT /api/v1/xxx/resources/123
Authorization: Bearer <token>
Content-Type: application/json
{
"fieldName": "<22>湔鰵<E6B994>𡒊<EFBFBD><F0A1928A>滨妍",
"description": "<22>湔鰵<E6B994>𡒊<EFBFBD><F0A1928A>讛膩"
}
*<EFBFBD>𣂼<EFBFBD><EFBFBD>滚<EFBFBD>嚗? 200 OK
{
"success": true,
"data": {
"id": 123,
"fieldName": "<22>湔鰵<E6B994>𡒊<EFBFBD><F0A1928A>滨妍",
"description": "<22>湔鰵<E6B994>𡒊<EFBFBD><F0A1928A>讛膩",
"updatedAt": "2025-11-06T11:00:00.000Z"
},
"message": "<22>湔鰵<E6B994>𣂼<EFBFBD>"
}
*<EFBFBD>躰秤<EFBFBD>滚<EFBFBD>嚗?
// 404 Not Found
{
"success": false,
"error": {
"code": "NOT_FOUND",
"message": "韏<><E99F8F>銝滚<E98A9D><E6BB9A>?
}
}
// 403 Forbidden
{
"success": false,
"error": {
"code": "FORBIDDEN",
"message": "<EFBFBD>䭾<EFBFBD>靽格㺿甇方<EFBFBD>皞?
}
}
5. <20>𣳇膄韏<E88684><E99F8F>
*蝡舐<EFBFBD>嚗? DELETE /api/v1/xxx/resources/:id
<EFBFBD>券<EFBFBD>䈑<EFBFBD> <20>𣳇膄<F0A3B387><E88684><EFBFBD>韏<EFBFBD><E99F8F>嚗<EFBFBD>蔓<EFBFBD>𣳇膄嚗?
*頝臬<EFBFBD><EFBFBD><EFBFBD>㺭嚗?
id(敹<>‵): 韏<><E99F8F>ID
*霂瑟<EFBFBD>蝷箔<EFBFBD>嚗?
DELETE /api/v1/xxx/resources/123
Authorization: Bearer <token>
*<EFBFBD>𣂼<EFBFBD><EFBFBD>滚<EFBFBD>嚗? 200 OK
{
"success": true,
"data": null,
"message": "<22>𣳇膄<F0A3B387>𣂼<EFBFBD>"
}
*<EFBFBD>躰秤<EFBFBD>滚<EFBFBD>嚗?
// 404 Not Found
{
"success": false,
"error": {
"code": "NOT_FOUND",
"message": "韏<><E99F8F>銝滚<E98A9D><E6BB9A>?
}
}
// 403 Forbidden
{
"success": false,
"error": {
"code": "FORBIDDEN",
"message": "<EFBFBD>䭾<EFBFBD><EFBFBD>𣳇膄甇方<EFBFBD>皞?
}
}
// 409 Conflict
{
"success": false,
"error": {
"code": "CANNOT_DELETE",
"message": "霂亥<E99C82>皞鞉<E79A9E><E99E89>唾<EFBFBD><E594BE>唳旿嚗峕<E59A97>瘜訫<E7989C><E8A8AB>?
}
}
<EFBFBD><EFBFBD> 霈方<E99C88>銝擧<E98A9D><E693A7>?
霈方<EFBFBD><EFBFBD>孵<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>𡅅PI<EFBFBD>賡<EFBFBD>閬<EFBFBD>WT Token霈方<E99C88>嚗?
Authorization: Bearer <token>
<EFBFBD><EFBFBD><EFBFBD>璉<EFBFBD><EFBFBD>?
- <EFBFBD>冽<EFBFBD><EFBFBD>芾<EFBFBD>霈輸䔮<EFBFBD>芸楛<EFBFBD><EFBFBD><EFBFBD>皞?
- ADMIN閫坿𠧧<EFBFBD>臭誑霈輸䔮<EFBFBD><EFBFBD><EFBFBD>㕑<EFBFBD>皞?
<EFBFBD><EFBFBD> <20>躰秤<E8BAB0><E7A7A4><EFBFBD><EFBFBD>?
| <EFBFBD>躰秤<EFBFBD>? | HTTP<EFBFBD>嗆<EFBFBD>? | 霂湔<EFBFBD> |
|---|---|---|
| UNAUTHORIZED | 401 | <EFBFBD>芣<EFBFBD><EFBFBD>? |
| FORBIDDEN | 403 | <EFBFBD>䭾<EFBFBD><EFBFBD>? |
| NOT_FOUND | 404 | 韏<EFBFBD><EFBFBD>銝滚<EFBFBD><EFBFBD>? |
| VALIDATION_ERROR | 422 | <EFBFBD><EFBFBD>㺭撉諹<EFBFBD>憭梯揖 |
| ALREADY_EXISTS | 409 | 韏<EFBFBD><EFBFBD>撌脣<EFBFBD><EFBFBD>? |
| INTERNAL_ERROR | 500 | <EFBFBD>滚𦛚<EFBFBD>券<EFBFBD>霂? |
<EFBFBD><EFBFBD> 雿輻鍂蝷箔<E89DB7>
JavaScript/TypeScript
// <20>瑕<EFBFBD>韏<EFBFBD><E99F8F><EFBFBD>𡑒”
const response = await fetch('/api/v1/xxx/resources?page=1&pageSize=10', {
headers: {
'Authorization': `Bearer ${token}`,
},
});
const data = await response.json();
// <20>𥕦遣韏<E981A3><E99F8F>
const response = await fetch('/api/v1/xxx/resources', {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
fieldName: '<27>啗<EFBFBD>皞?,
description: '<EFBFBD>讛膩',
}),
});
cURL
# <20>瑕<EFBFBD><E79195>𡑒”
curl -X GET "http://localhost:3001/api/v1/xxx/resources?page=1&pageSize=10" \
-H "Authorization: Bearer <token>"
# <20>𥕦遣韏<E981A3><E99F8F>
curl -X POST "http://localhost:3001/api/v1/xxx/resources" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"fieldName":"<22>啗<EFBFBD>皞?,"description":"<22>讛膩"}'
<EFBFBD>𩤃<EFBFBD> 瘜冽<E7989C>鈭钅★
*<EFBFBD>扯<EFBFBD>隡睃<EFBFBD>嚗?
- <EFBFBD>𡑒”<EFBFBD>亙藁敹<EFBFBD>◆<EFBFBD>舀<EFBFBD><EFBFBD><EFBFBD>△嚗屸<EFBFBD>霈小ageSize=10嚗峕<E59A97>憭?00
- <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>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>澆捆嚗?
- API<EFBFBD>䀹凒雿輻鍂<EFBFBD><EFBFBD>𧋦<EFBFBD>瘀<EFBFBD>/api/v2嚗?
- 銝滩<EFBFBD><EFBFBD>𣳇膄撌脫<EFBFBD>摮埈挾嚗<EFBFBD>蘨<EFBFBD>賣<EFBFBD>霈唬蛹deprecated
- <EFBFBD>啣<EFBFBD>摮埈挾敹<EFBFBD>◆<EFBFBD>厰<EFBFBD>霈文<EFBFBD>?
<EFBFBD><EFBFBD> <20>詨<EFBFBD><E8A9A8><EFBFBD>﹝
*閫<EFBFBD><EFBFBD>嚗?
<EFBFBD>唳旿摨橒<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>擧凒<EFBFBD>堆<EFBFBD> YYYY-MM-DD
蝏湔擪鈭綽<EFBFBD> <20><><EFBFBD>舀沲<E88880><E6B2B2><EFBFBD>