如何使用API-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

如何使用API

云栖大讲堂 2017-10-26 10:37:00 1915

应用程序可以使用阿里云官方发布的OTS SDK 来访问OTS,也可以通过POST 方法发送HTTP 请求来访问OTS。这里将介绍HTTP 请求结构和数据格式,以及如何构造HTTP 请求和解析HTTP 请求的返回结果。Java 和Python 语言的开发者可使用官方的Java 和Python SDK。如果需要使用Java 和Python 以外的语言访问OTS,可以根据这里的内容使用HTTP 消息与OTS 进行交互,也可以自行编写SDK。

HTTP Request
HTTP Request URL
访问OTS 的URL 由以下方式构成:

? instance
实例名称。实例由用户创建,可以在OTS 控制台查看云账户下拥有的Instance 信息。大小写不敏感。

? region
阿里云服务节点。OTS 服务会部署在多个地理位置不同的阿里云服务节点内。创建实例时需要制定阿里云节点,可以在OTS 控制台查看实例所在的阿里云服务节点名称。大小写不敏感。

? operation
OTS 操作名称,可以在API Reference一章查看所有的OTS 操作名。大小写敏感。

如下所示的URL 是杭州节点,实例名称为myInstance 的ListTable 请求的目标URL。


HTTP Request Header
OTS 规定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
请求的签名。签名计算方式如下:

     – 伪代码中使用到的函数的说明:
          * HmacSha1 - Hmac-Sha1 加密算法。计算OTS 请求签名时请将StringToSign 作为消息,AccessKeySecret 作为密钥
          * base64 - base64 编码算法
          * LowerCase - 将字符串中的字母全部变成小写
          * Trim - 去除字符串首尾处的空白字符

     – CanonicalURI
     HTTP URL 中的路径部分,如" http://myInstance.cn-hangzhou.ots.aliyuncs.com/ListTable"中,CanonicalURI 为"/ListTable"

     – HTTPRequestMethod
     HTTP 请求方法,如GET、POST 或PUT 等,OTS 的HTTP API 只支持POST 方法。注意POST 需要大写

     – CanonicalHeaders
     CanonicalHeaders 是OTS HTTP header 按照以下规则构造的字符串(不包括x-otssignature头):
         * 需要包含且只包含所有以'x-ots-' 开头的OTS 标准头
         * header 项名称全部小写,值必须经过trim 去除空格
         * header 项按照名字的字典序从小到大排序
         * header 项的名称和值之间以':' 相隔
         * 每个header 之间以换行符相隔

OTS 会对HTTP 请求进行验证:
? 验证x-ots-contentmd5 头的值与HTTP Body 中所含数据计算出的MD5 是否一致
? 验证请求头中包含的签名是否正确
? 验证x-ots-date 包含的时间与服务器时间相差小于15 分钟
若认证未通过,OTS 会直接返回身份认证错误。

HTTP Request Body
OTS 规定HTTP 请求的Body 部分是OTS 定义的ProtocolBuffer 消息序列化之后的字符串,Body 长度不超过2MB。

HTTP Response
HTTP Response Header
OTS 规定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
响应的签名。只有请求的签名被OTS 验证通过的条件下,响应才会包含签名。签名计算方式如下:

     – 伪代码中使用到的函数的说明:
     与上面请求中所用到的函数相同

     – CanonicalURI
     HTTP URL 中的路径部分,如" http://myInstance.cn-hangzhou.ots.aliyuncs.com/ListTable"中,CanonicalURI 为"/ListTable"

     – CanonicalHeaders
     CanonicalHeaders 是OTS HTTP header 按照以下规则构造的字符串(不包括x-otssignature头):
         * 需要包含且只包含所有以'x-ots-' 开头的OTS 标准头
         * header 项名称全部小写,值必须经过trim 去除空格
         * header 项按照名字的字典序从小到大排序
         * header 项的名称和值之间以':' 相隔
         * 每个header 之间以换行符相隔

客户端应该对OTS 响应进行以下验证:
? 验证响应头中包含的签名是否正确
? 验证x-ots-date 包含的时间与客户端时间是否相差15 分钟(正负15 分钟)
? 验证x-ots-contentmd5 头的值与响应数据计算出的MD5 是否一致

如验证不通过,用户应该在代码中拒绝这个响应所包含的数据,该响应有可能不是OTS 服务返回的。

HTTP Response Content
OTS 规定HTTP 响应的内容是OTS 定义的ProtocolBuffer 消息序列化之后的字符串,Body长度不超过2MB。每一个OTS 请求消息对应一个OTS 响应消息,应用程序将响应内容反序列化之后,读取OTS 操作的结果。

签名示例
下面提供了两个请求和响应的签名验证示例,用户可以在实现签名算法后用下面的例子测试算法的实现是否正确。

请求签名示例
假设用户的AccessKeyID 为:'29j2NtzlUr8hjP8b',AccessKeySecret 为: '8AKqXmNBkl85QK70cAOuH4bBd3gS0J'

那么用户请求的签名结果如下


响应签名示例
假设用户的AccessKeyID 为:'29j2NtzlUr8hjP8b',AccessKeySecret 为: 'AKqXmNBkl85QK70cAOuH4bBd3gS0J'

那么OTS 响应的签名结果如下

[backcolor=transparent]
算法 Java API 定位技术 开发工具 开发者 数据格式 Python
分享到
取消 提交回答
全部回答(0)
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题
推荐课程