REST API
AuraBoot 为所有平台操作提供 RESTful API。Web UI 中可执行的每一项操作 —— 从查询记录到执行 Command —— 都可以通过 API 访问。
认证
所有 API 请求都需要 JWT bearer token。通过调用登录接口获取:
curl -X POST http://localhost:6443/api/auth/login \
-H "Content-Type: application/json" \
-d '{
"email": "admin@auraboot.com",
"password": "YourPassword"
}'响应:
{
"code": "0",
"message": "success",
"data": {
"jwt": "eyJhbGciOiJIUzI1NiIs...",
"userId": "1234567890",
"userPid": "01HXYZ...",
"username": "admin",
"tenantId": "1",
"tenantStatus": "member"
}
}在后续所有请求中携带该 token:
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
Base URL
所有 API 端点均以以下前缀开头:
http://localhost:6443/api
生产环境请替换为你的域名并启用 HTTPS。
响应格式
所有响应都遵循统一的信封格式:
{
"code": "0",
"message": "success",
"data": { ... }
}| 字段 | 类型 | 描述 |
|---|---|---|
code | string | "0" 表示成功,否则为错误码 |
message | string | 可读消息 |
data | any | 响应载荷(object、array 或 null) |
错误响应使用相同格式并附带非零 code:
{
"code": "VALIDATION_ERROR",
"message": "Field 'title' is required",
"data": null
}通用约定
以下规则适用于下方每一个端点 —— 接入时请与对应 Spring @RequestParam / @RequestBody 实测核对(红线 §5 禁止凭经验猜参数名)。
必备 Header
| Header | 是否必填 | 说明 |
|---|---|---|
Authorization: Bearer <jwt> | 是 | 除 /api/auth/login 与 /api/health 外的所有端点。 |
X-Tenant-Id | 可选 | 覆盖 JWT 解析出的 tenant;服务器强制校验归属,不匹配 → 403 TENANT_FORBIDDEN。 |
Accept-Language | 可选 | BCP-47(en、zh-CN)。驱动响应中的 i18n 解析。 |
Content-Type: application/json | POST/PUT 时必填 | multipart 上传除外。 |
X-Idempotent-Key | 可选 | 命令执行(POST /api/meta/commands/execute/{commandCode})的幂等去重 header;去重窗口 24 小时。也可改用请求体内的 clientRequestId 字段。 |
列表查询参数
每一个列表端点 —— GET /api/dynamic/{pageKey}/list、dashboard 数据源、审计日志搜索 —— 都使用同一套参数契约。禁止 混用 page / size / pageNum;canonical 名称为:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
pageNum | int | 1 | 1-based。 |
pageSize | int | 10 | 最大 500。 |
keyword | string | — | 在 model 可搜索字段上进行全文匹配。 |
sortField | string | created_at | 必须是绑定 model 上的字段 code。 |
sortOrder | string | desc | asc 或 desc。 |
filters | JSON array | — | URL 编码;见下方 Filters 格式。 |
错误信封
错误共用响应信封;按 code 映射:
code | HTTP | 含义 |
|---|---|---|
0 | 200 | 成功。 |
VALIDATION_ERROR | 400 | 字段级错误;data.fieldErrors 为 { fieldCode: message }。 |
UNAUTHORIZED | 401 | JWT 缺失 / 过期。 |
FORBIDDEN | 403 | 权限不足。data.permission 列出所需 code。 |
TENANT_FORBIDDEN | 403 | 跨 tenant 访问。 |
NOT_FOUND | 404 | 资源缺失或已软删除。 |
IDEMPOTENT_REPLAY | 200 | 重复 X-Idempotent-Key / clientRequestId;data 为原始结果。 |
RATE_LIMITED | 429 | 见 限流。 |
INTERNAL_ERROR | 500 | 服务器故障;data.traceId 用于日志关联。 |
校验错误必定包含按字段的 map,便于 UI 在字段控件上展示错误(绝不能用泛化 banner —— 红线 §2.2):
{
"code": "VALIDATION_ERROR",
"message": "1 validation error",
"data": { "fieldErrors": { "email": "$i18n:crm.lead.email.duplicate" } }
}动态 CRUD 端点
列表查询
GET /api/dynamic/{pageKey}/list
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
pageNum | int | 1 | 页码(1-based) |
pageSize | int | 10 | 每页记录数(最大 500) |
keyword | string | — | 在可搜索字段上的全文检索 |
sortField | string | created_at | 排序字段 code |
sortOrder | string | desc | asc 或 desc |
filters | JSON | — | 过滤条件数组 |
Filters 格式
filters 参数接受 JSON 条件数组:
[
{ "fieldName": "status", "operator": "eq", "value": "active" },
{ "fieldName": "created_at", "operator": "gte", "value": "2024-01-01" }
]支持的 operator:eq、ne、gt、gte、lt、lte、like、in、not_in、is_null、is_not_null。
示例
curl "http://localhost:6443/api/dynamic/crm_lead_list/list?\
pageNum=1&pageSize=20&keyword=acme&\
filters=%5B%7B%22fieldName%22%3A%22status%22%2C%22operator%22%3A%22eq%22%2C%22value%22%3A%22new%22%7D%5D" \
-H "Authorization: Bearer $TOKEN"响应:
{
"code": "0",
"data": {
"records": [
{ "id": "1234567890", "lead_name": "Acme Corp", "status": "new", ... }
],
"total": 42,
"pageNum": 1,
"pageSize": 20
}
}执行 Command
所有写操作都通过同一个端点(commandCode 是路径参数,业务字段放在请求体的 payload 中):
POST /api/meta/commands/execute/{commandCode}
创建
curl -X POST http://localhost:6443/api/meta/commands/execute/crm:create_lead \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"payload": {
"lead_name": "Jane Smith",
"email": "jane@example.com",
"status": "new"
}
}'更新
curl -X POST http://localhost:6443/api/meta/commands/execute/crm:update_lead \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"operationType": "UPDATE",
"targetRecordId": "1234567890",
"payload": {
"lead_name": "Jane Smith-Updated"
}
}'删除
curl -X POST http://localhost:6443/api/meta/commands/execute/crm:delete_lead \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"operationType": "DELETE",
"targetRecordId": "1234567890"
}'单条记录读取
GET /api/dynamic/{pageKey}/{recordId}
其中 recordId 是路径参数。
数据源查询
用于自定义查询(dashboard 与报表使用):
GET /api/datasource/list?datasourceId={code}&maxItems=200
分页
列表端点返回分页结果。通过 pageNum 与 pageSize 翻页:
第 1 页: pageNum=1&pageSize=20 → 记录 1-20
第 2 页: pageNum=2&pageSize=20 → 记录 21-40
响应中的 total 字段表示匹配总记录数。
限流
API 请求按用户维度限流。默认上限:
| 端点类型 | 上限 |
|---|---|
| 读(list、detail) | 100 req/min |
| 写(command execute) | 30 req/min |
| 认证(login) | 10 req/min |
下一步
- Plugin API 参考 —— SPI 与宿主 Service
- CommandExecutor service ——
/api/meta/commands/execute/{commandCode}的编程式等价入口 - DynamicDataService service ——
/api/dynamic/{pageKey}/list的编程式等价入口 - Commands —— pipeline 各阶段
- Permissions —— 授权模型