接口以及会话控制

接口

接口是前后端交互通信的桥梁

简单理解:一个接口就是服务中的一个路由规划,根据请求响应结果

接口的英文单词是API(Application Program Interface),所以有时也称之为API接口

这里的接口指的是数据接口,与编程语言(java,Go等)中的接口语法不同

 接口的作用

实现前后端交互

接口的开发与调用

大多数接口都是由后端工程师开发的,开发语言不限

一般情况下接口都是由前端工程师调用的,但有时后端工程师也会调用接口,比如短信接口,支付接口等

接口的组成

一个接口一般由如下几个部分组成

  • 请求方法
  • 接口地址(url)
  • 请求参数
  • 响应结果

RESTful API

RESTful API是一种特殊风格的接口,主要特点有如下几个:

  • URL中的路径表示资源,路径中不能有动词,例如create,delete,update等这些都不能有
  • 操作资源要与HTTP请求方法对应
  • 操作结果要与HTTP响应状态码对应

json-server

json-server本身是一个JS编写的工具包,可以快速搭建RESTful API服务

官方地址:https://github.com/typicode/json-server

操作步骤:

全局安装json-server

npm i -g json-server

 创建JSON文件(db.json),编写基本结构

{
  "song":[
    {"id":1,"name":"干杯","singer":"五月天"},
    {"id":2,"name":"当","singer":"动力火车"},
    {"id":3,"name":"不能说的秘密","singer":"周杰伦"}
  ]
}

以JSON文件所在文件夹作为工作目录,执行如下命令:

json-server --watch db.json

 

接口测试工具

介绍几个接口测试工具

  • apipost https://www.apipost.cn/(中文)
  • apifox https://www.apifox.cn/(中文)
  • postman https://www.postman.com/(英文)

 160_接口测试工具-apipost公共参数与文档功能_哔哩哔哩_bilibili

161_接口测试工具-postman基本使用_哔哩哔哩_bilibili

成功或失败时返回json数据  res.json({code:'0000',msg:'创建成功',data:'data'})

会话控制介绍

介绍

所谓会话控制就是对会话进行控制

HTTP是一种无状态的协议,他没有办法区分多次的请求是否来自于同一个客户端,无法区别用户

而产品中又大量存在这样的需求,多以我们需要通过会话控制来解决该问题

常见的会话控制技术有三种:

  • cookie

cookie是HTTP服务器发送到用户浏览器并保存在本地的一小块数据

cookie是保存在浏览器端的一小块数据

cookie是按照域名划分保存的

 

  • 域名cookie
    www,baidu.coma=100;b=200
    www.bilibili.comxid=1020abce121;hm=112411213
    jd.comx=100;ocw=12414cce

    特点:浏览器向服务端发送请求时,会自动将当前域名下可用的cookie设置在请求头中,然后传递给服务器

这个请求头的名字也叫cookie,所以将cookie理解为一个HTTP的请求头也是可以的

cookie的运行流程

填写账号和密码校验身份,校验通过后下发cookie

 有了cookie之后,后续向服务器发送请求时,就会自动携带cookie

浏览器中操作Cookie

 171_会话控制_express框架中设置cookie_哔哩哔哩_bilibili170_会话控制_浏览器操作cookie_哔哩哔哩_bilibili

express框架中设置cookie

在路由规则中添加res.cookie('name','zhangsan'),在用户请求成功之后返回cookie,会在浏览器关闭的时候销毁

res.cookie('name','zhangsan',{maxAge:60*1000})

// 导入express
const express=require('express')
const cookieParser=require('cookie-parser')
// 创建应用对象
const app=express()
app.use(cookieParser())
// 创建路由规则
app.get('/set-cookie',(req,res)=>{
  // res.cookie('name','zhangsan')//会在浏览器关闭的时候销毁
  res.cookie('name','zhangsan',{maxAge:60*1000})
  res.cookie('theme','blue')
  res.send('home')

})
// 删除cookie
app.get('/remove-cookie',(req,res)=>{
  // 调用方法
  res.clearCookie('name')
  res.send('删除成功~~')
})
// 提取cookie,先下载cookie-parser包
app.get('/get-cookie',(req,res)=>{
  // 获取cookie
  console.log(req.cookies)
  res.send('获取cookie')
})
app.listen(3000,()=>{
  console.log('3000端口启动中')
})
  • session

  • session是保存在服务器端的一块数据,保存当前访问用户的信息
  • session可实现会话控制,可以识别用户的身份,快速获取当前用户的相关信息
  • 运行流程

填写账号和密码校验身份,校验通过后创建session信息,然后将session_id的值通过响应头返回给浏览器

有了cookie,下次发送请求时会自动携带cookie,服务器通过cookie中的session_id的值确定用户的身份

express中使用session

const express=require('express')
const session=require('express-session')
const MongoStore=require('connect-mongo')
// 创建应用对象
const app=express()
// 设置session的中间件
app.use(session({
  name:'sid',//设置cookie的name,默认值是connect.sid
  secret:'atguigu',//参与加密的字符串(又称签名)
  saveUninitialized:false,//是否为每次请求都设置一个cookie用来存储session的id
  resave:true,//是否在每次请求时重新保存session
  store:MongoStore.creat({
    mongoUrl:'mongodb://127.0.0.1:27027/project'//数据库的连接配置
  }),
  cookie:{
    httpOnly:true,//开启后前端无法通过JS操作
    maxAge:1000*300//这一条是控制sessionID的过期时间的
  }
}))
// 首页路由
app.get('/',(req,res)=>{
  res.send('home')
})
// 登录
app.get('/login',(req,res)=>{
  // username=admin&password=admin
  if(req.query.username==='admin'&&req.query.password==='admin'){
    // 设置session信息
    req.session.username='admin'
    req.session.uid='258aefccc'
    res.send('登陆成功')
  }else{
    res.send('登陆失败')
  }

})
// session的读取
app.get('/cart',(req,res)=>{
  // 检测session是否存在用户数据
  if(req.session.username){
    req.send(`购物车页面,欢迎您${req.session.username}`)
  }else{
    res.send('您还没有登录~~')
  }
})
// 启动服务
app.listen(3000)

session和cookie的区别

 存在的位置

  • cookie:浏览器端
  • session:服务端

安全性

  • cookie是以明文的方式存储在客户端的,安全性相对较低
  • session存放于服务器中,所以安全性相对较好

网络传输量

  • cookie设置内容过多会增大报文体积,会影响传输效率
  • session数据存储在服务器,只是通过cookie传递id,所以不影响传输效率

存储限制

  • 浏览器限制单个cookie保存的数据不能超过4k,且单个域名下的存储数量也有限制
  • session数据存储在服务器中,所以没有这些限制

  • token

  • token是服务端生成并返回给HTTP客户端的遗传加密字符串,token中保存着用户信息
  • token可以实现会话控制,可以识别用户的身份,主要用于移动端APP
  • token工作流程:

填写账号和密码校验身份,校验通过后响应token,token一般是在响应体中返回给客户端的

 

后续发送请求时,需要手动将token添加在请求报文中,一般是放在请求头中

 

特点: 

  • 服务端压力更小,数据存储在客户端
  • 相对更安全,数据加密,可以避免CSRF(跨域请求伪造)
  • 扩展性更强,服务间可以共享,增加服务节点更简单

  JWT 

JWT是目前最流行的跨域认证解决方案,可用于基本token的身份验证

JWT使token生成与校验更规范

我们可以使用jsonwebtoken包来操作token

// 导入jwt
const jwt=require('jsonwebtoken')
// 创建生成token
// let token=jwt.sign(用户数据,加密字符串,配置对象)
let token=jwt.sign({
  username:'zhangsan'
},'atguigu',{
  expiresIn:300//token的声明周期,单位是秒
})
console.log(token)
// 校验token
let t='eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InpoYW5nc2FuIiwiaWF0IjoxNzE3MzMwNDA3LCJleHAiOjE3MTczMzA3MDd9.b8u73NBwGYYCjly9EgwYKURWVrNLa8HVUKksqhJObdc'
jwt.verify(t,'atguigu',(err,data)=>{
  if(err){
    console.log('校验失败')
    return
  }
  console.log(data)
})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/673156.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python基础知识点总结(第二节判断与循环)

一、判断语句 1、if判断语句 ~if语句的基本格式 if 要判断的条件: 条件成立时,要做的事情 ~if语句的注意事项: 判断语句的结果一定要是布尔类型不要忘记判断条件后的:冒号归属于if语句的代码块,需要在前方填…

【软件测试】6.设计测试用例的设计方法

目录 1.基于需求的设计方法 2.具体的设计方法 2.1等价类 2.2边界值 2.3正交法 2.4判定表法 2.5场景法 2.6 错误猜测法 1.基于需求的设计方法 基于需求的设计方法也是总的设计测试用例的方法,在工作中,我们需要参考需求文档/产品规格说明书来设计…

告别鼠标,安卓模拟鼠标,绘图板,手写板操作电脑PC端,卡卡罗特也说好,儿童节快乐

家人们,上链接了:https://download.csdn.net/download/jasonhongcn/89387887 横屏模式: 竖屏模式: 操作说明: 1. 手势滑动模拟鼠标移动 2. 界面如果有滚动条,右手指按紧,通过左手指移动实现…

【智能算法】红嘴蓝喜鹊优化算法(RBMO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2024年,S Fu受到自然界中红嘴蓝喜鹊社会行为启发,提出了红嘴蓝喜鹊优化算法(Red-billed Blue Magpie Optimizer, RBMO)。 2.算法原理 2.1算…

【原创】springboot+mysql员工管理系统

个人主页:程序猿小小杨 个人简介:从事开发多年,Java、Php、Python、前端开发均有涉猎 博客内容:Java项目实战、项目演示、技术分享 文末有作者名片,希望和大家一起共同进步,你只管努力,剩下的交…

找出字符串中出现最多次数的字符以及出现的次数

str.charAt(i) 是JavaScript中获取字符串中特定位置字符的方法&#xff0c;表示获取当前的字符。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wi…

Linux基础之进程控制--进程的创建和退出

目录 一、进程的创建 二、进程的终止 2.1 进程退出的场景 2.2 main()函数的返回值 2.3 用exit和_exit进行退出 2.4 进程异常终止 一、进程的创建 关于一个进程是如何被创建出来的&#xff0c;我们已经有所介绍这里我在给大家补充些东西。 首先&#xff0c;我们知道…

python之tkinter学习笔记

目录 Widget概览 加强版的tkinter模块 一、通用的 1.1、Label PhotoImage (gif图片加载) jpg图片加载 config方法-计时器 1.2、PanedWindow 1.3、LabelFrame 二、tkinter专有 2.1、Menu菜单复选框 2.2、工具栏 三、tkinter.ttk专有 3.1、Separator分隔线 3.2、n…

【C++】C++ 宾馆酒店管理系统(源码+数据+论文)【独一无二】(史上功能最全,拿来即用)

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

LeetCode-47. 全排列 II【】

TOC 题目描述&#xff1a; 给定一个可包含重复数字的序列 nums &#xff0c;按任意顺序 返回所有不重复的全排列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,2] 输出&#xff1a; [[1,1,2], [1,2,1], [2,1,1]] 示例 2&#xff1a; 输入&#xff1a;nums [1,2,3] 输…

InnoDB Data Locking - Part 2.5 “Locks“ (Deeper dive)

All together now 现在让我们把在 InnoDB Data Locking – Part 2 “Locks” 中学习到的有关表锁和记录锁的知识结合起来&#xff0c;以理解以下情况&#xff1a; 我们看到&#xff1a; 第一个 SELECT * FROM t FOR SHARE; 在 5、10、42 和 supremum 伪记录上创建了 S 锁。…

【软件设计师】2022年上半年真题解析

​​冯诺依曼计算机体系结构的基本特点是&#xff1a; A. 程序指令和数据都采用二进制表示 - 这是正确的&#xff0c;因为冯诺依曼架构下的计算机使用二进制形式来表示和处理所有信息&#xff0c;包括指令和数据。 B. 程序指令总是存储在主存中&#xff0c;而数据则存储在高速…

Discuz_X3.5各行业资料文档下载模板

下载地址&#xff1a;Discuz_X3.5各行业资料文档下载模板

验证外星语词典

在解决算法题时&#xff0c;哈希表是经常被使用的工具&#xff0c;可以用来记录字符串中字母出现的次数&#xff0c;字符串中字符出现的位置等&#xff0c;这里用到的就是利用哈希表储存字符串中字符出现的的位置。 “外星语”的字母表顺序是不一样的&#xff0c;所以…

python数据预处理

PYTHON 最流行库&#xff1a;Numpy、Matplotlib 和 Pandas。Numpy 是满足所有数学运算所需要的库&#xff0c;由于代码是基于数学公式运行的&#xff0c;因此就会使用到它。Maplotlib&#xff08;具体而言&#xff0c;Matplotlib.pyplot&#xff09;则是满足绘图所需要的库。Pa…

创建一个支持切换阅读模式和答题模式的Anki问答题模板

为了备考某个需要默写的科目&#xff0c;做了个问答题笔记模板&#xff0c;如下&#xff1a; 在上图的回答栏填写答案后&#xff0c;点击显示答案按钮转到背面&#xff1a; 只实现上面的功能是很简单的&#xff0c;直接基于Anki自带的问答题模板添加自己需要的字段即可。问题…

嵌入式工程师人生提质的十大成长型思维分享

大家好,作为一名嵌入式开发者,很多时候,需要考虑个人未来的发展,人生旅途复杂多变,时常面临各种各样的挑战。如何在这个复杂多变的社会中稳步向前,不断成长,成为每个人都应该思考的问题。实际上,思维方式的差异决定我们应对挑战的能力与成长的速度。 第一:寻找自我坐…

Linux CPU占用高问题

1、top命令和历史系统监控找出持续占用CPU的top5进程。 # top -c 依次按键盘键b->x&#xff0c;按照CPU由高到底排序。shiftP和shiftM切换使用CPU和内存的排序 # top -Hp pid 查看进程中所有线程的占用情况 # top -Hp 1124 -n 1 -b | awk {print $NF} | sort | uniq -c |…

Python | 自动探索性数据分析(EDA)库SweetViz

SweetViz是一个开放源代码Python库&#xff0c;主要用于生成精美的高密度可视化文件&#xff0c;启动探索性数据分析&#xff08;EDA&#xff09;&#xff0c;输出为完全独立的HTML应用程序。 探索性数据分析&#xff08;EDA&#xff09;是分析和总结数据集主要特征的过程&…

pytorch学习笔记5

transform 本质上作用是将图片通过transform这个这个工具箱获取想要的结果 tensor就是一个包含神经网络需要的一些理论基础的参数 from torch.utils.tensorboard import SummaryWriter from torchvision import transforms from PIL import Image #tensor数据类型 #通过tra…