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