简介
概述
百度智能云弹性伸缩(Auto Scaling)是自动化扩缩容用户云资源的管理服务,当您业务所需的云资源用量经常性变化时,弹性伸缩会是您使用云资源的理想方式。
接口使用规范
规范化字符串
通常一个字符串中可以包含任何Unicode字符。在编程中这种灵活性会带来不少困扰。因此引入“规范字符串”的概念。一个规范字符串只包含百分号编码字符以及URI(Uniform Resource Identifier)非保留字符(Unreserved Characters)。 RFC 3986规定URI非保留字符包括以下字符:字母(A-Z,a-z)、数字(0-9)、连字号(-)、点号(.)、下划线(_)、波浪线(~)。 将任意一个字符串转换为规范字符串的方式是:
- 将字符串转换成UTF-8编码的字节流。
- 保留所有URI非保留字符原样不变。
- 对其余字节做一次RFC 3986中规定的百分号编码(Percent-Encoding),即一个%后面跟着两个表示该字节值的十六进制字母。字母一律采用大写形式。示例:
原字符串:
this is an example for 测试
, 对应的规范字符串:this%20is%20an%20example%20for%20%E6%B5%8B%E8%AF%95
。
编码规范
- 可解析内容,所有request/response body内容目前均使用UTF-8编码,后续会支持更多encoding类型。
-
在请求时,需要对以下做UrlEncode:
- Objectname,其中,Resource做UrlEncode的时候需要忽略“/”。
- Querystring的Value。
- x-bce-copy-source(忽略“/”)。
- 自定义Meta:Meta Value只支持可见的ASCII字符,如果需要其它的字符,推荐使用UrlEncode处理。
密码加密传输规范
所有涉及密码的接口参数都需要加密,禁止明文传输。密码一律采用AES 128位加密算法进行加密,用SK的前16位作为密钥,加密后生成的二进制字节流需要转成十六进制,并以字符串的形式传到服务端。具体步骤如下:
- byte[] bCiphertext= AES(明文,SK)
- String strHex = HexStr(bCiphertext)
日期与时间
日期与时间的表示有多种方式。为统一期间,除非是约定俗成或者有相应规范的,凡是HTTP标准中规定的表示日期和时间字段用GMT,其他日期时间表示的地方一律采用UTC时间,遵循ISO 8601,并做以下约束:
- 表示日期一律采用
YYYY-MM-DD
方式,例如2014-06-01
表示2014年6月1日。 - 表示时间一律采用
hh:mm:ss
方式,并在最后加一个大写字母Z表示UTC时间。例如23:00:10Z
表示UTC时间23点0分10秒。 - 凡涉及日期和时间合并表示时,在两者中间加大写字母T,例如
2014-06-01T23:00:10Z
表示UTC时间2014年6月1日23点0分10秒。
请求响应格式标准
- HTTP请求,Querystring中参数的Key,为首字母小写的驼峰方式。如 upLoadId,partNumber等。
- 所有用户自定义Meta,以
x-bce-meta-*
的形式放Header中,自定义Meta总大小不得超过2K。x-bce-meta-*
的Key会被Server端统一按照小写进行处理。
例如:用户使用PutObject接口上传了x-bce-meta-DeMo:value
,Server端会统一按照小写x-bce-meta-demo:value
进行处理,用户在使用GetObject接口时,Sever端的返回值为x-bce-meta-demo:value
。
- 除RFC2616规定的标准Header外,其他Header以
x-bce-*
的形式定义。 - 所有JSON中,Key均为首字母小写的驼峰方式。
- 每个请求响应中均带有
x-bce-request-id
和x-bce-debug-id
这两个Header。 - Header中Date、Content-MD5、Content-Type、Content-Length等相关字段遵守RFC 2616约束。
-
依据HTTP协议的规定,Content-MD5既要做MD5也要进行Base64编码,其计算方法如下:
Content-MD5 = "Content-MD5" ":" md5-digest md5-digest = <base64 of 128 bit MD5 digest as per RFC 1864>
服务域名
AS API的服务域名为:
区域 | 服务端点Endpoint | 协议 |
---|---|---|
北京 | as.bj.baidubce.com | HTTP and HTTPS |
广州 | as.gz.baidubce.com | HTTP and HTTPS |
苏州 | as.su.baidubce.com | HTTP and HTTPS |
公共请求头
头域 | 说明 | 是否必须 |
---|---|---|
Authorization | 包含Access Key与请求签名。 | 必须 |
x-bce-date | 该请求创建的时间,表示日期一律采用YYYY-MM-DD方式,例如2014-06-01表示2014年6月1日。如果用户使用了标准的Date域,该头域可以不填。当两者同时存在时,以x-bce-date为准。 | 可选 |
x-bce-content-sha256 | 表示内容部分的SHA256签名的十六进制字符串,其中内容指HTTP Request Payload Body,即Content部分在被HTTP encode之前的原始数据。 | 可选 |
公共响应头
头域 | 说明 |
---|---|
Content-Length | RFC2616中定义的HTTP请求内容的类型。 |
x-bce-request-id | 对应请求的requestId。 |
错误码
错误信息除了HTTP状态码以外,应同时在HTTP body中包含下表的参数,内容如下:
参数名 | 类型 | 说明 |
---|---|---|
requestId | String | 导致该错误的requestId。 |
code | String | 表示具体错误类型。 |
message | String | 有关该错误的详细说明。 |
例如:
{
"code":"IllegalRequestUrl",
"message":"The requested url belongs to domain which is not under acceleration",
"requestId":" 81d0b05f-5ad4-1f22-8068-d5c9de60a1d7"
}
公共错误码
错误码 | 消息 | HTTP状态码 | 语义 |
---|---|---|---|
AccessDenied | Access denied. | 403 Forbidden | 无权限访问对应的资源 |
InappropriateJSON | The JSON you provided was well-formed and valid, but not appropriate for this operation. | 400 Bad Request | 请求中的JSON格式正确,但语义上不符合要求。如缺少某个必需项,或者值类型不匹配等。出于兼容性考虑,对于所有无法识别的项应直接忽略,不应该返回这个错误。 |
InternalError | We encountered an internal error. Please try again. | 500Internal Server Error | 所有未定义的其他错误。在有明确对应的其他类型的错误时(包括通用的和服务自定义的)不应该使用。 |
InvalidAccessKeyId | The Access Key ID you provided does not exist in our records. | 403 Forbidden | Access Key ID不存在 |
InvalidHTTPAuthHeader | The HTTP authorization header is invalid. Consult the service documentation for details. | 400 Bad Request | Authorization头域格式错误 |
InvalidHTTPRequest | There was an error in the body of your HTTP request. | 400 Bad Request | HTTP body格式错误。例如不符合指定的Encoding等 |
InvalidURI | Could not parse the specified URI. | 400 Bad Request | URI形式不正确。例如一些服务定义的关键词不匹配等。对于ID不匹配等问题,应定义更加具体的错误码,例如NoSuchKey。 |
MalformedJSON | The JSON you provided was not well-formed. | 400 Bad Request | JSON格式不合法 |
InvalidVersion | The API version specified was invalid. | 404 Not Found | URI的版本号不合法 |
OptInRequired | A subscription for the service is required. | 403 Forbidden | 没有开通对应的服务 |
PreconditionFailed | The specified If-Match header doesn't match the ETag header. | 412 Precondition Failed | 详见ETag |
RequestExpired | Request has expired. Timestamp date is XXX. | 400 Bad Request | 请求超时。XXX要改成x-bce-date的值。如果请求中只有Date,则需要将Date转换为datetime。 |
IdempotentParameterMismatch | The request uses the same client token as a previous, but non-identical request. | 403 Forbidden | clientToken对应的API参数不一样。 |
SignatureDoesNotMatch | The request signature we calculated does not match the signature you provided. Check your Secret Access Key and signing method. Consult the service documentation for details. | 400 Bad Request | Authorization头域中附带的签名和服务端验证不一致 |