本文檔介紹了開(kāi)放文件存儲(chǔ)使用相關(guān)內(nèi)容,您可通過(guò)閱讀以下內(nèi)容,了解具體開(kāi)放文件存儲(chǔ)內(nèi)容。
1.小米開(kāi)放文件存儲(chǔ)(FDS)簡(jiǎn)介
1.1 FDS綜述
小米開(kāi)放文件存儲(chǔ)(File Storage Service,簡(jiǎn)稱(chēng)FDS),是小米開(kāi)放平臺(tái)(http://dev.xiaomi.com)所提供的眾多云服務(wù)之中的一種。FDS向開(kāi)發(fā)者提供了簡(jiǎn)潔直觀的Restful API,開(kāi)發(fā)者可以直接通過(guò)標(biāo)準(zhǔn)Http協(xié)議來(lái)調(diào)用FDS的API,同時(shí),為了方便廣大開(kāi)發(fā)者,F(xiàn)DS目前提供了Java、PHP和Android平臺(tái)的SDK,開(kāi)發(fā)者可以根據(jù)自己的應(yīng)用需求選用合適的SDK。
1.2 FDS的優(yōu)勢(shì)
FDS專(zhuān)注于提供使用簡(jiǎn)便、可靠的文件存儲(chǔ)服務(wù),下面是FDS服務(wù)的一些優(yōu)勢(shì):
·簡(jiǎn)單的數(shù)據(jù)模型:FDS采用了Bucket/Object數(shù)據(jù)模型,跟業(yè)內(nèi)主流系統(tǒng)保持一致,方便開(kāi)發(fā)者理解,降低使用門(mén)檻;
·直觀易用的API:FDS提供了簡(jiǎn)潔的Restful API,開(kāi)發(fā)者可以通過(guò)標(biāo)準(zhǔn)Http協(xié)議直接訪問(wèn);
·完善的認(rèn)證與授權(quán)機(jī)制:FDS支持各種身份認(rèn)證機(jī)制(包括簽名、OAuth2.0和小米SSO認(rèn)證),F(xiàn)DS還支持了完備的授權(quán)管理機(jī)制,最大程度的保護(hù)用戶(hù)數(shù)據(jù)的安全;
·彈性高可用的服務(wù)質(zhì)量:FDS架構(gòu)上支持良好的水平擴(kuò)展性,對(duì)用戶(hù)提供7x24高可用的服務(wù);
·靈活的應(yīng)用場(chǎng)景:支持的文件大小不受限制,能很好地適應(yīng)更種應(yīng)用場(chǎng)景;
·低廉的存儲(chǔ)成本:支持Reed-Solomon編碼,在保證數(shù)據(jù)可靠性的前提下,能夠最大程度地節(jié)約存儲(chǔ)成本。
1.3 FDS的基本概念
·桶(Bucket):Bucket是存儲(chǔ)Object的容器,在同一個(gè)Region內(nèi),Bucket是全局唯一的。每個(gè)Object都存在于某一個(gè)Bucket中,一個(gè)Bucket里面可以包含很多個(gè)Object。
·對(duì)象(Object):Object是用戶(hù)實(shí)際存儲(chǔ)在FDS中的數(shù)據(jù),包括用戶(hù)存儲(chǔ)的文件內(nèi)容和文件相關(guān)的元信息,它們合在一起,統(tǒng)稱(chēng)為Object。
·區(qū)域(Region):Region是物理上數(shù)據(jù)中心的劃分,一個(gè)數(shù)據(jù)中心的FDS稱(chēng)之為一個(gè)Region。同一個(gè)Region內(nèi)的Bucket在該Region內(nèi)是全局唯一的。
2.用戶(hù)身份認(rèn)證
2.1簽名認(rèn)證
本部分介紹FDS中用到的簽名認(rèn)證的基本原理。
2.1.1基本概念
使用FDS服務(wù)的簽名算法,需要了解以下基本概念:
·App Access Key:開(kāi)發(fā)者在小米開(kāi)放平臺(tái)申請(qǐng)的App Access Key,用于標(biāo)識(shí)開(kāi)發(fā)者的App;
·App Secret Key:開(kāi)發(fā)者在小米開(kāi)放平臺(tái)申請(qǐng)App Access Key時(shí)頒發(fā)的App Secret Key,這個(gè)由用戶(hù)自己保存,是用來(lái)做簽名時(shí)的密鑰;
·Signature:根據(jù)Access Key,Secret Key和用戶(hù)請(qǐng)求計(jì)算出的數(shù)字簽名,用于驗(yàn)證用戶(hù)身份。
2.1.2基于簽名的認(rèn)證過(guò)程
用戶(hù)要使用簽名來(lái)認(rèn)證身份,通常需要按下面的步驟來(lái)進(jìn)行:
·構(gòu)建準(zhǔn)備發(fā)往FDS的Http請(qǐng)求;
·使用App Secret Key和構(gòu)建好的請(qǐng)求內(nèi)容,計(jì)算簽名;
·將計(jì)算好的簽名和App Access Key組合起來(lái),置于Http請(qǐng)求的“authorization”Header中,將請(qǐng)求發(fā)往FDS;
·FDS收到請(qǐng)求,從”authorization”Header中解析中App Access Key和對(duì)應(yīng)的簽名;
·FDS用解析出的App Access Key獲取到對(duì)應(yīng)的App Secret Key;
·FDS用App Secret Key和請(qǐng)求內(nèi)容進(jìn)行簽名,得到服務(wù)端簽名;
·FDS對(duì)比服務(wù)端簽名和用戶(hù)請(qǐng)求解析出來(lái)簽名,如果一致剛認(rèn)證通過(guò),否則認(rèn)證不通過(guò)。
注意:App Secret Key不會(huì)在上述請(qǐng)求過(guò)程中傳輸。
2.1.3簽名算法
簽名算法是簽名認(rèn)證的核心,以下是簽名算法的詳細(xì)介紹:
·簽名在Http頭中的格式:“authorization:Galaxy-V2“+““+App Access Key+“:“+Signature;
·簽名計(jì)算:Signature=Base64(Hmac-Sha1(AppAccessSecret,StringToSign));
·簽名字符串(StringToSign)的構(gòu)造:StringToSign=HttpMethod+“n”+content-md5+“n”+content-type+“n”+date+“n”+CanonicalizedHeaders+CanonicalizedResource;
·CanonicalizedHeaders構(gòu)造:
用戶(hù)可以通過(guò)“x-xiaomi-“的方式,向FDS傳自定義的Header,CanonicalizedHeaders指的是規(guī)范化過(guò)之后的用戶(hù)自定義的Headers,規(guī)范化的過(guò)程如下:
1.所有的Header都要轉(zhuǎn)成全小寫(xiě);
2.將Header按Key進(jìn)行字典序排序;
3.將具有相關(guān)Key的Headers合并,多個(gè)值之間用”,”分隔;
4.將上述字符串連接起來(lái)即是CanonicalizedHeaders。
·CanonicalizedResource構(gòu)造:CannonicalizedResource是由用戶(hù)請(qǐng)求的Uri的相對(duì)路徑加上FDS預(yù)定義的SubResource(Acl等)相關(guān)的參數(shù)組成的。
2.1.4簽名庫(kù)
FDS目前提供了C++/Java/PHP版本的簽名庫(kù),詳細(xì)的簽名算法可以參見(jiàn)具體的簽名庫(kù)的實(shí)現(xiàn)。
3.Bucket操作REST API指南
3.1列所有Bucket
·語(yǔ)義:列出當(dāng)前用戶(hù)所擁有的所有Buckets
·語(yǔ)法:GET/HTTP/1.1 Host:files.fds.api.xiaomi.com Date:date Authorization:authorization_string
·請(qǐng)求參數(shù):無(wú)
·請(qǐng)求頭:
3.2創(chuàng)建新Bucket
·語(yǔ)義:創(chuàng)建指定名字的Bucket
·語(yǔ)法:PUT/bucket_name HTTP/1.1 Host:files.fds.api.xiaomi.com Date:date Content-Length:content_length Authorization:authorization_string
·請(qǐng)求參數(shù):
·請(qǐng)求頭:
3.3列Bucket下面的Object
·語(yǔ)義:列出指定Bucket下面所有的Objects
·語(yǔ)法:GET/bucket_name HTTP/1.1 Host:files.fds.api.xiaomi.com Date:date Authorization:authorization_string
·請(qǐng)求參數(shù):
·請(qǐng)求頭:
3.4刪除Bucket
·語(yǔ)義:刪除指定名字的Bucket
·語(yǔ)法:DELETE/bucket_name HTTP/1.1 Host:files.fds.api.xiaomi.com Date:date Authorization:authorization_string
·請(qǐng)求參數(shù):無(wú)
·請(qǐng)求頭:
3.5判斷Bucket存在性
·語(yǔ)義:判斷指定的Bucket是否存在
·語(yǔ)法:HEAD/bucket_name HTTP/1.1 Host:files.fds.api.xiaomi.com Date:date Authorization:authorization_string
·請(qǐng)求參數(shù):無(wú)
·請(qǐng)求頭:
4.Object操作REST API指南
4.1上傳Object(PUT)
·語(yǔ)義:上傳指定名字的Object到指定的Bucket下,同名Object為覆蓋語(yǔ)義
·語(yǔ)法:PUT/bucket_name/object_nameHTTP/1.1 Host:files.fds.api.xiaomi.com Date:date Authorization:authorization_string body
·請(qǐng)求參數(shù):
·請(qǐng)求頭:
4.2上傳Object(POST)
·語(yǔ)義:從指定的Bucket下載指定的Object
·語(yǔ)法:GET/bucket_name/object_nameHTTP/1.1 Host:files.fds.api.xiaomi.com Date:date Authorization:authorization_string
·請(qǐng)求參數(shù):
·請(qǐng)求頭:
4.3刪除Object
·語(yǔ)義:從指定的Bucket下刪除指定的Object
·語(yǔ)法:DELETE/bucket_name/object_nameHTTP/1.1 Host:files.fds.api.xiaomi.com Date:date Authorization:authorization_string
·請(qǐng)求參數(shù):
·請(qǐng)求頭:
4.4判斷Object存在性
·語(yǔ)義:刪除指定名字的Bucket
·語(yǔ)法:DELETE/bucket_name HTTP/1.1 Host:files.fds.api.xiaomi.com Date:date Authorization:authorization_string
·請(qǐng)求參數(shù):無(wú)
·請(qǐng)求頭:
4.5判斷Bucket存在性
·語(yǔ)義:判斷指定Bucket下是否存在指定的Object
·語(yǔ)法:HEAD/bucket_name/object_nameHTTP/1.1 Host:files.fds.api.xiaomi.com Date:date Authorization:authorization_string
·請(qǐng)求參數(shù):無(wú)
·請(qǐng)求頭:
4.6 Pre-signed URI
Pre-signed URI是FDS提供的一種靈活的共享資源的方式。Object的擁有者使用自己的App Secret Key預(yù)先對(duì)Object的訪問(wèn)鏈接進(jìn)行簽名,生成出帶一定有效期的Pre-signed URI。Object擁有者將該P(yáng)re-signed URI發(fā)給其它用戶(hù),其它用戶(hù)在上述有效期內(nèi)可以用該P(yáng)re-signed URI對(duì)指定的Object,執(zhí)行指定的操作。
Pre-signed URI的格式如下:http://files.fds.api.xiaomi.com/bucket_name/object_name?Expires=expires&GalaxyAccessKeyId=app_access_key&Signature=signature
·參數(shù)說(shuō)明:
5.FDS錯(cuò)誤碼參考
6.其它
6.1使用縮略圖服務(wù)
FDS支持對(duì)JPEG/PNG/GIF三種類(lèi)型的圖片進(jìn)行縮略,用戶(hù)可以自行指定縮略的長(zhǎng)、寬,具體用法是在請(qǐng)求的URL后面加下列參數(shù):
6.2使用Https進(jìn)行安全訪問(wèn)
FDS支持通過(guò)Https進(jìn)行訪問(wèn),將正常訪問(wèn)的URL中的scheme由Http替換為Https即可。對(duì)于比較敏感的用戶(hù)信息,請(qǐng)盡量使用Https進(jìn)行上傳、下載。
6.3使用CDN加速下載請(qǐng)求
FDS支持通過(guò)CDN加速下載請(qǐng)求,對(duì)于下載請(qǐng)求量比較大的應(yīng)用,請(qǐng)盡量使用CDN來(lái)進(jìn)行下載。CDN服務(wù)的地址為:
http://cdn.fds.api.xiaomi.com https://cdns.fds.api.xiaomi.com
7.文檔修訂歷史
2014/10/23,完成初始版本。