restful api的那些事
1.restful api 简介

传统api:

2.http状态码

3.数据结构格式

4.不可预知的api错误解决方案:
如使用框架,可写个类,重构错误提示。如TP框架可继承Handle并重载render方法:

并配置:
YII2框架在先在config的components中配置
'errorHandler' => [
//'errorAction' => 'site/error',
'class' => 'common\components\EerrorHandler',
],
然后在common\components\目录下新建类:

其他框架可自行配置
5.API数据安全解决方案




下面是基于Yii框架所配置sign验证
生成sign:
public function setSign($data=[]){
//1.按字段排序
ksort($data);
//2.拼接字符串数据
$str=http_build_query($data);//http_build_query()就是将一个数组转换成url 问号?后面的参数字符串,并且会自动进行urlencode处理。
//3.通过aes来加密字符串
$salt=$this->secretKey;
$str=Yii::$app->getSecurity()->encryptByPassword($str,$salt);
//4.所有字符串转换大写
//$str=strtoupper($str);
//将乱码转化成base64
$str=base64_encode($str);
return $str;
}
在每个base中初始化:
/*
* 初始化
* */
public function init(){
$this->checkRequestAuth();
} /*
* 检查每次的请求是否合法
* */
public function checkRequestAuth(){
//首先需要获取headers
$header=Yii::$app->request->headers;
// todo //sign 加密需要 客户端工程师 解密:服务端工程师 //基础参数校验
if (empty($header['sign'])){
echo Json::encode(['code'=>400,'msg'=>'sign未定义']);exit;
}
if (empty($header['did'])){
echo Json::encode(['code'=>400,'msg'=>'did未定义']);exit;
}
//检验sign
if (!$this->checkSign($header)){
echo Json::encode(['code'=>400,'msg'=>'sign错误']);exit;
} }
sign检查:
/*
* 检验sign是否正常
*
* */
public function checkSign($data){ //解密 转base64
$sign=Yii::$app->getSecurity()->decryptByPassword(base64_decode($data['sign']),$this->secretKey);
if (empty($sign)){
return false;
}
parse_str($sign,$signArr);
if (!is_array($signArr) || empty($signArr['did']) || $signArr['did'] != $data['did']){
return false;
}
//sign 过期时间验证
// if (empty($signArr['time']) || time()-ceil($signArr['time']/1000) > $this->sign_time){
// return false;
// } //sign 缓存过期时间验证 保证sign的唯一性
if (Yii::$app->redis->get($data['sign'])){
return false;
} //var_dump($signArr);
return true;
}
6.API接口开发实例(注册路由):
7.注意事项:



restful api的那些事的更多相关文章
- RESTful API 设计最佳实践
背景 目前互联网上充斥着大量的关于RESTful API(为了方便,以后API和RESTful API 一个意思)如何设计的文章,然而却没有一个"万能"的设计标准:如何鉴权?API ...
- Spring Boot中使用Swagger2构建强大的RESTful API文档
由于Spring Boot能够快速开发.便捷部署等特性,相信有很大一部分Spring Boot的用户会用来构建RESTful API.而我们构建RESTful API的目的通常都是由于多终端的原因,这 ...
- 关于RESTFUL API 安全认证方式的一些总结
常用认证方式 在之前的文章REST API 安全设计指南与使用 AngularJS & NodeJS 实现基于 token 的认证应用两篇文章中,[译]web权限验证方法说明中也详细介绍,一般 ...
- 好RESTful API的设计原则
说在前面,这篇文章是无意中发现的,因为感觉写的很好,所以翻译了一下.由于英文水平有限,难免有出错的地方,请看官理解一下.翻译和校正文章花了我大约2周的业余时间,如有人愿意转载请注明出处,谢谢^_^ P ...
- ****RESTful API 设计最佳实践(APP后端API设计参考典范)
http://blog.jobbole.com/41233/ 背景 目前互联网上充斥着大量的关于RESTful API(为方便,下文中“RESTful API ”简写为“API”)如何设计的文章,然而 ...
- RESTful API 设计最佳实践(转)
摘要:目前互联网上充斥着大量的关于RESTful API(为了方便,以后API和RESTful API 一个意思)如何设计的文章,然而却没有一个”万能“的设计标准:如何鉴权?API格式如何?你的API ...
- RESTful API 设计最佳实践(转)
背景 目前互联网上充斥着大量的关于RESTful API(为方便,下文中“RESTful API ”简写为“API”)如何设计的文章,然而却没有一个”万能“的设计标准:如何鉴权?API 格式如何?你的 ...
- flask开发restful api系列(1)
在此之前,向大家说明的是,我们整个框架用的是flask + sqlalchemy + redis.如果没有开发过web,还是先去学习一下,这边只是介绍如果从开发web转换到开发移动端.如果flask还 ...
- RESTful API的设计原则
好RESTful API的设计原则 说在前面,这篇文章是无意中发现的,因为感觉写的很好,所以翻译了一下.由于英文水平有限,难免有出错的地方,请看官理解一下.翻译和校正文章花了我大约2周的业余时间, ...
随机推荐
- JS高级---案例:验证用户输入的是不是邮箱
案例:验证用户输入的是不是邮箱 <!DOCTYPE html> <html lang="en"> <head> <meta charset ...
- Windwos查看本地局域网内所有的ip方法
Windows平台ping测试局域网所有在用IP .打开cmd命令窗口 .输入命令:,,) DO ping -w -n .%i //这个是自己局域网的ip地址前三位 查看自己ip信息的命令是ipcon ...
- style.display = "inline或inline";和style.display = "";的区别
function a(){ if($('#b').attr('checked')){ $('.c').css("display",""); //"di ...
- ORA-01935: missing user or role name
问题描述 ORA-01935: missing user or role name ORA-01935:缺少用户或角色名
- poj1505(二分+贪心)
"最大值尽量小"是一种很常见的优化目标. 关乎于炒书. 题目见此: http://poj.org/problem?id=1505 我的copy的代码如下: #include< ...
- flask入门(二)
接着上文 讲一讲响应 flask调用视图函数后,会将其返回值作为响应的内容.大多数情况下,响应就是一个简单的字符串,作为HTML页面回送客户端.但HTTP协议需要的不仅是作为请求响应的字符串.HTTP ...
- 阿里云的maven仓库 地址
<mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorOf> <name&g ...
- date时间比较
比较前先要对时间判断不能为空 int result = tk.getCloseTime().compareTo(tk.getPlanEndTime()); result = 1: 代表 closeT ...
- linux下grep分析apache日志的命令集合
https://my.oschina.net/hmc0316/blog/112004 实例:月份英文简写英文全称一月Jan.January二月Feb.February三月Mar.March四月Apr. ...
- Unity Coroutine详解(二)
• 介绍• Part 1. 同步等待• Part 2. 异步协程• Part 3. 同步协程• Part 4. 并行协程 1.介绍 ...