GET与POST请求区别和编写GET、POST接口
一、什么是get
GET就是从某个地方获取一些数,获取的过程可以理解为一个简单的查询,没有造成什么影响,专业名词叫做幂等
。意思是在编程中一个函数幂操作的特点是其任意多次执行所产生的影响均与一次产生的影响相同。所以这种类型的请求可以被缓存,下次有同样的请求就可以直接从缓存中读取,不用浏览器再次发送请求。get 请求一般是通过url,url里面拼接上参数。正是因为get 与 head 不会产生什么动作,意味着get 和 post 的 HTTP 请求不会在服务器上产生任何结果。但是安全方法并不是什么动作都不会产生,这里的安全方法仅仅是不会修改信息。
二、什么是post
POST是在页面里标签里定义一个表单,点击其中的submit 元素会发出一个请求希望服务器做某种操作,因为是设计成有影响的操作,所以它不能被缓存,post 请求一般是表单提交,在body 里面携带数据。根据HTTP规范,post 可能会造成一些“不安全方法”,因为POST 可能会修改服务器上的资源的请求。比如说我们在优快云 进中提交或者评论一篇文章就是通过post 请求实现的,如果再次提交文章或者评论后提交的资源(即某个页面)不同了,或者说资源被修改了,这些便是“不安全方法”。
三、get与post 区别
1、get 是从服务器上获取数据,post 是向服务器传送数据。
2、get 是把参数数据队列加到提交表单的ACTION属性所指的 URL 中,值和表单内各个字段一一对应,在url 中可以看到。post 是通过HTTP post 机制,将表单内各个字段与内容放置在 http header 内一起传送到 action 属性所指的 url 地址。用户是不能看到这个过程的。
3、get 传输的数据量较小,不能大于2kb,post 传输的数据量较大,一般被默认为不受限制,但理论上,IIS4中最大量为80kb,IIS5中最大量为100kb。
4、对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
5、get 安全性低,post 安全性高。(安全的含义仅仅是指是否修改信息)
四、使用express编写接口
1、创建基本服务器
//1.导入express 模块
const express = require('express')
//2.创建 express 的服务器实例
const app = express();
//导入路由模块
const router = require('./api')
//把路由模块,注册到app上
app.use('/api',router)
// 调用 app.listen方法,指定端口号并启动web服务器
app.listen(80,function(){
console.log('http://127.0.0.1');
})
2、创建API路由模块
//1.apiRouter.js 路由模块
const express = require('express')
const router = express.Router ;
//在这里挂载路由
module.exports = router;
上面两个文件中,首先创建apiRouter.js 路由文件,内部导入express,再调用express.router()方法,返回一个router实例对象,最终通过module.exports = router将其暴露出去,此时外界可以通过require()方法导入这个路由文件并且使用app.use()注册为全局中间件,这样外界请求就会进入这个路由模块中来进行相应的匹配,匹配成功之后就可以调用对应的路由来进行处理。
3、编写GET接口
//在这里挂载路由
router.get('/get',(req,res)=>{
//通过 req.query 获取客户端通过查询字符串,发送到服务器的数据
const query = req.query
//调用res.send()方法,向客户端响应处理的结果
res.send({
status:0, //0表示处理成功,1表示处理失败
msg:'GET请求成功!', //状态的描述
data:query //需要响应给客户端的数据
})
})
实现思路:通过router.get()方法绑定get接口,指定请求的url地址和对应的处理函数,再处理函数中,通过 req.query 获取客户端通过查询字符串,发送到服务器的数据,然后服务器通过res.send()方法,向客户端响应处理的结果,结果中包含status,mag,data这三种数据。
通过postman测试一个get 接口:
当客户端输入一些data数据之后,也能成功被发送回来,如图:
4、编写POST接口
router.post('/post',(req,res)=>{
//调用req.body 获取请求体中包含的 url-encoded 格式的数据
const body = req.body
//调用res.send() 方法,向客户端响应结果
res.send({
status:0,
msg:'POST请求成功',
data:body
})
})
实现思路和get 相似,注意
:获取请求体中包含的 url-encoded 格式的数据,必须配置URL-encoded 格式的请求体数据,必须在服务器中配置中间件 app.use(express.urlcoded({extended:false}))
通过postman 进行测试,客户端得到数据如下: