閱讀772 返回首頁    go 小米 go 小米6


使用表格存儲的 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由以下方式構成:

  1. 外網訪問 URL:https://<instance>.<region>.ots.aliyuncs.com/<operation>
  2. 內網訪問 URL:https://<instance>.<region>.ots-internal.aliyuncs.com/<operation>
  • instance:實例名稱。實例由用戶創建,可以在表格存儲控製台查看雲賬戶下擁有的實例信息。大小寫不敏感。

  • region:阿裏雲服務節點。表格存儲服務會部署在多個地理位置不同的阿裏雲服務節點內。創建實例時需要製定阿裏雲節點,可以在表格存儲控製台查看實例所在的阿裏雲服務節點名稱。大小寫不敏感。

  • operation:表格存儲操作名稱。可以在 API 操作總覽一章查看所有的表格存儲操作名。大小寫敏感。

如下所示的 URL 是華東 1(杭州)節點,實例名稱為 myInstance 的 ListTable 請求的目標 URL。

  1. 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:請求的簽名。簽名計算方式如下:

    1. Signature = base64(HmacSha1(AccessKeySecret, StringToSign));
    2. StringToSign = CanonicalURI + 'n' + HTTPRequestMethod + 'nn' + CanonicalHeaders
    3. 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:

    1. 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:響應的簽名。隻有請求的簽名被表格存儲驗證通過的條件下,響應才會包含簽名。簽名計算方式如下:

    1. Authorization = 'OTS ' + AccessKeyID + ':' + base64(HmacSha1(AccessKeySecret, stringToSign))
    2. StringToSign = CanonicalHeaders + CanonicalURI
    3. CanonicalHeaders = LowerCase (HeaderName1) + ':' + Trim(HeaderValue1) + 'n' + ... + LowerCase (HeaderNameN) + ':' + Trim(HeaderValueN) + 'n'

    上述偽代碼中使用到的函數的說明:

    與上麵請求中所用到的函數相同。

  • CanonicalURI:HTTP URL 中的路徑部分。如下麵示例中,CanonicalURI 為 /ListTable。

    1. 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”。

  1. POST /ListTable HTTP/1.0
  2. x-ots-date: Tue, 12 Aug 2014 10:23:03 GMT
  3. x-ots-apiversion:2014-08-08
  4. x-ots-accesskeyid: 29j2NtzlUr8hjP8b
  5. x-ots-contentmd5: 1B2M2Y8AsgTpgAmY7PhCfg==
  6. x-ots-instancename: naketest

那麼用戶請求的簽名結果如下:

  1. 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'
  2. signature = base64(HmacSha1('8AKqXmNBkl85QK70cAOuH4bBd3gS0J', stringToSign))
  3. = '4xap392B7EBpN+RmlHgNowjoG1w='

響應簽名示例

假設用戶的 AccessKeyID 為“29j2NtzlUr8hjP8b”,AccessKeySecret 為“AKqXmNBkl85QK70cAOuH4bBd3gS0J”。

  1. /ListTable
  2. x-ots-contentmd5: 1B2M2Y8AsgTpgAmY7PhCfg==
  3. x-ots-requestid: 0005006c-0e81-db74-4a34-ce0a5df229a1
  4. x-ots-contenttype: protocol buffer
  5. x-ots-date:Tue, 12 Aug 2014 10:23:03 GMT

那麼表格存儲響應的簽名結果如下:

  1. 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'
  2. authorization = 'OTS ' + AccessKeyID + ':' + base64(HmacSha1('8AKqXmNBkl85QK70cAOuH4bBd3gS0J', stringToSign))
  3. = 'OTS 29j2NtzlUr8hjP8b:Y24MHhVti5UhSCW5qsUSDvT9SOk='

最後更新:2016-11-23 16:03:56

  上一篇:go 表格存儲的數據操作__開發指南_表格存儲-阿裏雲
  下一篇:go 表格存儲的錯誤信息__開發指南_表格存儲-阿裏雲