API调用须知
API认证机制
用户与百度智能云进行交互时,需要通过使用Access Key Id / Secret Access Key加密的方法来验证某个请求的发送者身份。Access Key Id(AK)用于标示用户,Secret Access Key(SK)是用户用于加密认证字符串和百度智能云用来验证认证字符串的密钥,其中SK必须保密,只有用户和百度智能云知道。
当百度智能云接收到用户的请求后,系统将使用相同的SK和同样的认证机制生成认证字符串,并与用户请求中包含的认证字符串进行比对。如果认证字符串相同,系统认为用户拥有指定的操作权限,并执行相关操作;如果认证字符串不同,系统将忽略该操作并返回错误码。鉴权认证机制的详细内容请参见鉴权认证机制。
排版约定
排版格式 | 含义 |
---|---|
< > | 变量 |
[] | 可选项 |
{} | 必选项 |
等宽字体Courier New | 屏幕输出 |
时间与日期
日期与时间的表示有多种方式。为统一起见,除非是约定俗成或者有相应规范的,凡需要日期时间表示的地方一律采用UTC时间,遵循ISO 8601,并做以下约束:
- 表示日期一律采用YYYY-MM-DD方式,例如2016-06-01表示2016年6月1日。
- 表示时间一律采用hh:mm:ss方式,并在最后加一个大写字母Z表示UTC时间。例如23:00:10Z表示UTC时间23点0分10秒。
- 凡涉及日期和时间合并表示时,在两者中间加大写字母T,例如2016-06-01T23:00:10Z表示UTC时间2016年6月1日23点0分10秒。
通用说明
API调用遵循HTTP/HTTPS协议,各Region采用不同的域名,具体域名为rabbitmq.{region}.baidubce.com。 数据交换格式为JSON,所有request/response body内容均采用UTF-8编码。
请求参数
请求参数包括如下4种:
参数类型 | 说明 |
---|---|
URI | 通常用于指明操作实体,如:POST /v{version}/instance/{instanceId} |
Query | URL中携带的请求参数 |
HEADER | 通过HTTP头域传入,如:x-bce-date |
RequestBody | 通过JSON格式组织的请求数据体 |
返回值
返回值分为两种形式:
返回内容 | 说明 |
---|---|
HTTP STATUS CODE | 如200,400,403,404等 |
RequestBody | JSON格式组织的响应数据体 |
API版本号
参数 | 类型 | 参数位置 | 描述 | 是否必须 |
---|---|---|---|---|
version | string | URL参数 | API版本号,当前API版本为v1 | 是 |
认证机制
所有API的安全认证一律采用Access Key与请求签名机制。 Access Key由Access Key ID和Secret Access Key组成,均为字符串。 对于每个HTTP请求,使用下面所描述的算法生成一个认证字符串。提交认证字符串放在Authorization头域里。服务端根据生成算法验证认证字符串的正确性。 认证字符串的格式为:
bce-auth-v{version}/{accessKeyId}/{timestamp}/{expirationPeriodInSeconds}/{signedHeaders}/{signature}
说明
- version是正整数。
- timestamp是生成签名时的UTC时间。
- expirationPeriodInSeconds表示签名有效期限。
- signedHeaders是签名算法中涉及到的头域列表。头域名之间用分号(;)分隔,如host;x-bce-date。列表按照字典序排列。(本API签名仅使用host和x-bce-date两个header)
- signature是256位签名的十六进制表示,由64个小写字母组成。
密码加密传输规范定义
所有涉及密码的接口参数都需要加密,禁止明文传输。密码一律采用AES 128位加密算法进行加密,用SK的前16位作为密钥,加密后生成的二进制字节流需要转成十六进制,并以字符串的形式传到服务端。具体步骤如下:
- byte[] bCiphertext= AES(明文,SK)
- String strHex = HexStr(bCiphertext)
幂等性
当调用创建接口时如果遇到了请求超时或服务器内部错误,用户可能会尝试重发请求,这时用户通过clientToken参数避免创建出比预期要多的资源,即保证请求的幂等性。
幂等性基于clientToken,clientToken是一个长度不超过64位的ASCII字符串,通常放在query string里,如 http://rabbitmq.bj.baidubce.com/v1/instance?clientToken=be31b98c-5e41-4838-9830-9be700de5a20。
如果用户使用同一个clientToken值调用创建接口,则服务端会返回相同的请求结果。因此用户在遇到错误进行重试的时候,可以通过提供相同的clientToken值,来确保只创建一个资源;如果用户提供了一个已经使用过的clientToken,但其他请求参数(包括queryString和requestBody)不同甚至url Path不同,则会返回IdempotentParameterMismatch的错误代码。
clientToken的有效期为24小时,以服务端最后一次收到该clientToken为准。也就是说,如果客户端不断发送同一个clientToken,那么该clientToken将长期有效。
错误返回
错误返回格式
请求发生错误时通过response body返回详细错误信息,遵循如下格式。
参数名 | 类型 | 说明 |
---|---|---|
requestId | String | 本次请求的requestId |
code | String | 错误码 |
message | String | 错误描述 |
示例:
{
"requestId" : "ae2225f7-1c2e-427a-a1ad-5413b762957d",
"code" : "NoSuchKey",
"message" : "The resource you requested does not exist"
}
错误返回码
错误码 | 错误描述 | HTTP状态码 | 中文解释 |
---|---|---|---|
InternalFailure | We encountered an Internal error. Please try again. | 400 | 内部错误 |
ValidationError | 具体错误原因 | 400 | 校验失败 |
InvalidVersion | The API version specified was invalid. | 400 | 非法版本号 |
ServiceInternalError | Internal service occurs error. | 500 | 内部(未知)服务器错误 |
PaymentFailed | payment failed, please check remaining balance | 403 | 支付失败 |
InsufficientBalance | Insufficient balance, please check remaining balance | 403 | 支付失败,余额不足 |
NoSuchObject | The specified object is not found or resource do not exist. | 404 | 资源不存在 |
OperationDenied | No permission to accessor or permission error. | 403 | 没有权限做此操作 |
BadRequest | Bad request parameters or illegal request. | 400 | 参数输入不合法 |
InstanceNotFound | The specified instance does not exist. | 404 | 指定的RabbitMQ实例不存在 |
QualifyNotPass | The User has not pass qualify. | 403 | 用户未通过实名认证 |
AuthValidateFailed | Fail to validate authorization | 401 | 鉴权失败 |
AccessDenied | Access denied. | 403 | 禁止操作该实例 |
InvalidAction | Invalid Action. | 400 | 非法操作 |
MissingParameter | A required parameter ' |
400 | 缺少必传参数" |
MissingDateHeader | Request must have a "date" or "x-bce-date" header. | 400 | Header中缺少"date" 或 "x-bce-date"其中之一 |
MissingAuthToken | Request must have a "authorization" header. | 400 | Header中缺少"authorization" |
RequestExpired | Request has expired. | 400 | 请求中authorization过期 |
QuotaExceeded | The amount of instance exceed limit. | 400 | 实例数量超出用户配额 |
InstanceCreationFailed | Fail to create instance. | 400 | 创建实例失败,通常是由于资源不足,用户金额不足等 |
NotSupportOperation | Internal server does not support such operation. | 501 | 服务器不支持该操作 |
InternalServerError | Internal Server Error. | >500 | 服务器内部错误 |
公共头
公共请求头
下表列出了所有RabbitMQ OpenAPI所携带的公共头域。HTTP协议的标准头域不在此处列出。
公共头部 | 描述 |
---|---|
Authorization | 包含Access Key与请求签名。 |
Host | 表示请求API的域名。 |
Content-Type | application/json; charset=utf-8。 |
Content-Length | 实际请求body大小。 |
x-bce-date | 表示日期的字符串,如果用户使用了标准的Date域,该头域可以不填。当两者同时存在时,以x-bce-date为准。统一使用UTC时间,日期和时间之间加字母T,结尾加字母Z表示UTC时间,如:2014-06-01T23:00:10Z。服务端由到请求会判断本机时间与该时间差值,若大于30分钟,则抛弃本次请求,响应HTTP 400。 |
Date | 同x-bce-date头域,二者必须存在其一。 |
公共响应头
下表列出了所有RabbitMQ OpenAPI的公共响应头域。HTTP协议的标准响应头域不在此处列出。
公共头部 | 描述 |
---|---|
Content-Type | application/json; charset=utf-8。 |
Content-Length | 返回body大小。 |
x-bce-request-id | 对应请求的requestId,由服务端生成并自动设置到响应头域中。 |