调用说明
一、概述
百度智能云的 DRCDN 的 API 接口域名 http://cdn.baidubce.com
,所有接口统一使用 /v2 前缀,接口规范遵循 BCE 标准,采用HTTP协议通信,支持 HTTP 1.0/1.1 。支持 HTTP 的 PUT、POST、GET、DELETE 请求方法。
二、通用约定
1、编码及数据格式
数据交换格式使用 JSON 格式,Content-Type 为 applicaton/json 样式,所有 request/response body 内容均使用 UTF-8 编码。
2、日期与时间
日期与时间的表示有多种方式。为统一起见,除非是约定俗成或者有相应规范的,凡是 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 秒。
API 与时间相关的数值类型统一采用上述格式,称为 Timestamp 类型。
3、规范化字符串
通常一个字符串中可以包含任何 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
在请求时,需要对 Querystring 的 Value 做 UrlEncode ,如下所示:
public static String uri-encode(CharSequence input, boolean encodeSlash) {
StringBuilder result = new StringBuilder()
for (int i = 0; i < input.length(); i++) {
char ch = input.charAt(i);
if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z') || (ch >= '0' && ch <= '9') || ch == '_' || ch == '-' || ch == '~' || ch == '.') {
result.append(ch)
} else if (ch == '/') {
result.append(encodeSlash ? "%2F" : ch)
} else {
result.append(toHexUTF8(ch))
}
}
return result.toString()
}
4、编码规范
- 可解析内容,所有 request/response body 内容目前均使用 UTF-8 编码,后续会支持更多 encoding 类型。
- 在请求时,需要对 QueryString 的 Value 做 UrlEncode 。
三、签名认证(自行封装)
API 服务会对每个访问的请求进行身份认证,以保障用户的安全。安全认证采用 Access Key 与请求签名机制。Access Key 由 Access Key ID(简称 AK )和 Secret Access Key(简称 SK )组成,均为字符串,由百度智能云官方颁发给用户。其中 Access Key ID 用于标识用户身份,Secret Access Key 是用于加密签名字符串和服务器端验证签名字符串的密钥,必须严格保密。
1、签名字符串格式
bce-auth-v{version}/{accessKeyId}/{timestamp}/{expireTime}/{signedHeaders}/{signature}
2、签名申请步骤
关于 AK/SK 的获取,请参看 获取 AK/SK。
3、签名生成算法
百度智能云采用统一的API鉴权认证机制,详情请见 鉴权认证机制。
四、签名认证(使用 SDK ,推荐方式)
我们推荐您直接使用签名的 SDK 来计算签名鉴权,然后基于 API 接口文档来集成接口功能。
以 Python SDK 为例,详见:Python SDK 推荐的使用方式
五、公共头
1、公共请求头域
API 服务需要在请求的 HTTP 头域中包含以下信息:
头域(Header) | 说明 | 是否必须 |
---|---|---|
host | http host | 是 |
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 之前的原始数据。 | 否 |
x-bce-request-id | 用来跟踪调试的 Id ,为一个 uuid 字符 | 否 |
2、公共响应头域
头域(Header) | 说明 |
---|---|
x-bce-request-id | 对应请求的 requestId |
Content-Type | application/json,charset=utf-8。一期编码只支持 utf-8 ,所以 charset 是固定的。 |
六、错误信息格式
API 的错误信息除了 HTTP 状态码以外,在 HTTP body 中还包 JSON 格式的错误信息,内容如下:
参数名 | 类型 | 说明 |
---|---|---|
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"
}
七、通用错误码
除了后面各个接口单独列出的错误格式定义以外,API 的通用错误码还包含但不限于以下形式:
HTTP Status Code | Code | Message | 说明 |
---|---|---|---|
400 | InvalidArgument | Invalid Argument. | 无效参数 |
400 | InvalidHTTPAuthHeader | The HTTP authorization header is invalid. Consult the service documentation for details. | Authorization 头域格式错误 |
400 | InvalidHTTPRequest | There was an error in the body of your HTTP request. | HTTP body 格式错误。例如不符合指定的 Encoding 等 |
400 | MalformedJSON | The JSON you provided was not well-formed. | JSON 格式不合法 |
403 | 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. | Authorization 头域中附带的签名和服务端验证不一致 |
403 | InvalidAccessKeyId | The Access Key ID you provided does not exist in our records. | Access Key ID 不存在 |
405 | MethodNotAllowed | he specified method is not allowed against this resource. | 请求的方法不允许 |
500 | InternalError | We encountered an internal error. Please try again. | 未定义的系统错误 |
八、省份、运营商格式
地区 | 映射 | 运营商 | 映射 |
---|---|---|---|
北京 | beijing | 电信 | ct |
天津 | tianjin | 联通 | cnc |
河北 | hebei | 移动 | cmnet |
内蒙古 | nmg | 教育网 | ce |
山西 | shanxi | 鹏博士 | pbs |
上海 | shanghai | 广电 | oc |
安徽 | anhui | 世纪互联 | sjhl |
江苏 | jiangsu | 方正宽带 | fdbn |
浙江 | zhejiang | 华数 | wasu |
山东 | shandong | 其他 | other |
福建 | fujian | ||
江西 | jiangxi | ||
广东 | guangdong | ||
广西 | guangxi | ||
海南 | hainan | ||
河南 | henan | ||
湖北 | hubei | ||
湖南 | hunan | ||
黑龙江 | hlj | ||
吉林 | jilin | ||
辽宁 | liaoning | ||
陕西 | shaanxi | ||
甘肃 | gansu | ||
宁夏 | ningxia | ||
青海 | qinghai | ||
新疆 | xinjiang | ||
重庆 | chongqing | ||
四川 | sichuan | ||
云南 | yunnan | ||
贵州 | guizhou | ||
西藏 | xizang | ||
海外 | oversea | ||
其他 | other |