# test2

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 后端服务超时 建议重试,或者联系服务商
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容