51 RESTful api规范、接口项目统一处理错误、后端的接口服务、接口文档说明书、前后端分离、后端解决跨域、cors模块、接口项目
RESTful api规范
使用Express开发可以返回html、css、img等这类的数据。 也可以返回json数据: 只提供json数据的Express服务指的就是接口开发 ,这些数据的返回和之前所讲述http协议有着密不可分的关系,只要正确定义路由、使用合理的请求就能拿到结果,但一个好的接口开发工程师应该遵守RESTful API规范。
readFile( path[,options] )
简介
RESTful规范,是目前一种比较流行的互联网软件设计规范。
这个规范约束的就是路由地址应该如何定义,返回的json接口数据应该如何规范。
优点:
使开发者在进行独立开发或协作开发更能标准,以达到行业的统一。它结构清晰、符合标准、易于理解、扩展方便,越来越多的开发者遵守这种规范。
具体的规范
以用户表为例。
一个表对应一个路由文件模块。
GET: 获取数据。
要求 | 请求方法 | 请求地址 | 参数说明 | 响应结果说明 |
---|---|---|---|---|
获取一组数据 | GET | /user | ?page=10&size=20&....sex=1 | [ {},{} ] |
获取一个数据 | GET | /user/:id | :id就是数据表中数据的id字段 | {} |
添加一个数据 | POST | /user | req.body | |
删除一个数据 | DELETE | /user/:id | :id就是数据表中数据的id字段 | |
更新一个数据 | PUT | /user/:id | :id就是数据表中数据的id字段,req.body |
/products
/teachers
/students
响应结果说明
总体字段由对象描述,也就是json
-
获取一组
{
result:{
data:[],//真正要遍历的数据
total,//总条数
page,//当前页码
totalPage,//总页码
}
msg:‘OK‘,
status:200
}
-
获取一条
{
result:{}具体的数据
msg:‘OK‘,
status:200
}
-
删除的
{
msg:‘OK‘,
status:200
}
-
更新
{
msg:‘OK‘,
status:200
}
统一失败的
{
msg:‘error‘,
status:500
}
{
msg:‘Not Found‘,
status:404
}
接口项目统一处理错误
404
// catch 404 and forward to error handler
app.use(function(req, res, next) {
// next(createError(404));
res.send({
msg:‘Not Found‘,
status:404
})
});
?
逻辑错误
// error handler 逻辑错误
app.use(function(err, req, res, next) {
// set locals, only providing error in development
console.log(‘我捕获到了next‘)
res.send({
status:500,
msg:err
})
});
后端的接口服务
接口是为前端服务的。(数据和字符串拼接)就不在后端做了(不用ejs了)
前端就应该使用ajax调用接口,拿到json数据,再进行渲染页面(字符串拼接在浏览器进行)
接口文档说明书
接口的地址: http://api.ujiuye.com
接口的地址: http://localhost:3000
接口地址:/student/:id
请求方式:get
参数说明:
参数名称 | 必填 | 类型 | 例如 |
---|---|---|---|
id | 是 | int(整数) | 12 |
--- | 必填 |
示例:
http://api.ujiuye.com/student/12
http://localhost:3000/student/12
响应结果说明:
{
"status": 200, //状态码
"msg": "ok",//状态说明
"result": { //真正的数据
"id": 2, //学生id
"idcard": "201502",//学生学号
"uname": "大abc黄",//学生的姓名
"password": "",//学生密码
"age": 18,//学生年龄
"sex": 0,//学生性别 :0男 1女 2保密
"pro": "河南",//学生所属省份
"grade": "本科",//学生的学历
"tidcard": "10001" //学生的老师编号
}
}
https://www.juhe.cn/docs/api/id/235
前后端分离
简介:前后端是分离的。
后端(指的就是接口)
前端(html页面:html、css、js、ajax)
后端解决跨域
原理:就是后端设置响应头。
Access to XMLHttpRequest at ‘http://localhost:3000/student/5‘ from origin ‘http://127.0.0.1:5500‘ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin‘ header is present on the requested resource.
在浏览器中,不cors头设置,默认不允许通过ajax发送不同的源。
域名、ip、端口、协议任何一个不同都会产生ajax跨域。
后端收到ajax以后,后端告诉浏览器我允许你跨域( 通过响应头 )
我们有很多路由,所以每一个请求都要允许跨域,所以应该使用中间件。
-
Access-Control-Allow-Origin
允许哪个源进行跨域
-
Access-Control-Allow-Methods
默认只允许post和get。而delete和put是不允许ajax请求的
cors模块
下载
npm i cors
使用
let cors = require(‘cors‘)
app.use( cors() )
接口项目
我们角色:纯后端工程师的。
后端要根据策划稿(设计稿)
后端根据策划稿或设计稿开发接口。
前端工程师根据设计稿写html页面。
如果是前后端不分离的:那么只有前端写出来html页面,后端才能渲染数据。
前后端分离的:后端和前端可以并行开发。
1.还原数据库信息
2.使用express脚手架初始化一个项目
3.在项目中配置一些基本信息
mysql / cors / 404 和错误再统一处理一下
把它的users路由删除
4.开开心心写接口
参照restful 规范
导入mysql的db.js
md5
https://www.npmjs.com/package/md5
作用:是把已知的字符串进行加密。
md5(‘a‘)。而每次加密都一样: 0cc175b9c0f1b6a831c399e269772661
token
websocket
es6模块化
webpack
51 RESTful api规范、接口项目统一处理错误、后端的接口服务、接口文档说明书、前后端分离、后端解决跨域、cors模块、接口项目