Open API 使用文档
1.1 什么是 Open API
Section titled “1.1 什么是 Open API”共绩算力 Open API 是一套 RESTful 接口,用于以编程方式管理算力资源与弹性部署任务,支持自动化运维与第三方系统集成。
典型应用场景:
- CI/CD 流水线中自动创建、启停弹性服务服务
- 批量查询任务状态与节点信息
- 查询租户账单
1.2 基础信息
Section titled “1.2 基础信息”项目 | 说明 |
API 基址 |
|
协议 | HTTPS |
数据格式 | JSON( |
字符编码 | UTF-8 |
接口版本 | 各接口独立版本,当前多为 |
1.3 版本说明
Section titled “1.3 版本说明”版本类型 | 示例 | 说明 |
API 接口版本 |
| 请求头 |
时间戳 | 毫秒级 Unix 时间戳 | 如 |
注意:请求头
version请使用接口文档中的版本号(通常为1.0.0),而非平台功能版本号。
1.4 统一响应格式
Section titled “1.4 统一响应格式”所有接口返回统一的 JSON 结构:
{ "code": 0000, "msg": "success", "data": { }}字段 | 类型 | 说明 |
| number |
|
| string | 结果描述信息 |
| object | 业务数据,结构因接口而异 |
2. 快速开始
Section titled “2. 快速开始”以下流程可在约 5 分钟内完成首次 API 调用验证。
步骤 1:获取 API 密钥
Section titled “步骤 1:获取 API 密钥”⚠️ 密钥仅在创建时展示一次,丢失后需重新创建。
步骤 2:在线调试验证
Section titled “步骤 2:在线调试验证”- 打开 Open API 接口文档
- 选择任意接口(如「资源列表查询」),点击「调试」
- 在 Header 中配置:
Header | 值 | 说明 |
| 您的 API 密钥 | 步骤 1 获取 |
|
| 接口版本,使用调试页默认值 |
| 当前毫秒时间戳 | 使用调试页自动生成值 |
- 点击「发送」,确认返回
code: 0000
步骤 3:代码调用(可选)
Section titled “步骤 3:代码调用(可选)”参见 第 6 节代码集成示例。
3. API 密钥管理
Section titled “3. API 密钥管理”3.1 密钥模式对比
Section titled “3.1 密钥模式对比”对比项 | Token 模式 | RSA 签名模式 |
别名 | 快速模式 | RSA 模式 |
创建要求 | 仅需填写备注 | 需填写备注 + RSA 公钥 |
调用方式 | Header 携带 Token | Header 携带 Token + RSA 签名 |
安全等级 | 中等 | 高 |
适用场景 | 开发调试、内部简单集成 | 生产环境、高安全要求场景 |
签名算法 | 无需签名 | RSA-SHA256 + Base64 |
3.2 模式选择建议
Section titled “3.2 模式选择建议”开发/测试环境 → Token 模式(快速验证)生产环境 → RSA 签名模式(防篡改、防重放)3.3 密钥创建流程
Section titled “3.3 密钥创建流程”Token 模式:
- 控制台 → API 密钥管理 → 新建密钥
- 选择「Token 模式」
- 填写备注 → 生成 → 立即复制 Token
RSA 签名模式:
- 本地生成 RSA 密钥对(见 RSA 模式使用指南)
- 控制台 → 新建密钥 → 选择「RSA 加验签模式」
- 粘贴公钥内容(
-----BEGIN PUBLIC KEY-----至-----END PUBLIC KEY-----) - 生成后妥善保管私钥
3.4 团队账号与权限
Section titled “3.4 团队账号与权限”使用团队账号时,仅 团队主账号 和 团队管理员 拥有密钥管理权限。开发者角色可调用 API,但无法在控制台创建或删除密钥。详见 团队账号常见问题。
4. 鉴权机制
Section titled “4. 鉴权机制”所有 API 请求均需在 HTTP Header 中携带鉴权参数。
4.1 Token 模式鉴权
Section titled “4.1 Token 模式鉴权”适用于开发调试,无需签名。
必需 Header:
Header | 类型 | 必填 | 说明 |
| string | 是 | API 密钥 |
| string | 是 | 接口版本,如 |
| string | 是 | 毫秒级 Unix 时间戳 |
请求示例:
GET /api/deployment/resource/search HTTP/1.1Host: openapi.suanli.cnContent-Type: application/jsontoken: your-api-token-hereversion: 1.0.0timestamp: 17701945705644.2 RSA 签名模式鉴权
Section titled “4.2 RSA 签名模式鉴权”适用于生产环境,需在 Token 模式基础上增加签名。
必需 Header:
Header | 类型 | 必填 | 说明 |
| string | 是 | API 密钥 |
| string | 是 | 接口版本 |
| string | 是 | 毫秒级时间戳 |
| string | 是 | RSA-SHA256 签名(Base64 编码) |
签名规则摘要:
- 构建待签名字符串(字段以换行符
\n连接):
{uri}\n{version}\n{timestamp}\n{token}\n{body}字段 | 说明 |
| 接口路径,如 |
| 接口版本,如 |
| 毫秒级时间戳 |
| API 密钥 |
| 请求体 JSON 字符串;GET 请求或无 Body 时为空字符串 |
- 使用 RSA 私钥 + SHA-256 + PKCS1v15 填充进行签名
- 对签名结果进行 Base64 编码,写入 Header
sign_str
完整签名规则、密钥生成及 Python 示例代码,请参阅 Open API RSA 模式使用指南。
4.3 接口加密说明
Section titled “4.3 接口加密说明”部分接口支持请求体 RSA 加密(创建任务等敏感操作)。是否加密以 Apifox 接口文档中的「是否需要加密」字段为准。加密后的 Body 同样参与签名计算。
5. 在线调试
Section titled “5. 在线调试”5.1 调试入口
Section titled “5.1 调试入口”资源 | 链接 |
在线接口文档 | |
API 密钥管理 |
5.2 调试步骤
Section titled “5.2 调试步骤”- 打开 Apifox 文档,选择目标接口
- 点击「调试」进入在线调试面板
- 配置 Header 鉴权参数(
token、version、timestamp) - 如需 RSA 签名,按 RSA 指南生成
sign_str并填入 - 填写 Query / Body 参数
- 点击「发送」,查看响应
5.3 调试建议
Section titled “5.3 调试建议”- 首次集成建议从 GET 类查询接口 开始(如资源列表、任务列表)
- 使用 Apifox 的「自动生成代码」功能导出 curl、Python、Go 等语言示例
- 鉴权失败时,优先核对
timestamp是否为毫秒级、服务器时间是否同步
6. 代码集成示例
Section titled “6. 代码集成示例”6.1 cURL 示例(Token 模式)
Section titled “6.1 cURL 示例(Token 模式)”curl -X GET "https://openapi.suanli.cn/api/deployment/resource/search" \ -H "Content-Type: application/json" \ -H "token: your-api-token-here" \ -H "version: 1.0.0" \ -H "timestamp: $(date +%s000)"6.2 Python 示例(Token 模式)
Section titled “6.2 Python 示例(Token 模式)”import timeimport requests
BASE_URL = "https://openapi.suanli.cn"API_TOKEN = "your-api-token-here"
headers = { "Content-Type": "application/json", "token": API_TOKEN, "version": "1.0.0", "timestamp": str(int(time.time() * 1000)),}
response = requests.get( f"{BASE_URL}/api/deployment/resource/search", headers=headers,)
print(response.json())6.3 Java 示例(Token 模式)
Section titled “6.3 Java 示例(Token 模式)”需要 Java 11 及以上版本(使用
java.net.http.HttpClient)。
import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;
public class OpenApiExample {
private static final String BASE_URL = "https://openapi.suanli.cn"; private static final String API_TOKEN = "your-api-token-here"; private static final String API_VERSION = "1.0.0";
public static void main(String[] args) throws Exception { String timestamp = String.valueOf(System.currentTimeMillis()); String url = BASE_URL + "/api/deployment/resource/search";
HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(url)) .header("Content-Type", "application/json") .header("token", API_TOKEN) .header("version", API_VERSION) .header("timestamp", timestamp) .GET() .build();
HttpResponse<String> response = client.send( request, HttpResponse.BodyHandlers.ofString());
System.out.println("Status: " + response.statusCode()); System.out.println("Body: " + response.body()); }}6.4 Go 示例(Token 模式)
Section titled “6.4 Go 示例(Token 模式)”package main
import ( "fmt" "io" "net/http" "time")
const ( baseURL = "https://openapi.suanli.cn" apiToken = "your-api-token-here" apiVersion = "1.0.0")
func main() { url := baseURL + "/api/deployment/resource/search" timestamp := fmt.Sprintf("%d", time.Now().UnixMilli())
req, err := http.NewRequest(http.MethodGet, url, nil) if err != nil { panic(err) }
req.Header.Set("Content-Type", "application/json") req.Header.Set("token", apiToken) req.Header.Set("version", apiVersion) req.Header.Set("timestamp", timestamp)
resp, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer resp.Body.Close()
body, err := io.ReadAll(resp.Body) if err != nil { panic(err) }
fmt.Println("Status:", resp.StatusCode) fmt.Println("Body:", string(body))}6.5 RSA 签名模式
Section titled “6.5 RSA 签名模式”RSA 模式需实现签名逻辑、完整代码与说明见 Open API RSA 模式使用指南。
7. 安全最佳实践
Section titled “7. 安全最佳实践”7.1 密钥管理
Section titled “7.1 密钥管理”实践 | 说明 |
立即保存 | 密钥创建后仅展示一次,请立即复制至密钥管理系统 |
环境隔离 | 开发、测试、生产使用不同密钥,禁止混用 |
最小权限 | 团队场景下,仅授权必要角色管理密钥 |
定期轮换 | 建议每 90 天轮换生产环境密钥 |
禁止硬编码 | 密钥通过环境变量或密钥管理服务注入,勿写入代码仓库 |
7.2 密钥泄露处置
Section titled “7.2 密钥泄露处置”- 立即在控制台删除泄露的密钥
- 创建新密钥并更新应用配置
- 排查访问日志,确认是否有异常调用
- 如涉及生产环境,评估是否需要轮换关联资源
7.3 传输安全
Section titled “7.3 传输安全”- 所有 API 调用必须使用 HTTPS
- 生产环境建议使用 RSA 签名模式
- 确保服务器时间与 NTP 同步,避免时间戳校验失败
8. 常见问题
Section titled “8. 常见问题”Q1:鉴权失败,返回签名错误?
Section titled “Q1:鉴权失败,返回签名错误?”请按以下顺序排查:
timestamp是否为毫秒级(13 位数字)version是否与接口文档一致(通常为1.0.0)- 待签名字符串字段顺序是否为
uri → version → timestamp → token → body - RSA 模式下,
body为空时是否使用空字符串""参与签名 - 服务器时间是否与标准时间同步(偏差建议 < 5 分钟)
Q2:Token 模式和 RSA 模式可以混用吗?
Section titled “Q2:Token 模式和 RSA 模式可以混用吗?”不可以。创建密钥时选定模式后,调用方式需与该模式一致。RSA 模式密钥必须使用签名;Token 模式密钥无需签名。
Q3:密钥丢失怎么办?
Section titled “Q3:密钥丢失怎么办?”平台不保存 Token 明文,私钥由用户自行保管。丢失后只能在控制台删除旧密钥并重新创建,同时更新所有集成方的配置。
Q4:团队开发者能否创建 API 密钥?
Section titled “Q4:团队开发者能否创建 API 密钥?”不能。仅团队主账号和团队管理员拥有密钥管理权限。开发者可使用已有密钥进行 API 调用。
Q5:接口是否有调用频率限制?
Section titled “Q5:接口是否有调用频率限制?”具体限流策略以平台当前政策为准。如遇 429 或限流相关错误,请实现指数退避重试,或联系技术支持提升配额。
9. 相关文档
Section titled “9. 相关文档”文档 | 说明 | 链接 |
Open API RSA 模式使用指南 | 密钥生成、签名算法、Python 示例 | |
Open API 接口文档 | 接口参数、在线调试、代码生成 | |
团队账号常见问题 | 角色权限、密钥管理权限 | https://suanli.cn/docs/platform/team-account/bpcxwi8vviqxylk677tcpfwqnkf/ |
平台使用常见问题 | 通用平台问题 |