概述
百度对象存储BOS(Baidu Object Storage),是百度智能云对外提供的稳定、安全、高效以及高扩展存储服务,支持文本、多媒体、二进制等任何类型的数据存储。数据多地域跨集群的存储,以实现资源统一利用,降低使用难度,提高工作效率。用户可以通过本文档提供的简单的RESTful API接口,进行资源管理以及数据上传下载等操作。
API3.0介绍
百度智能云API升级至API3.0,提供可视化的API调试界面,并能自动生成调用接口所需的代码,帮助开发者更高效地开展研发测试工作。 API3.0现已支持对象存储(BOS)、弹性公网IP(EIP)、数据传输服务(DTS)等产品,更多产品接入中,敬请期待。
API3.0目前处于公测阶段,如果您对API3.0的文档、调试界面、代码样例等方面有任何建议,都可以通过文档反馈入口进行反馈。
服务域名
百度智能云开放了多区域支持,BOS支持的区域及对应域名请查看获取访问域名。
规范化字符串(UrlEncode)
通常一个字符串中可以包含任何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
。
说明: 下面这段sample代码以java为例演示如何进行UrlEncode。其中input为输入字符串,encodeSlash用来控制是否对"/"进行编码。在有些情况下,做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();
}
编码规范
- 可解析内容,所有request/response body内容目前均使用UTF-8编码,后续会支持更多encoding类型。
-
在请求时,需要对以下做UrlEncode:
- Objectname,其中,Resource做UrlEncode的时候需要忽略“/”。
- Querystring的Value。
- x-bce-copy-source(忽略“/”)。
- 自定义Meta:Meta Value只支持可见的ASCII字符,如果需要其它的字符,推荐使用UrlEncode处理。
请求语法风格
BOS API的请求语法支持不带“/v{version}/”的风格,也兼容“/v{version}/”的风格。以GetObject为例,下述两种写法的API调用方式都是正确的。
- 不带/v{version}/的请求语法:GET /object HTTP/1.1
- 带/v{version}/的请求语法:GET /v1/bucket/object HTTP/1.1
资源数目及大小规范
- 用户可有的Bucket数目100。如果需要更多bucket,可以通过工单系统申请。
- Bucket中的Object数不限。
- 支持单个Object最大为5TB。
- 用户请求Header大小不得超过8KB。其中用户自定义Meta(x-bce-meta-)不得超过2KB;Meta值不能为空,且只支持ASCII格式。
命名规范
Bucket格式要求:
- 只能包括小写字母,数字和连字符“-”。
- Bucket名开头和结尾必须是小写字母或数字。
- 长度为3~63位。
Object格式要求:长度不能超过1024个字节的UTF-8字符。
日期与时间
日期与时间的表示有多种方式。为统一起见,除非是约定俗成或者有相应规范的,凡是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秒。