使用表格存儲的 API__開發指南_表格存儲-阿裏雲
應用程序可以使用阿裏雲官方發布的表格存儲 SDK 來訪問表格存儲,也可以通過 POST 方法發送 HTTP 請求來訪問表格存儲。
以下將介紹 HTTP 請求結構和數據格式,以及如何構造 HTTP 請求和解析 HTTP 請求的返回結果。最後介紹表格存儲請求返回的錯誤狀態碼。Java 和 Python 語言的開發者可使用官方的 Java 和 Python SDK。如果需要使用 Java 和 Python 以外的語言訪問表格存儲,可以根據本章內容使用 HTTP 消息與表格存儲進行交互,也可以自行編寫 SDK。
當前表格存儲的 API 版本
API Version: 2014-08-08
HTTP 消息
表格存儲接收應用程序的 HTTP 請求,執行相應的邏輯並以 HTTP 消息返回處理後的結果數據。HTTP 請求和響應中的數據通過 ProtocolBuffer 協議格式進行組織,關於 ProtocolBuffer 協議的更多內容,請參見表格存儲 ProtocolBuffer 消息定義。下麵分別介紹 HTTP 請求的 header 和 body, 以及響應的具體格式。
HTTP Request
HTTP Request URL
訪問表格存儲的URL由以下方式構成:
外網訪問 URL:https://<instance>.<region>.ots.aliyuncs.com/<operation>
內網訪問 URL:https://<instance>.<region>.ots-internal.aliyuncs.com/<operation>
instance:實例名稱。實例由用戶創建,可以在表格存儲控製台查看雲賬戶下擁有的實例信息。大小寫不敏感。
region:阿裏雲服務節點。表格存儲服務會部署在多個地理位置不同的阿裏雲服務節點內。創建實例時需要製定阿裏雲節點,可以在表格存儲控製台查看實例所在的阿裏雲服務節點名稱。大小寫不敏感。
operation:表格存儲操作名稱。可以在 API 操作總覽一章查看所有的表格存儲操作名。大小寫敏感。
如下所示的 URL 是華東 1(杭州)節點,實例名稱為 myInstance 的 ListTable 請求的目標 URL。
https://myInstance.cn-hangzhou.ots.aliyuncs.com/ListTable
HTTP Request Header
表格存儲規定 HTTP 請求的 Header 必須包含以下信息:
x-ots-date:請求發出時間。日期格式采用 rfc822 標準,並使用 UTC 時間,格式為“%a, %d %b %Y %H:%M:%S GMT”。
x-ots-apiversion:API 的版本號。版本號是一個日期字符串,本文檔對應的 API 版本號為 2014-08-08。
x-ots-accesskeyid:用戶的 AccessKeyID。
x-ots-instancename:實例名稱。
x-ots-contentmd5:對 HTTP body 中計算出的 MD5,使用 base64 進行編碼。
x-ots-signature:請求的簽名。簽名計算方式如下:
Signature = base64(HmacSha1(AccessKeySecret, StringToSign));
StringToSign = CanonicalURI + 'n' + HTTPRequestMethod + 'nn' + CanonicalHeaders
CanonicalHeaders = LowerCase (HeaderName1) + ':' + Trim(HeaderValue1) + 'n' + ... + LowerCase (HeaderNameN) + ':' + Trim(HeaderValueN) + 'n'
上述偽代碼中使用到的函數的說明:
HmacSha1:Hmac-Sha1 加密算法。計算表格存儲請求簽名時請將 StringToSign 作為消息,AccessKeySecret 作為密鑰。
base64:base64 編碼算法。
LowerCase:將字符串中的字母全部變成小寫。
Trim:去除字符串首尾處的空白字符。
CanonicalURI:HTTP URL 中的路徑部分。如下麵示例中,CanonicalURI 為 /ListTable:
https://myInstance.cn-hangzhou.ots.aliyuncs.com/ListTable
HTTPRequestMethod:HTTP 請求方法。如 GET、POST 或 PUT 等,表格存儲的 HTTP API 隻支持 POST 方法。注意 POST 需要大寫。
CanonicalHeaders:CanonicalHeaders 是表格存儲 HTTP header 按照以下規則構造的字符串(不包括 x-ots-signature 頭):
需要包含且隻包含所有以“x-ots-”開頭的表格存儲標準頭。
header 項名稱全部小寫,值必須經過 trim 去除空格。
header 項按照名字的字典序從小到大排序。
header 項的名稱和值之間以“:”相隔。
每個 header 之間以換行符相隔。
表格存儲會對 HTTP 請求進行以下驗證:
驗證 x-ots-contentmd5 頭的值與 HTTP Body 中所含數據計算出的 MD5 是否一致。
驗證請求頭中包含的簽名是否正確。
驗證 x-ots-date 包含的時間與服務器時間相差小於 15 分鍾。
若認證未通過,表格存儲會直接返回身份認證錯誤。
HTTP Request Body
表格存儲規定 HTTP 請求的 Body 部分是表格存儲定義的 ProtocolBuffer 消息序列化之後的字符串,Body 長度不超過 2 MB。
關於表格存儲請求的 ProtocolBuffer 消息定義,請參見 TableStore ProtocolBuffer 消息定義。
HTTP Response
HTTP Response Header
表格存儲規定 HTTP 響應的 Header 包含以下信息:
x-ots-date:請求發出時間,日期格式采用 rfc822 標準,並使用 UTC 時間,格式為“%a, %d %b %Y %H:%M:%S GMT”。
x-ots-requestid:本次請求的請求 ID。
x-ots-contenttype:響應的內容類型。固定為“protocol buffer”的字符串。
x-ots-contentmd5:根據響應內容計算出的 MD5 值,使用 Base64 編碼。
Authorization:響應的簽名。隻有請求的簽名被表格存儲驗證通過的條件下,響應才會包含簽名。簽名計算方式如下:
Authorization = 'OTS ' + AccessKeyID + ':' + base64(HmacSha1(AccessKeySecret, stringToSign))
StringToSign = CanonicalHeaders + CanonicalURI
CanonicalHeaders = LowerCase (HeaderName1) + ':' + Trim(HeaderValue1) + 'n' + ... + LowerCase (HeaderNameN) + ':' + Trim(HeaderValueN) + 'n'
上述偽代碼中使用到的函數的說明:
與上麵請求中所用到的函數相同。
CanonicalURI:HTTP URL 中的路徑部分。如下麵示例中,CanonicalURI 為 /ListTable。
https://myInstance.cn-hangzhou.ots.aliyuncs.com/ListTable
CanonicalHeaders:CanonicalHeaders 是表格存儲 HTTP header 按照以下規則構造的字符串(不包括 x-ots-signature 頭):
需要包含且隻包含所有以“x-ots-”開頭的表格存儲標準頭。
header 項名稱全部小寫,值必須經過 trim 去除空格。
header 項按照名字的字典序從小到大排序。
header 項的名稱和值之間以“:”相隔。
每個 header 之間以換行符相隔。
客戶端應該對表格存儲響應進行以下驗證:
驗證響應頭中包含的簽名是否正確。
驗證 x-ots-date 包含的時間與客戶端時間是否相差 15 分鍾(正負 15 分鍾)。
驗證 x-ots-contentmd5 頭的值與響應數據計算出的 MD5 是否一致。
如驗證不通過,用戶應該在代碼中拒絕這個響應所包含的數據,該響應有可能不是表格存儲服務返回的。
HTTP Response Content
表格存儲規定 HTTP 響應的內容是表格存儲定義的 ProtocolBuffer 消息序列化之後的字符串,Body 長度不超過 2 MB。每一個表格存儲請求消息對應一個表格存儲響應消息,應用程序將響應內容反序列化之後,讀取表格存儲操作的結果。
簽名示例
下麵提供了兩個請求和響應的簽名驗證示例,用戶可以在實現簽名算法後用下麵的例子測試算法的實現是否正確。
請求簽名示例
假設用戶的 AccessKeyID 為“29j2NtzlUr8hjP8b”,AccessKeySecret 為“8AKqXmNBkl85QK70cAOuH4bBd3gS0J”。
POST /ListTable HTTP/1.0
x-ots-date: Tue, 12 Aug 2014 10:23:03 GMT
x-ots-apiversion:2014-08-08
x-ots-accesskeyid: 29j2NtzlUr8hjP8b
x-ots-contentmd5: 1B2M2Y8AsgTpgAmY7PhCfg==
x-ots-instancename: naketest
那麼用戶請求的簽名結果如下:
stringToSign = '/ListTablenPOSTnnx-ots-accesskeyid:29j2NtzlUr8hjP8bnx-ots-apiversion:2014-08-08nx-ots-contentmd5:1B2M2Y8AsgTpgAmY7PhCfg==nx-ots-date:Tue, 12 Aug 2014 10:23:03 GMTnx-ots-instancename:naketestn'
signature = base64(HmacSha1('8AKqXmNBkl85QK70cAOuH4bBd3gS0J', stringToSign))
= '4xap392B7EBpN+RmlHgNowjoG1w='
響應簽名示例
假設用戶的 AccessKeyID 為“29j2NtzlUr8hjP8b”,AccessKeySecret 為“AKqXmNBkl85QK70cAOuH4bBd3gS0J”。
/ListTable
x-ots-contentmd5: 1B2M2Y8AsgTpgAmY7PhCfg==
x-ots-requestid: 0005006c-0e81-db74-4a34-ce0a5df229a1
x-ots-contenttype: protocol buffer
x-ots-date:Tue, 12 Aug 2014 10:23:03 GMT
那麼表格存儲響應的簽名結果如下:
stringToSign = 'x-ots-contentmd5:1B2M2Y8AsgTpgAmY7PhCfg==nx-ots-contenttype:protocol buffernx-ots-date:Tue, 12 Aug 2014 10:23:03 GMTnx-ots-requestid:0005006c-0e81-db74-4a34-ce0a5df229a1n/ListTable'
authorization = 'OTS ' + AccessKeyID + ':' + base64(HmacSha1('8AKqXmNBkl85QK70cAOuH4bBd3gS0J', stringToSign))
= 'OTS 29j2NtzlUr8hjP8b:Y24MHhVti5UhSCW5qsUSDvT9SOk='
最後更新:2016-11-23 16:03:56
上一篇:
表格存儲的數據操作__開發指南_表格存儲-阿裏雲
下一篇:
表格存儲的錯誤信息__開發指南_表格存儲-阿裏雲
漏洞掃描接口__漏洞掃描API_API手冊_移動安全-阿裏雲
DeleteLoadBalancer__LoadBalancer相關API_API 參考_負載均衡-阿裏雲
阿裏雲計算能力實現多項突破 BigBench規模全球首次被拓展至100TB
配置 IDEA 開發環境__開發工具準備_開發者指南_企業級分布式應用服務 EDAS-阿裏雲
日誌分析__快速開始_移動數據分析-阿裏雲
服務查詢__開發環境搭建_開發者指南_企業級分布式應用服務 EDAS-阿裏雲
創建API分組__快速入門(開放API)_API 網關-阿裏雲
阿裏雲發布智能客服機器人雲小蜜,Ometria獲600 萬美元 A 輪融資
設置回源HOST__配置操作接口_API 手冊_CDN-阿裏雲
新建文檔__數據管理_DMS for MongoDB_用戶指南(NoSQL)_數據管理-阿裏雲
相關內容
常見錯誤說明__附錄_大數據計算服務-阿裏雲
發送短信接口__API使用手冊_短信服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
運營商錯誤碼(聯通)__常見問題_短信服務-阿裏雲
設置短信模板__使用手冊_短信服務-阿裏雲
OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
消息通知__操作指南_批量計算-阿裏雲
設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
查詢API調用流量數據__API管理相關接口_API_API 網關-阿裏雲
使用STS訪問__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲