目录
优点:
常用方法规范
路由如何定义
根据RESTful 进行接口开发
接口文档组成
Token使用
什么是JWT? 【了解】
token的使用规则
本地客户端(浏览器是常见客户之一 )存储技术有三种:【重点】
使用步骤
uuid和md5
API: API(Application Programming Interface,应用程序接口)是一些预先定义的接口(如函数、HTTP接口),或指软件系统不同组成部分衔接的约定。
RESTful规范,是目前一种比较流行的互联网软件设计规范。
这个规范约束的就是路由地址应该如何定义,返回的json接口数据应该如何规范
RESTful API 【重点】:是指在我们设计路由时同一个资源(比如:用户、成绩等)使用同一个路径(比如:/user、/chengji等),然后通过不同的请求方式(比如:get、post、put、delete)来区分不同的操作。
使开发者在进行独立开发或协作开发更能标准,以达到行业的统一。它结构清晰、符合标准、易于理解、扩展方便,越来越多的开发者遵守这种规范。
(1)GET:SELECT 获取(查询)资源
(2)POST:CREATE 创建(添加)资源
(3)PUT:UPDATE 更新(修改)资源
(4)DELETE:DELETE 删除资源
路径 | 请求方式 | 参数 | 备注 |
---|---|---|---|
/user | get | id:用户id(可为空)、uname:姓名(可为空) | 查询用户 |
/user | post | uname:姓名、age:年龄、sex:性别 | 添加用户 |
/user | put | id:用户id(不能为空 )、uname:姓名、age:年龄、sex:性别 | 修改用户 |
/user | delete | id:用户id(不能为空 ) | 删除用户 |
(1)使用express脚手架生成接口项目 express --view=ejs myapp
(2)进入myapp目录 安装依赖 npm install
(3)创建student.js到routes目录中
(4)定义模块化路由代码
(5)在入口文件app.js中引入路由
(6)启动项目
(1)、接口地址:http://localhost:3000/mycourse
(2)、请求方式:get
(3)、请求参数:
jwtdata jwt数据 必填
(4)、返回数据(json)
参数名称 | 参数类型 | 是否必填 | 备注 |
---|---|---|---|
username | 字符串 | 是 | 帐号 |
password | 字符串 | 是 | 密码 |
repassword | 字符串 | 是 | 确认密码 |
键名 | 数据类型 | 默认值 | 备注 |
---|---|---|---|
satus | 整数: 200/500 | 无 | 状态值 200表示成功 500表示失败 |
msg | 字符串 | 无 | 提示信息 |
data | 数组 | 空数组 | 返回的数据 |
token(令牌)介绍
token(令牌)技术通常用于在不同服务器之间来校验用户身份信息,如果用户身份信息校验通过则可以执行后续操作,否则不能执行,而JWT是常见token(令牌)技术之一。
Json web token (JWT),JWT由A.B.C三部分组成,格式为:A.B.C
A: header(头部),格式如: {typ:'jwt',alg:'加密算法'}
B: payload(有效载荷),用来存放用户自定义的数据,格式:{uname:'登录成功的用户名',uid:'登录成功的用户ID'}
C: signature(签名),用来校验JWT数据是否真实有效 signature(签名)=加密算法(加密算法(A).加密算法(B))
主要应用于登录加密,以后客户端和服务器通信的时候,特别是需要验证用户身份时,都需要携带这个token给服务器端,一般由请求头Authorization,来把这个字段传给服务器端,以保证后续一些需要登录权限的操作能够顺利进行。
1)、cookie的特点: 有大小及存储个数限制、cookie还可以被禁用,默认有效时间为整个有效会话期间,但可以设置有效时间;
2)、Local Storage的特点:没有大小及存储个数的限制,默认永久有效,不能设置有效时间;
3)、Session Storage:没有大小及存储个数据的限制,默认有效时间为个整个有效会话期间,不能设置有效时间;
(1) 安装jsonwebtoken
在项目根目录中安装jsonwebtoken: npm i jsonwebtoken
npm i jsonwebtoken
2.引用
const jwt=requir("jsonwebtoken")
3. 设置要加密的数据
4. 加密已知的数据
生成JWT数据、把源数据进行加密返回token
语法:jwt.sign('用户自定义的数据','密钥',选项);
5.验证token是否过期
使用JWT数据,验证token是否有效
jwt.verify( ‘JWT数据’,'密钥')
6.token的模块化
const jsonwebToken = require('jsonwebtoken');
let tokenKeys = 'sfdafds^%$#$#86452'; //密钥
//生成JWT数据:
exports.createJWT = function(data) {
// jsonwebToken.sign('用户自定义的数据','密钥',选项);
//expiresIn:jwt数据的有效时间,时间单位为:秒
return jsonwebToken.sign(data, tokenKeys, { expiresIn: 60 * 60 * 2 });
}
//使用JWT数据:
exports.useJWT = function(d) {
try {
// jsonwebToken.verify('JWT数据','密钥');
let jwtData = jsonwebToken.verify(d, tokenKeys);
if (jwtData) {
return jwtData;
} else {
return false;
}
} catch (error) {
return false;
}
}
if (jwtData == '') {
res.send(Msg(500, '非法访问,请先登录'));
}
//使用jwt数据
let jwtObj = useJWT(jwtData);
// console.log(jwtObj, 7);
if (!jwtObj) {
res.send(Msg(500, '非法访问,请先登录!!'));
}
//获取Local Storage中存放的JWT数据:
let userJwtData = localStorage.ujwtdata ? localStorage.ujwtdata : '';
console.log(userJwtData);
注意:在项目根目录下安装md5、uuid包: npm i uuid md5
uuid第三方模块:主要用来产生唯一的字符串:
md5第三方模块:使用md5加密算法加密字符串
什么是md5?【重点】
md5是一种加密算法,使用md5加密算法加密后字符串长度是固定的32位、且不可逆;
md5是一个加密方法,可以把任意字符串进行加密,但是每次加密同一个字符串返回的值都是一样的,所以往往会加一个密钥进行加密以防止别人偷窃,常常用于加密用户的密码。
var md5 = require('md5'); //使用md5模块中md5方法进行加密
const {
v4: uuidv4
} = require('uuid'); //使用uuid模块中方法产生唯一字符串