API 开发者指南
本文档面向需要通过 API 集成或扩展华杨 CMDB 系统的开发者,介绍华杨 CMDB REST API 的设计规范、认证方式、请求/响应格式和各模块 API 概览。
基础约定
URL 结构
所有 API 遵循统一的 URL 模式:
{base_url}/api/{tenantId}/cmdb/{module}/{resource}
| 部分 | 说明 | 示例 |
|---|---|---|
base_url | API 服务器地址 | http://localhost:8102/itom |
tenantId | 租户 ID(路径参数) | 100000001 |
module | 模块名称 | class-model、tql-query、datain |
resource | 资源路径 | definitions、definitions/{name} |
HTTP 方法语义
| 方法 | 语义 | 幂等性 |
|---|---|---|
GET | 查询资源 | 是 |
POST | 创建资源或执行操作 | 否 |
PUT | 更新资源(全量替换) | 是 |
DELETE | 删除资源 | 是 |
请求头
Content-Type: application/json
Accept: application/json
Authorization: Bearer {access_token}
认证
系统使用 Keycloak 作为身份认证服务。调用受保护的 API 需要先获取访问令牌。
获取令牌
POST /api/{tenantId}/platform/authenticate
请求体:
{
"username": "admin",
"password": "admin"
}
成功响应(200):
{
"success": true,
"code": 200,
"timestamp": "2026-04-15T10:30:00.000Z",
"data": {
"access_token": "eyJhbGciOiJSUzI1NiIs...",
"refresh_token": "eyJhbGciOiJSUzI1NiIs...",
"token_type": "Bearer",
"expires_in": 300,
"refresh_expires_in": 1800
}
}
认证失败(401):
{
"success": false,
"code": 401,
"timestamp": "2026-04-15T10:30:00.000Z",
"error": {
"errorcode": "15010401",
"message": "Invalid username or password",
"type": "AUTHENTICATION_ERROR",
"details": {}
}
}
使用令牌
在后续请求中通过 Authorization 头携带令牌:
Authorization: Bearer eyJhbGciOiJSUzI1NiIs...
统一响应格式
所有 API 响应遵循统一的信封格式,包含 success、code、timestamp 三个必填字段。
成功响应
{
"success": true,
"code": 200,
"timestamp": "2026-04-10T07:28:33.695Z",
"data": { ... }
}
错误响应
{
"success": false,
"code": 400,
"timestamp": "2026-04-10T07:28:33.695Z",
"error": {
"errorcode": "15010400",
"message": "Validation failed",
"type": "VALIDATION_ERROR",
"details": { ... }
}
}
错误码结构
错误码为 8 位数字,由三部分组成:
{serviceCode}{moduleCode}{errorCode}
| 组成 | 说明 | 示例 |
|---|---|---|
| 服务码(2 位) | 标识来源服务 | 15 = cmdb-api, 20 = class-model |
| 模块码(2 位) | 标识模块 | 01 = classModel, 02 = tqlQuery, 03 = datain |
| 错误码(4 位) | 具体错误 | 0400 = 验证失败, 0404 = 未找到 |
错误类型
| type | HTTP 状态码 | 说明 |
|---|---|---|
VALIDATION_ERROR | 400 | 请求参数验证失败,details 中包含具体字段错误 |
AUTHENTICATION_ERROR | 401 | 未认证或令牌无效 |
AUTHORIZATION_ERROR | 403 | 权限不足 |
NOT_FOUND_ERROR | 404 | 请求的资源不存在 |
CONFLICT_ERROR | 409 | 资源冲突(如重复创建) |
RATE_LIMIT_ERROR | 429 | 请求频率超限 |
INTERNAL_SERVER_ERROR | 500 | 服务器内部错误 |
查询参数
列表类接口支持统一的查询参数:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
limit | integer | 20 | 每页记录数(1-1000) |
offset | integer | 0 | 偏移量 |
sort | array | - | 排序条件 [{field, direction}] |
fields | array | - | 返回字段白名单 |
filters | array | - | 过滤条件(见下文) |