cloady文档
API 参考
文档阅读约 6 分钟

API 概览

Cloady REST API 的身份验证、权限范围、约定和错误。

在控制台里能做的一切,都可以通过 HTTP 完成:工作区、应用、部署、域名、变量、成员。控制台本身调用的也是这套 API。

基础 URL

https://cloady.com/api

所有请求和响应都是 application/json。凡是带请求体的请求,都要发送 Content-Type: application/json。

身份验证

使用个人 API 令牌进行身份验证,以 Bearer 令牌的形式传递:

Authorization: Bearer cldy_...

令牌代表你本人:它能访问你所属的工作区,在每个工作区中的角色都与你相同。密钥只在创建时显示一次,之后无法再次获取;如果丢失了,请吊销它并新建一个。

令牌可以设置有效期(never、30d、90d、1y),也可以随时吊销。缺失、格式错误、已过期或已吊销的令牌会得到 401 unauthorized。

令牌还可以绑定到某一个工作区。这样一来,对其他任何工作区的请求都会返回 403 forbidden,无论你在那里是什么角色。

你的账号必须有已验证的手机号;否则,所有需要身份验证的端点都会返回 403 phone_required。在控制台的 Account → Security 中验证一次即可。

创建令牌

在控制台中打开 Account → API tokens(参见控制台指南)。选择名称、权限范围和有效期。密钥只显示一次,请立即复制。创建令牌这一操作本身,需要 full 权限范围的令牌或已登录的浏览器会话。

令牌权限范围

每个令牌在创建时都带有一个权限范围,它限定了令牌能做什么:

  • read — 只读。可以列出和查看工作区、应用、部署和日志,不能做任何修改。
  • deploy — read 能做的一切,再加上 developer 能做的操作:部署、重新部署、启动、停止和重启,管理域名和变量,以及删除应用(这会永久删除应用的数据)。
  • full — 不受限制。deploy 能做的一切,再加上管理类操作:创建工作区,以及管理工作区设置、成员、集成和计费。

请选择能满足需求的最小权限范围,例如用于 CI 部署的令牌应该选 deploy,而不是 full。

工作区角色

权限范围限定的是令牌;你在工作区中的角色限定的是请求。工作区端点要求一个最低角色,角色由低到高依次为:

  • viewer — 查看工作区及其应用。
  • developer — 部署和运维应用,包括部署、重启、日志、Shell、数据库、域名和变量,以及删除应用。
  • admin — 管理工作区设置、成员、集成和单点登录。
  • owner — 拥有全部权限,包括计费和删除工作区。

角色低于端点最低要求的请求会返回 403 forbidden。如果你不是某个工作区的成员,对它的请求会返回 404 not_found:成员关系从不对外透露。

授权链:工作区请求依次通过令牌、成员资格、权限和应用这几道检查,每道检查都有自己的错误码。权限检查会把端点要求的最低角色,同时与调用方的工作区角色和令牌权限范围允许的上限进行比较:read 最高到 viewer,deploy 最高到 developer,full 最高到 owner。工作区请求会依次通过这些检查,第一个未通过的检查就决定了你收到的响应。令牌bearer cldy_…成员资格你是否为成员权限角色与权限范围应用env + region操作执行处理程序401 unauthorized403 phone_required404 not_found(隐藏成员关系)403 forbidden(角色或权限范围)404 not_found400 region_required端点要求的最低角色,必须在你的工作区角色之内,也必须在令牌的上限之内:read → viewerdeploy → developerfull → owner因此,无论你在工作区中的角色多高,deploy 令牌都无法调用 admin 端点。

env 与 region 查询参数约定

每个应用运行在一个区域和一个环境(production、preview 或 development)中,应用名称在同一工作区和环境内唯一。控制台 URL 把区域和环境作为路径段,而 API 请求把它们作为查询参数传递:

?env=<production|preview|development>&region=<regionId>
  • env 省略时默认为 production。
  • region 是可选的,很少需要。只有同一名称存在于多个区域时才需要传:这类请求会返回 400 region_required,你需要带上 ?region= 重试。
GET /api/workspaces/acme/apps/my-blog?env=production&region=usw1

区域 ID 可以通过 GET /api/regions 获取。任何工作区都可以部署到其中任意一个区域;区域在部署应用时选定。

这些路径通过名称定位应用和工作区,而应用的公开地址也随名称而定,所以重命名会同时改变你调用的 URL 和应用对外提供服务的 URL。请更新所有引用旧名称的脚本。即便如此,重命名仍是安全的做法:删除应用会永久删除它的数据。

流式端点

应用状态、指标、部署进度、部署日志和工单消息,都以服务器发送事件(server-sent events)的形式推送。发送 Accept: text/event-stream 可以获取实时流;不带这个请求头时,你会以普通 JSON 的形式拿到一次当前状态,这正是脚本需要的。服务日志也是如此:对普通请求,它会返回最近 200 行。

错误格式

错误带有一个机器可读的 code:

JSON
{ "error": { "code": "not_found", "message": "App my-blog not found" } }

从 body.error.code 读取错误码,并据此进行分支处理,切勿只依据消息或状态码。校验失败(bad_body)时,还会附带一个 details 数组,列出出错的字段。

状态码常见的 code含义
400bad_body、bad_reference、bad_region请求体格式错误、缺少字段,或名称/区域不存在
400region_required该名称匹配到多个区域中的应用,请带上 ?region= 重试
401unauthorized令牌缺失、已过期或已吊销
403forbidden角色不够、令牌权限范围不够,或令牌绑定的是另一个工作区
403phone_required账号没有已验证的手机号
402payment_required此次变更会让工作区超出免费额度,而目前没有绑定银行卡,或银行卡扣款被拒
402payment_failed、payment_action_required银行卡付款(例如域名订单)被拒,或需要银行确认
404not_found找不到工作区或应用
503billing_misconfigured计费服务不可用

示例

列出你的工作区:

Terminal
curl https://cloady.com/api/workspaces \
  -H "Authorization: Bearer cldy_..."
JSON
{
  "workspaces": [ /* ... */ ]
}

完整的端点目录(路径、方法、参数和请求体),请查看侧边栏中的各个端点页面,可以从 listWorkspaces 开始。

本页内容