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的那些事的更多相关文章

  1. RESTful API 设计最佳实践

    背景 目前互联网上充斥着大量的关于RESTful API(为了方便,以后API和RESTful API 一个意思)如何设计的文章,然而却没有一个"万能"的设计标准:如何鉴权?API ...

  2. Spring Boot中使用Swagger2构建强大的RESTful API文档

    由于Spring Boot能够快速开发.便捷部署等特性,相信有很大一部分Spring Boot的用户会用来构建RESTful API.而我们构建RESTful API的目的通常都是由于多终端的原因,这 ...

  3. 关于RESTFUL API 安全认证方式的一些总结

    常用认证方式 在之前的文章REST API 安全设计指南与使用 AngularJS & NodeJS 实现基于 token 的认证应用两篇文章中,[译]web权限验证方法说明中也详细介绍,一般 ...

  4. 好RESTful API的设计原则

    说在前面,这篇文章是无意中发现的,因为感觉写的很好,所以翻译了一下.由于英文水平有限,难免有出错的地方,请看官理解一下.翻译和校正文章花了我大约2周的业余时间,如有人愿意转载请注明出处,谢谢^_^ P ...

  5. ****RESTful API 设计最佳实践(APP后端API设计参考典范)

    http://blog.jobbole.com/41233/ 背景 目前互联网上充斥着大量的关于RESTful API(为方便,下文中“RESTful API ”简写为“API”)如何设计的文章,然而 ...

  6. RESTful API 设计最佳实践(转)

    摘要:目前互联网上充斥着大量的关于RESTful API(为了方便,以后API和RESTful API 一个意思)如何设计的文章,然而却没有一个”万能“的设计标准:如何鉴权?API格式如何?你的API ...

  7. RESTful API 设计最佳实践(转)

    背景 目前互联网上充斥着大量的关于RESTful API(为方便,下文中“RESTful API ”简写为“API”)如何设计的文章,然而却没有一个”万能“的设计标准:如何鉴权?API 格式如何?你的 ...

  8. flask开发restful api系列(1)

    在此之前,向大家说明的是,我们整个框架用的是flask + sqlalchemy + redis.如果没有开发过web,还是先去学习一下,这边只是介绍如果从开发web转换到开发移动端.如果flask还 ...

  9. RESTful API的设计原则

    好RESTful API的设计原则   说在前面,这篇文章是无意中发现的,因为感觉写的很好,所以翻译了一下.由于英文水平有限,难免有出错的地方,请看官理解一下.翻译和校正文章花了我大约2周的业余时间, ...

随机推荐

  1. 出现“无法在发送 HTTP 标头之后进行重定向”问题

    如题,在Response.Redirect之后会偶尔出现“无法在发送HTTP标头之后进行重定向”问题. 是因为,已经在出现错误的代码之前进行过一次重定向了.仔细检查代码即可. 解决方法:按照逻辑移除多 ...

  2. ASP.NET MVC 获取表单数据

    public class Person { public string Name{get;set;} public string Phone{get;set;} } view层 @model Mode ...

  3. 《深入理解Java虚拟机》读书笔记十二

    第十二章  Java内存模型与线程 1.硬件效率与一致性 由于计算机的存储设备与处理器的运算速度有几个数量级的差距,所以现代计算机系统都不得不加入一层读写速度尽可能接近处理器运算速度的高速缓存(Cac ...

  4. [HDU4609] 3-idiots - 多项式乘法,FFT

    题意:有\(n\)个正整数,求随机选取一个3组合,能构成三角形的概率. Solution: 很容易想到构造权值序列,对其卷积得到任取两条边(可重复)总长度为某数时的方案数序列,我们希望将它转化为两条边 ...

  5. python3练习100题——010

    第10天了,今天的题目跟009类似,都比较水,有时间的话再做一道- 链接:http://www.runoob.com/python/python-exercise-example10.html 题目: ...

  6. 安装MySQL5.7.22遇到的坑

    安装MySQL: 第一步:将压缩包解压后,手动新建名为my.ini的文本文档,代码内容如下: #代码开始[mysql]default-character-set=utf8[mysqld]#skip-g ...

  7. codeforces 1285E. Delete a Segment

    链接:https://codeforces.com/problemset/problem/1285/E 题意:给一个数轴上有n个线段集,线段集若有相交,则合并为一个新的合并线段集,比如[1,6]和[2 ...

  8. 初识Vue--生命周期

    初学Vue,写一些随记谨防忘记,不足之处谢谢指出!!! 本文可以直接复制自行创建一个HTML页面,查看结果. <!DOCTYPE html> <html lang="en& ...

  9. JavaScript 开胃菜

    注释 单行注释:// 快捷键: CTRL + / 多行注释: /* 内容 */ 快捷键: ctrl + shift + / 变量 申明变量 var name; 赋值 name = 'peach'; 初 ...

  10. HTML文字标签

    <h1>标题标签,总共六个等级,不能创造标签,只有预定义好的标签才可以被浏览器解析 <br>换行标签,没有内容可以修饰也称为空标签 <p>段落标签</p> ...