api接口详解大全?优秀的设计是产品变得卓越的原因设计API意味着提供有效的接口,可以帮助API使用者更好地了解、使用和集成,同时帮助人们有效地维护它每个产品都需要使用手册,API也不例外在API领域,可以将设计视为服务器和客户端之间的协议进行建模API协议可以帮助内部和外部的利益相关者理解应该做什么,以及如何更好地协同工作来构建一个出色的API,今天小编就来聊一聊关于api接口详解大全?接下来我们就一起去研究一下吧!

优秀的设计是产品变得卓越的原因。设计API意味着提供有效的接口,可以帮助API使用者更好地了解、使用和集成,同时帮助人们有效地维护它。每个产品都需要使用手册,API也不例外。在API领域,可以将设计视为服务器和客户端之间的协议进行建模。API协议可以帮助内部和外部的利益相关者理解应该做什么,以及如何更好地协同工作来构建一个出色的API。
一、API接口1.什么是API接口
应用程序编程接口(Application Programming Interface,API接口),是应用程序重要的组成部分,就是应用程序对外提供了一个操作数据的入口,这个入口可以是一个函数或类方法,也可以是一个url地址或者一个网络地址。当客户端调用这个入口,应用程序则会执行对应代码操作,给客户端完成相对应的功能。
2.API接口类型
目前市面上大部分公司开发人员使用的接口实现规范主要有:restful、RPC。
RPC( Remote Procedure Call ): 翻译成中文:远程过程调用[远程服务调用]. 从字面上理解就是访问/调用远程服务端提供的api接口。这种接口一般以服务或者过程式代码提供。
|
动作 |
前缀 |
备注 |
|
获取 |
get |
get{XXX} |
|
获取 |
get |
get{XXX}List |
|
新增 |
add |
add{XXX} |
|
修改 |
update |
update{XXX} |
|
保存 |
save |
save{XXX} |
|
删除 |
delete |
delete{XXX} |
|
上传 |
upload |
upload{XXX} |
|
发送 |
send |
send{XXX} |
公共参数是每个接口都要携带的参数,描述每个接口的基本信息,用于统计或其他用途,放在Header或url参数中。
Queryurl?后面的参数,存放请求接口的参数数据。
Header请求头,存放以下公共参数、APP端公共参数等,也可以存放一些特殊加密字段。
BodyBody体,存放请求接口的参数数据。
|
参数 |
说明 |
备注 |
|
app_id |
标识用户ID |
app_id是全局的,每个app_id将对应一个客户 |
|
app_key |
加密key |
app_key用于参数签名使用,可以理解为加密盐值,注意app_key保存到客户端,不需要作为参数传递,需要做一些安全处理,防止泄露。 |
|
timestamp |
时间戳 |
时间戳,是客户端调用接口时对应的当前时间戳,时间戳用于防止DoS。当黑客劫持了请求的url去DoS,每次调用接口时接口都会判断服务器当前系统时间和接口中传的的timestamp的差值,如果这个差值超过某个设置的时间(假如5分钟),那么这个请求将被拦截掉,如果在设置的超时时间范围内,是不能阻止DoS的。timestamp机制只能减轻DoS的时间,缩短时间。如果黑客修改了时间戳的值可通过sign签名机制来处理。 |
|
request_id |
请求ID |
用户请求ID,是客户端随机生成的值,要保证全局,可以参考snowflake算法,作为参数传递过来,增加request_id的目的是一方面增加sign签名的多变性,另一方面主要用于防重放,还可以作为全链路跟踪排查问题手段。 |
|
sign |
签名 |
一般用于参数签名,防止参数被非法篡改,最常见的是修改金额等重要敏感参数, sign的值一般是将所有非空参数按照升续排序然后 token app_key timestamp request_id拼接在一起,然后使用某种加密算法进行加密,作为接口中的一个参数sign来传递,也可以将sign放到请求头中。接口在网络传输过程中如果被黑客挟持,并修改其中的参数值,然后再继续调用接口,虽然参数的值被修改了,但是因为黑客不知道sign是如何计算出来的,不知道sign都有哪些值构成,不知道以怎样的顺序拼接在一起的,最重要的是不知道签名字符串中的app_key是什么,所以黑客可以篡改参数的值,但没法修改sign的值,当服务器调用接口前会按照sign的规则重新计算出sign的值然后和接口传递的sign参数的值做比较,如果相等表示参数值没有被篡改,如果不等,表示参数被非法篡改了,就不执行接口了。 |
|
token |
系统调用的凭证 |
访问令牌access token, 用于接口中, 用于标识接口调用者的身份、凭证,减少用户名和密码的传输次数。一般情况下客户端(接口调用方)需要先向服务器端申请一个接口调用的账号,服务器会给出一个app_id和一个app_key, app_key用于参数签名使用,注意app_key保存到客户端,需要做一些安全处理,防止泄露。 Token的值一般是UUID,服务端生成Token后需要将token做为key,将一些和token关联的信息作为value保存到缓存服务器中(redis),当一个请求过来后,服务器就去缓存服务器中查询这个Token是否存在,存在则调用接口,不存在返回接口错误,一般通过拦截器或者过滤器来实现。 |
APP端请求参数除了上述公共参数外,还需要以下额外公共参数:
|
参数 |
说明 |
备注 |
|
network |
网络 |
WIFI、4G |
|
operator |
运营商 |
中国联通/移动 |
|
platform |
平台 |
iOS、Android |
|
system |
系统 |
ios 13.3、android 9 |
|
device |
设备型号 |
iPhone XR、小米9 |
|
udid |
设备标示 |
|
若记录数量很多,服务器不可能返回全部记录给用户。API应该提供分页参数及其它筛选参数,过滤返回结果。
参数示例如下limit=10:指定返回记录的数量offset=10:指定返回记录的开始位置。page=2&per_page=100:指定第几页,以及每页的记录数。sort_by=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序。
1)上传/下载上传/下载,参数增加文件md5,用于完整性校验(传输过程可能丢失数据)。2)避免精度丢失缩小单位保存数据,如:钱以分为单位、距离以米为单位。
为了方便给客户端响应,响应数据会包含三个属性,状态码(code),信息描述(message),响应数据(data)。客户端根据状态码及信息描述可快速知道接口,如果状态码返回成功,再开始处理数据。array类型数据。通过list字段,保证data的Object结构。
返回示例:
|
|
分页类型数据。返回总条数,用于判断是否可以加载更多。返回示例:
|
|
响应状态码code统一使用英文组合字符串,多层分级使用“.”分隔,例如:PARAMETER.ILLEGALL
PARAMETER.ILLEGALL代表参数错误,不推荐使用数字,数字错误码可读性太差。
注意:1)返回属性名命名时,建议使用驼峰命名,首字母小写。2)返回属性值为空时,严格按类型返回默认值。3)返回金额类型/时间日期类型的属性值,如果仅用来显示,建议后端返回可以显示的字符串。4)返回业务逻辑的状态码和对应的文案,建议后端两者都返回,中间添加“|”分隔,例如“SUCCESS|成功”,SUCCESS表示接口状态成功,显示给客户表示“成功”。5)调用方不需要的属性,不要返回。
一般调用接口最常用的两种方式就是GET和POST。两者的区别也很明显,GET请求会将参数暴露在浏览器URL中,而且对长度也有限制。为了更高的安全性,所有接口都采用POST方式请求。另外不推荐使用rest的PUT和DELETE,因为很多浏览器不支持,很多框架也不支持。
我们这里用的的GET和POST同RESTFul中的GET、POST是不一样的。通常使用GET、POST的选择点在于,简单的用GET、复杂对象用POST,并没有动作的含义,例如我也可以使用get来执行添加的动作,如果参数很多,我也可以使用POST来执行查询操作;但在REST里,GET对应的是查询一个资源,而POST对应的是新增一个资源,意义是决然不同的。理解这一点非常重要。
返回响应数据采用JSON,不推荐使用XML,XML是W3C为了替换HTML研发出来的,但是现在很明显失败了。默认情况下要支持gzip
获取token一般会涉及到几个参数app_id,app_key,timestamp,request_id,sign。我们通过以上几个参数来获取调用系统的凭证。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70026910/viewspace-2938845/ ,如需转载,请注明出处,否则将追究法律责任。