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. CodeForces 1141A

    https://vjudge.net/problem/CodeForces-1141A #include <bits/stdc++.h> using namespace std; int ...

  2. numpy基础知识练习

    # 1.导入numpy模块 # 2.创建一个大小为10的空向量 # 3.创建一个大小为10的空向量,但是第五个值为1 # 4.创建一个10-49的ndarray数组 # 5.创建一个3x3的矩阵,其值 ...

  3. [SDOI2014] 重建 - 矩阵树定理,概率期望

    #include <bits/stdc++.h> #define eps 1e-6 using namespace std; const int N = 55; namespace mat ...

  4. 后台异常 - org/apache/oro/text/regex/MalformedPatternException

    解决办法 1.将JDK换成1.6.023或者以上的,如果不行进行下面的办法操作 2.缺少了jakarta-oro-2.0.8.jar文件,将此包放入工程中

  5. Django 基本使用及目录结构

    1.安装 pip3 install django 默认为最新版 2.创建Django项目 在即将创建的Django项目,目录下运行命令 1.django-admin startproject my_p ...

  6. python3练习100题——026

    原题链接:http://www.runoob.com/python/python-exercise-example26.html 题目:利用递归方法求5!. 是25题递归方式的简化版所以很容易. 我的 ...

  7. 2018-2019-20175334实验四《Android程序设计》实验报告

    2018-2019-20175334实验四<Android程序设计>实验报告 一.实验内容及步骤 实验四 Android程序设计-1 Android Stuidio的安装测试: 参考< ...

  8. 手机chrome书签文件导出教程

    重大发现!!!本人亲自测试可以导出chrome书签文件登录下面的链接https://takeout.google.com/settings/takeout/custom/chrome?pli=1

  9. 使用VS2015调试Qt5.9.5源码

    调试的前提 1.Qt5.9.5源码. 2.Qt5.9.5对应VS2015版本的pdb文件. 前提1在安装Qt时勾选源代码选项即可,这样安装后的Qt目录会多出一个“Src”的目录,里面就是Qt的源码. ...

  10. Oracle中的数据迁移到Mysql数据库中的方式Navicat premium工具

    1.安装 Navicat premium工具 2.破解 Navicat premium工具 3.连接需要相互迁移的两个库Mysql和Oracle(可以是远程的或者本机的数据库都是可以的) 4.连接上之 ...