老八
老八
发布于 2026-10-04 / 3 阅读
0
0

雨云 RainYun API 实操:认证、分页 options 坑与产品线地图

雨云 RainYun API 实操:认证、分页 options 坑与产品线地图

最近把雨云(RainYun)的 OpenAPI 跑通了,把云服务器、游戏云、裸金属、对象存储、域名、SSL 几条产品线的端点都摸了一遍。最大的坑不在认证,而在一个所有列表接口都强制要求、却很容易传错的 options 参数。这篇把实操经验记下来。

一、认证:一个 x-api-key 走天下

雨云 API 用 API Key 认证,没有复杂的 OAuth 签名流程。

  • 获取位置:雨云后台 → 账户设置 → API 密钥
  • Base URL:https://api.v2.rainyun.com
  • 请求头带上:
x-api-key: 你的密钥
Content-Type: application/json

返回统一是 {"code": 200, "data": ...} 结构,code 不是 200 就是失败。实测踩过的错误码:

code 含义
30002 需要登录(请求没带 key)
30039 密钥错误或已失效
10002 参数无效
10006 过滤器格式错误(options 的 JSON 不对)

密钥这种东西不要写进代码或脚本仓库,存到环境变量文件里、权限收紧到 600。

二、最大的坑:options 参数必填

所有列表/分页接口都要求一个 query 参数 options,它的值是一个 JSON 字符串,而且必须做 URL encode。标准结构长这样:

{"columnFilters":{},"sort":[],"page":1,"perPage":20}

刚开始我手拼 URL,要么忘了 encode 导致花括号和引号被转义出问题(返回 10006),要么干脆没传这个参数。最稳的写法是用 curl 的 -G --data-urlencode,让 curl 帮你编码:

. /opt/data/.env
curl -sS -G \
  -H "x-api-key: $RAINYUN_API_KEY" \
  'https://api.v2.rainyun.com/product/rcs/' \
  --data-urlencode 'options={"columnFilters":{},"sort":[],"page":1,"perPage":20}'

分页返回的结构是:

{"data": {"TotalRecords": 100, "Records": [ ... ]}}

翻页就是改 options 里的 page,每页条数改 perPage。columnFilters 做过滤、sort 做排序,结构对齐后基本通用。

三、产品线 → API 前缀地图

雨云把不同产品拆成了不同前缀,摸清前缀之后,端点命名相当规整。

产品 前缀 端点数 典型操作
RCS 云服务器 /product/rcs/ 53 开关机/重启、changeos 重装、renew 续费、upgrade 升降配、vnc、重置密码、free 释放、防火墙、弹性 IP、NAT、备份、流量、监控
RGS 游戏云 /product/rgs/ 76 同 RCS,外加 MCSM 面板、翼龙面板用户、帕鲁配置、egg 切换、日付模式、CPU 计费、弹性伸缩
RBM 裸金属 /product/rbm 24 poweron/off、changeos、KVM、rescue 救援、IPMI 重置密码、弹性 IP、BIOS 刷写、清点
ROS 对象存储 /product/ros/ 36 bucket/instance 增删改查、重新生成密钥、生命周期、离线下载、主动同步、访问日志、公开访问开关
域名 /product/domain/ 38 注册、续费、过户、DNS 解析、DNSSEC、NS 管理、免费二级域名、whois、模板
SSL 证书 /product/sslcenter/ 21 下单、申请、验证、续期、吊销、上传/替换

可以看到命名高度一致:开机是 poweron、重装是 changeos、续费是 renew……记住一个产品的套路,其他产品能直接套用。

四、危险操作要收口

下面这些操作要么不可逆、要么直接扣费,做自动化时必须单独拦截、拿到明确确认再执行:

  • POST **/free:释放实例,数据全删
  • POST **/renew:续费,扣费
  • POST /product/domain/register:注册域名,扣费
  • POST **/scale、/upgrade:升降配,可能补差价
  • POST **/cert/.../revoke:吊销证书

我的做法是把这些端点列进脚本的"危险清单",默认只做查询,写操作必须显式传确认参数。

五、查端点别靠猜

雨云官方有一个很好用的东西:OpenAPI spec 直接可下载。

我把 spec 拉到本地缓存,需要某个操作的确切参数时直接读 JSON,比在文档页面里翻快得多,也避免凭名字猜参数。当前这份 spec 是 v2.4,覆盖 215 个路径,六条产品线全在里面。

小结

雨云 API 的整体体验是规整的:统一认证头、统一返回结构、产品线前缀 + 动词化端点。真正要注意的就两点——列表接口的 options 是必填 JSON 字符串,用 --data-urlencode 传;释放/续费/注册类端点会删数据或扣钱,自动化里要单独收口。剩下的交给那份 openapi.json 就行。


评论