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中的window.location.search的用法与作用。
用该属性获取页面 URL 地址: window.location 对象所包含的属性 属性 描述 hash 从井号 (#) 开始的 URL(锚) host 主机名和当前 URL 的端口号 hostnam ...
- struts2中的constant常量配置
struts2中的constant配置详解 本文主要讲解一下struts2中的constant常量配置,内容主要来自于互联网的整理.<?xml version="1.0" e ...
- mysql-sql分析策略及优化
tranlation事务:从失败中回复到正常状态的方法多个应用并发访问数据库时,提供隔离方法 acid原子性:要么成功.要么失败一致性:数据保持“合理性”隔离型:多个事务同时并发执行,每个事务就像各自 ...
- lua学习,笔者自用
标识符与关键字A:常量用全大写和下划线,eg: My_ACCOUNTB: 变量的第一个字母小写,eg: strNumberC: 全局变量第一个字母用小写g表示,eg: gMyAcountD: 函数名第 ...
- HTTP状态码的浪漫故事
小明是一个程序员,经常加班,在一个和尚部门,一个妹子都没有,所以一直单身. 404(Not Found):服务器无法根据客户端的请求找到资源(网页) 过年回家,老爸老妈给门开一条缝,先看看小明身后-- ...
- Request功能
1.获取请求消息数据 获取请求行数据 获取请求头数据 获取请求体数据 请求空行没必要获取 1.获取请求行数据 GET /虚拟目录 /servlet路径 ?请求参数 HTTP/1.1 GET/day1 ...
- python面试的100题(9)
17.python如何实现单例模式?请写出两种实现方式? 第一种方法:使用装饰器 def singleton(cls): instances = {} def wrapper(*args, **kwa ...
- 第五十三篇 Linux相关——Web服务器
No.1. Apache基本操作 安装:sudo yum -y install httpd 启动:service httpd start 停止:service httpd stop 查看服务运 ...
- 10day 字符集优化 重点
什么是字符编码: 可以实现对非英文字符的支持 计算机操作系统是谁发明的? --美国人--英语 支持中文比较好的编码: UTF-8 比较通用 GBK 比较国际通用 出现乱码的原因: 01. 系统字符集设 ...
- nginx的学习
什么是反向代理? 参考这个帖子的‘刘志军’的回答 https://www.zhihu.com/question/24723688 nginx的配置 http://baijiahao.baidu.com ...