# test2

2017-02-08  本文已影响0人  tommyhxh

test2


<br />

test2

API列表

<div>
<table>
<tr>
<th >API名称</th>
<th >认证方式</th>
<th >描述</th>
</tr>
<tr>
<td>getUserInfo</td>
<td>APP</td>
<td>getUserInfo</td>
</tr>
</table>
</div>

API调用

公共入参

公共请求参数是指每个接口都需要使用到的请求参数。

参数名称 位置 必须 描述
X-Ca-Key Header Appkey,调用API的身份标识,可以到阿里云API网关控制台申请
X-Ca-Signature Header 通过签名计算规则计算的请求签名串,参照:<a href="#Signature">签名计算规则</a>
X-Ca-Timestamp Header API 调用者传递时间戳,值为当前时间的毫秒数,也就是从1970年1月1日起至今的时间转换为毫秒,时间戳有效时间为15分钟
X-Ca-Nonce Header API请求的唯一标识符,15分钟内同一X-Ca-Nonce不能重复使用,建议使用 UUID,结合时间戳防重放
Content-MD5 Header 当请求 Body 非 Form 表单时,需要计算 Body 的 MD5 值传递给云网关进行 Body MD5 校验
X-Ca-Signature-Headers Header 指定哪些Header参与签名,支持多值以","分割,默认只有X-Ca-Key参与签名,为安全需要也请将X-Ca-Timestamp、X-Ca-Nonce进行签名,例如:X-X-Ca-Signature-Headers:Ca-Timestamp,X-Ca-Nonce

<span id="Signature">签名计算规则</span>

请求签名,是基于请求内容计算的数字签名,用于API识别用户身份。客户端调用API时,需要在请求中添加计算的签名(X-Ca-Signature)。

签名计算流程


准备APPkey → 构造待签名字符串stringToSign → 使用Secret计算签名


1.准备APPKey

Appkey,调用API的身份标识,可以到阿里云API网关控制台申请

2.构造待签名字符串stringToSign

String stringToSign=
HTTPMethod + "\n" +
Accept + "\n" + //建议显示设置 Accept Header。当 Accept 为空时,部分 Http 客户端会给 Accept 设置默认值为 /,导致签名校验失败。
Content-MD5 + "\n"
Content-Type + "\n" +
Date + "\n" +
Headers +

Url

HTTPMethod 为全大写,如 POST。

Accept、Content-MD5、Content-Type、Date 如果为空也需要添加换行符”\n”,Headers如果为空不需要添加”\n”。

Content-MD5

Content-MD5 是指 Body 的 MD5 值,只有当 Body 非 Form 表单时才计算 MD5,计算方式为:

String content-MD5 = Base64.encodeBase64(MD5(bodyStream.getbytes("UTF-8")));
bodyStream 为字节数组。

Headers

Headers 是指参与 Headers 签名计算的 Header 的 Key、Value 拼接的字符串,建议对 X-Ca 开头以及自定义 Header 计算签名,注意如下参数不参与 Headers 签名计算:X-Ca-Signature、X-Ca-Signature-Headers、Accept、Content-MD5、Content-Type、Date。

Headers 组织方法:

先对参与 Headers 签名计算的 Header的Key 按照字典排序后使用如下方式拼接,如果某个 Header 的 Value 为空,则使用 HeaderKey + “:” + “\n”参与签名,需要保留 Key 和英文冒号。

String headers =
HeaderKey1 + ":" + HeaderValue1 + "\n"+
HeaderKey2 + ":" + HeaderValue2 + "\n"+
...
HeaderKeyN + ":" + HeaderValueN + "\n"
将 Headers 签名中 Header 的 Key 使用英文逗号分割放到 Request 的 Header 中,Key为:X-Ca-Signature-Headers。

Url

Url 指 Path + Query + Body 中 Form 参数,组织方法:对 Query+Form 参数按照字典对 Key 进行排序后按照如下方法拼接,如果 Query 或 Form 参数为空,则 Url = Path,不需要添加 ?,如果某个参数的 Value 为空只保留 Key 参与签名,等号不需要再加入签名。

String url =
Path +
"?" +
Key1 + "=" + Value1 +
"&" + Key2 + "=" + Value2 +
...
"&" + KeyN + "=" + ValueN
注意这里 Query 或 Form 参数的 Value 可能有多个,多个的时候只取第一个 Value 参与签名计算。

3.使用Secret计算签名

Mac hmacSha256 = Mac.getInstance("HmacSHA256");
byte[] keyBytes = secret.getBytes("UTF-8");
hmacSha256.init(new SecretKeySpec(keyBytes, 0, keyBytes.length, "HmacSHA256"));
String sign = new String(Base64.encodeBase64(Sha256.doFinal(stringToSign.getBytes("UTF-8")),"UTF-8"));
Secret 为 APP 的密钥,请在应用管理中获取。

API名称:getUserInfo

描述

getUserInfo

请求信息

HTTP协议:HTTP

调用地址:901b8c3b37404ca499685a98e9d1cf03-cn-qingdao.alicloudapi.com/getUserInfo

方法:Get

<br />

请求参数

<div>
<table>
<tr>
<th style="width: 20%;">名称</th>
<th style="width: 10%;">位置</th>
<th style="width: 10%;">类型</th>
<th style="width: 10%;">必填</th>
<th style="width: 30%;">描述</th>
</tr>
</table>
</div>

<br />

返回信息

返回参数类型

JSON

返回结果示例

ss

异常返回示例

ss

<br />

错误码

<div>
<table>
<tr>
<th style="width: 15%;">错误码</th>
<th style="width: 20%;">错误信息</th>
<th style="width: 25%;">描述</th>
</tr>
<tr>
<td>公共错误码</td>
<td>--</td>
<td>所有API公用的错误码,请参照《 <a href="#pubError">公共错误码</a> 》</td>
</tr>
</table>
</div>

<span id='pubError'>公共错误</span>

如何获取公共错误

所有的 API 请求只要到达了网关,网关就会返回请求结果信息。

用户需要查看返回结果的头部,即 Header 部分。返回参数如示例:

X-Ca-Request-Id: 7AD052CB-EE8B-4DFD-BBAF-EFB340E0A5AF
//请求唯一ID,请求一旦进入API网关应用后,API网关就会生成请求ID并通过响应头返回给客户端,建议客户端与后端服务都记录此请求ID,可用于问题排查与跟踪
X-Ca-Error-Message: Invalid Url
//API网关返回的错误消息,当请求出现错误时API网关会通过响应头将错误消息返回给客户端
X-Ca-Debug-Info: {"ServiceLatency":0,"TotalLatency":2}
//当打开Debug模式后会返回Debug信息,此信息后期可能会有变更,仅用做联调阶段参考
在 Header 中获得 X-Ca-Error-Message 可以基本明确报错原因,而 X-Ca-Request-Id 可以用于提供给这边的支持人员,供支持人员搜索日志。

公共错误码

客户端错误

错误代码 Http 状态码 语义 解决方案
Throttled by USER Flow Control 403 因用户流控被限制 调用频率过高导致被流控,可以联系 API 服务商协商放宽限制。
Throttled by APP Flow Control 403 因APP流控被限制 调用频率过高导致被流控,可以联系 API 服务商协商放宽限制。
Throttled by API Flow Control 403 因 API 流控被限制 调用频率过高导致被流控,可以联系 API 服务商协商放宽限制。
Throttled by DOMAIN Flow Control 403 因二级域名流控被限制 直接访问二级域名调用 API,每天被访问次数上限1000次。
TThrottled by GROUP Flow Control 403 因分组流控被限制 调用频率过高导致被流控,可以联系 API 服务商协商放宽限制。
Quota Exhausted 403 调用次数已用完 购买的次数已用完。
Quota Expired 403 购买次数已过期 购买的次数已经过期。
User Arrears 403 用户已欠费 请尽快充值续费。
Empty Request Body 400 body 为空 请检查请求 Body 内容。
Invalid Request Body 400 body 无效 请检查请求 Body。
Invalid Param Location 400 参数位置错误 请求参数位置错误。
Unsupported Multipart 400 不支持上传 不支持上传文件。
Invalid Url 400 Url 无效 请求的 Method、Path 或者环境不对。请参照错误说明 Invalid Url。
Invalid Domain 400 域名无效 请求域名无效,根据域名找不到 API。请联系 API 服务商。
Invalid HttpMethod 400 HttpMethod 无效 输入的 Method 不合法。
Invalid AppKey 400 AppKey 无效或不存在 请检查传入的 AppKey。注意左右空格的影响。
Invalid AppSecret 400 APP 的Secret 错误 检查传入的 AppSecret。注意左右空格的影响。
Timestamp Expired 400 时间戳过时 请核对请求系统时间是否为标准时间。
Invalid Timestamp 400 时间戳不合法 请参照 请求签名说明文档。
Empty Signature 404 签名为空 请传入签名字符串,请参照 请求签名说明文档。
Invalid Signature, Server StringToSign:%s 400 签名无效 签名无效,参照 Invalid Signature 错误说明
Invalid Content-MD5 400 Content-MD5 值不合法 请求 Body 为空,但传入了 MD5 值,或 MD5 值计算错误。请参照 请求签名说明文档。

Unauthorized 403 未被授权 APP 未获得要调用的 API 的授权。请参照错误说明 Unauthorized。
Nonce Used|400| SignatureNonce| 已被使用|SignatureNonce 不能被重复使用。
API Not Found| 400 |找不到 API|传入的APIdi地址或者HttpMethod不正确,或已下线。

服务器端错误(调用 API)

以下为API服务端错误,如果频繁错误,可联系服务商。

错误代码 Http状态码 语义 解决方案
Internal Error 500 内部错误 建议重试,或者联系服务商
Failed To Invoke Backend Service 500 底层服务错误 API 提供者底层服务错误,建议重试,如果重试多次仍然不可用,可联系 API 服务商解决
Service Unavailable 503 服务不可用 建议重试,或者联系服务商
Async Service 504 后端服务超时 建议重试,或者联系服务商
上一篇下一篇

猜你喜欢

热点阅读