实现 API 调用接口
实现 API 调用接口
API 简介
API 的概念
API(Application Programming Interface)
应用程序编程接口是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一次例程的能力,而又无需访问源码或理解内部工作机制的细节。
API 的特点
- 一个明确定义的接口,可以为其他软件提供特定服务。
- 可以小到只包含一个单独的函数,也可以大到包含数以百计的类、方法、全局函数、数据类型、枚举类型和常量等。
- 可以小到只包含一个单独的函数,也可以大到包含数以百计的类、方法、全局函数、数据类型、枚举类型和常量等。
- API 的实现是私有的,也可以是开源的。
API 的分类
面向对象语言的 API
例:Java API 列表
库与框架的 API
例:Windows API、Windows DirectX
API 与协议
例:LDAP 应用程序接口
API 与设备接口
例:PC BIOS 调用接口、ASPI for SCSI 设备接口
Web API
例:Google 地图 API、新浪微博 API、阿里云 API 市场
为什么要使用 API
- 快速扩展功能
- 避免“造轮子”,提高开发效率
- 降低模块之间的耦合度
API的请求与认证
Web API 协议及 HTTP 请求
好处:客户端与服务端的开发语言无关,利于微服务和分布式的开发。
- 客户端向服务器发送一个请求
- 服务器给客户端一个响应,告诉客户端是否可以完成它请求的工作
HTTP请求包含的内容
URL(API调用地址)、请求方式、Headers(请求头)、Body(请求主体)
Headers(请求头)
提供了请求的元信息,是一个简单的项目列表,其中有客户端发送请求的时间和请求主体的大小、身份认证等信息。
Body(请求主体)
包含了客户端希望发送给服务器的数据。
API 请求方式
常见的主要有四种:
- GET 请求服务器获取一个资源
- POST 请求服务器创建一个新的资源
- PUT 请求服务器编辑或更新一个已存在的资源
- DELETE 请求服务器删除一个资源
返回状态码
- 成功调用 API 后会有返回一个状体码,例如成功返回 2xx;
HTTP 状态码 | 含义 |
---|---|
200 OK - [GET] | 服务器成功返回用户请求的数据 |
204 NO CONNTENT - [DELETE] | 用户数据删除成功 |
... | ... |
未调用成功,会返回 5xx 表示服务不可用;
例如:500 API 网关内部错误/底层服务错误;503 服务不可用,504 后端服务超时。
返回数据格式
json 格式(多采用)
表示对象,键值对类型
{"name":"a","age":20}
表示数组,采用方括号
如下:
{ "code":2000, "data":[ { "name":"a", "age":19 }, { "name":"b", "age":20 } ] }
- xml 格式
<?xml version="1.0" encoding="utf-8" ?> <country> <name>中国</name> <province> <name>河南</name> </province> <province> <name>广州</name> </province> </country>
API 身份认证及签名认证
- API 有不同的认证方式
再阿里云中,有两种认证方式
简单认证,基于 APPCODE 方式
如果 APPCODE 获取 API 访问权限
- 请求头 Header 添加 Authorization 字段;
- 配置 Authorization 字段的值为 “APPCODE + 半角空格 + APPCODE 值”
例子:
Authorization:APPCODE 123456789ABC
签名认证方式,AppKey & AppSecret
AppKey 和 AppSecret 相当于当前账户的另外一套账号和密码机制,再控制台找到对于的 AppKey 和 AppSecret
具体使用方式在调用时会有官网介绍。
API 调试和调用(阿里云)
API 调试
阿里云 api 市场提供在线调试功能
API 调用步骤
获取 api 文档--创建应用--获取授权--调用 api
调用 API
调用 api 三个基础条件:
- api
- 应用 app
- api 和 app 的权限关系
API 调用注意事项
- 每个账号下 APP 的个数上限为10个,app 名称应用为账号下唯一
- 调用 api 的流控限制为,单个 ip,qps 不超过100
- 用户有权操作购买的 api 与 app 的授权和解除授权.由服务提供方授权给你的 app 的api,用户无权操作解除授权
- 请求需要包含签名信息