课程名称:web前端架构师
课程章节:第14周 第二章
主讲老师:张轩
课程内容:后端接口文档设计、后端技术选型express 的介绍
接口文档设计
后端接口采用 restful 格式
路径 - Endpoint
每个网址代表一种资源(resource),正好可以和我们的需求分类的这几种实体相对应。
动词 - Verb (请求方式)
请求方式设计
- GET(SELECT):从服务器取出资源(一项或多项)。
- POST(CREATE):在服务器新建一个资源。
- PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。
- PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。
- DELETE(DELETE):从服务器删除资源。
例如文章接口。接口路径 /article
* 创建文章 post
* 更新文章的某个属性 put
* 更新文章的全部属性。patch
* 删除文章 delete
* 获取文章。get
过滤
当我们的信息数量过多时,服务器不可能都将它们返回给用户。API应该提供参数,过滤返回结果。例如我们列表的分页
- ?limit=2&offset=2
HTTP 返回状态码
HTTP 响应状态码用来表明特定 HTTP 请求是否成功完成。 响应被归为以下五大类:
- 信息响应 (100–199)
- 成功响应 (200–299)
- 重定向消息 (300–399)
- 客户端错误响应 (400–499)
- 服务端错误响应 (500–599)
此外我们还需要一个错误码的字断,可以让错误信息更加明确
{
errno: 1,
...
message: 'xxx'
}
技术选型 express
安装
npm i express
也可以使用 Express 应用程序生成器 进行安装
使用
express 的使用可以参考官方文档 https://www.expressjs.com.cn/ ,使用非常简单
const express = require('express')
const app = express()
const port = 3000
app.get('/', (req, res) => {
res.send('Hello World!')
})
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
})
优缺点
优点
快速,简单,易上手。
缺点
- 路由响应中,很可能有:从外部请求数据的服务,有验证路由的请求参数,返回特定的格式。
- 所有逻辑不分青红皂白的写在一起,很容易产生冗长的难以维护的代码。
- 一些大型必备的模块,如第三方服务初始化,安全,日志都没有明确的标准。
中间键
中间件可以完成的任务
- 执行任何代码。
- 对请求和响应对象进行更改。
- 结束请求/响应循环。
- 调用堆栈中的下一个中间件。
下面写个中间键
const express = require('express')
const app = express()
function logger(req, res, next) {
console.log('method ',req.method, ', url', req.path)
next()
}
function requestTime(req, res, next) {
console.log('time')
req.requestTime = Date.now()
next()
console.log('end)
// 此时无法修改发送的数据
}
app.use(logger)
app.use(requestTime)
app.get('/', (req, res) => {
console.log('get ')
res.json({ user: 'tobi' })
})
app.listen(3000, () => {
console.log('serve listen 3000')
})
我们可以看到现use 的中间键会先执行
express 中间键的执行是个洋葱模型,中间键内调用next 可以等待下个中间键执行完毕,但是 express 在发送数据只能调用一次,并且没办法修改