实现调用API接口
什么是 APIAPI介绍API(Application Programming Interface)应用程序编程接口,是一些预先定义的函数,目的为提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码或理解内部工作机制的细节。API特点① 明确定义的接口,可以为其他软件提供特定服务。② API可以小到只包含一个单独的函数,也可以大到半酣数以百计的类、方法...
什么是 API
API介绍
API(Application Programming Interface)应用程序编程接口,是一些预先定义的函数,目的为提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码或理解内部工作机制的细节。
API特点
① 明确定义的接口,可以为其他软件提供特定服务。
② API可以小到只包含一个单独的函数,也可以大到半酣数以百计的类、方法、全面函数、数据类型、枚举类型和常量等。
③ API的实现可以是私有的,也可以是开源的。
API分类
面向对象语言的API:Java API列表;
库与框架的API:Windows API、Windows Direct X;
API与协议:LDAP应用程序接口;
API与设备接口:PC BIOS调用接口、ASPI for SCSI设备接口;
Web API:Google地图API、新浪微博API、阿里云API市场;
为什么使用API
将一个大系统变为一个个小模块,让其互相之间来接耦,以便于快速迭代功能,减少重复开发功能部分。
API请求与认证
Web API基于HTTP协议(好处:客户端与服务器端无关)
HTTP请求机制:
- 客户端向服务端发送请求;
- 服务端给客户端一个响应,告诉客户端是否可以完成请求的工作。
HTTP请求包括内容:
URL(API调用地址) | http://example.com |
Method(请求方法) | POST、GET、PUT、DETELE |
Headers(请求头) | User-Agent ...... |
Body(请求主体) | Data |
其中Method常见有四种,大多使用 GET 与 POST:
- POST:请求服务器创建一个新的资源;
- GET:请求服务器获取一个资源;
- PUT:请求服务器编辑或更新一个已存在的资源;
- DETELE:请求服务器删除一个资源;
Headers提供请求的元信息,一个简单的项目列表,有客户端发送的请求的时间按、主体大小、身份认证等信息。
Body包含了客户端希望发送给服务器的数据。
调用API后,除了返回数据外还包含一个状态码
- 成功调用API后,返回2XX类型
HTTP 状态码 | 语义 |
---|---|
200 OK-[GET] | 服务器成功返回用户请求的数据 |
201 CREATED-[POST/PUT/PATCH] | 用户新建或修改数据成功 |
202 ACCEPTED-[*] | 表示一个请求已经进入后台排队(异步任务) |
204 NO CONTENT-[DETELE] | 用户删除数据成功 |
- API未调用成功,返回错误码,服务端错误码为5XX,表示服务不可用
错误代码 | 描述 | HTTP 状态码 | 语义 |
---|---|---|---|
Internal Error | API网关内部错误 | 500 | 建议重试 |
Failed To Invoke Backend Service | 底层服务错误 | 500 | API提供者底层错误,建议重试;若多次重试仍不可行,联系API服务商解决 |
Service Unavailable | 服务不可用 | 503 | 建议稍后重试 |
Async Service | 后端服务超时 | 504 | 建议稍后重试 |
- 客户端错误码为4XX表示业务报错,此时一般为参数错误,请求方式有误或被流程限制等业务类错误,详见下表或点击此处
错误代码 | 描述 | HTTP 状态码 | 语义 |
---|---|---|---|
MissingParameter | The input parameter "<parameter name>" that is mandatory for processing this request is not supplied | 400 | 缺少参数 |
InvalidParameter | The specified value of parameter "<parameter name>" is not valid. | 400 | 参数取值无效 |
UnsupportedOperation | The specified action is not supported. | 400 | 无效的接口 |
NoSuchVersion | The specified version does not exist. | 400 | 无效的版本 |
Throttling | Request was denied due to request throttling. | 400 | 操作被流量控制系统拒绝 |
InvalidAccessKeyId.NotFound | The Access Key ID provided does not exist in our records. | 400 | 无效的Access Key |
Forbidden | User not authorized to operate on the specified resource. | 403 | 操作被禁止 |
Forbidden.RiskControl | This operation is forbidden by Aliyun Risk Control system. | 403 | 操作被风险控制系统禁止 |
SignatureDoesNotMatch | The signature we calculated does not match the one you provided. Please refer to the API reference about authentication for details. | 403 | 无效的签名 |
Forbidden.UserVerification | Your user account is not verified by Aliyun. | 403 | 无实名验证 |
目前最新的API大多使用JSON数据格式。JSON为一种轻量级数据交换格式,易于人们阅读和编写,同时也易于机器解析和生成
JSON:
{
"name":"中国",
"province":[{
"name":"黑龙江",
"cities":{"city":["哈尔滨","大庆"]}
},{
"name":"广东",
"cities":{"city":["广州","深圳","珠海"]}
}]
}
XML:
<?xml version = "1.0" encoding="utf-8" ?>
<country>
<name>中国</name>
<province>
<name>黑龙江</name>
<citys>
<city>哈尔滨</city>
<city>大庆</city>
</citys>
</province>
</country>
JSON数据格式表示方法
- 表示对象使用 { } 键值对{"T":"value","T":"value"}
- 表示数组使用 [ ] 数组中元素用 , 隔开
API简单身份认证(APPCODE)
在请求Headers中添加Authorization字段,配置Authorization字段的值为“APPCODE + 半角空格 + APPCODE值”
- 格式: Authorization:APPCODE Appcode值
- 示例: Authorization:APPCODE 3F2504E04F8911D39
API签名认证(APPKey & Secret)
APPKey 和 Secret 相当于当前账户的另一套账号和密码
API调用
要调用API需要三个基础条件:
- API:您即将要调用的API ,明确API参数定义;
- 应用app :作为您调用API时的身份,有AppKey和AppSecret用于验证您的身份;
- API和App的权限关系: App想调用某个API需要具有该API的权限,这个权限通过授权的功能来建立;
API调用注意事项:
- 每个账号下APP个数上限为10个, APP名称应为账号下唯一;
- 调用API的流控限制为,单个IP , QPS不超过100;
- 你有权操作购买的API与APP的授权和解除授权。由服务提供方授权给你的APP的API,你无权操作解除授权;
- 你的请求需要包含签名信息,请参照文档请求签名说明文档;
更多推荐
所有评论(0)