REST
- CS架构:前后端分离,服务端专注于数据存储,前端专注UI
- 无状态:所有用户会话保存在客户端,服务端不再保存
- 缓存:所有服务端响应都要被标记是否缓存
- 统一接口:
1 资源的标识,https://api.guthub.com/users
2 通过表述来操作资源,即客户端通过JSON
传数据到服务端
3 自描述消息,即请求或响应必须提供足够的信息让人理解,包括媒体类型
、HTTP方法
、缓存
等等
4 点击链接跳转 - 分层系统
- 按需代码,即客户端可以下载运行服务器传来的代码
最佳实践
- URI使用名词复数,
/users
- URI使用嵌套解释一对多或多对多关系:
/questions/:questionId/answers/:answerId/comments/:id
- 使用正确的HTTP方法
- 不符合CRUD时,使用POST/action/资源
- 当CRUD时,CRU的响应为数据,D为
204
状态码
Koa
- 洋葱模型,
await next()
可以理解为等待下一个中间件执行完毕 - HTTP的
options
方法:检测服务器支持的请求方法;CORS跨域的预检请求 -
allowedMethods
方法,用于响应HTTP的options
方法;返回405和501状态码 - 用
Class
组织控制器 - 错误处理,在所有中间件前放置错误处理中间件(洋葱模型):
app.use(async (ctx, next) => {
try{
await next()
} catch( err ){
/* your code */
}
})
- 使用路有前缀
const router = new Router({ prefix: '/users' });
JWT
第一次认证成功后返回token
,之后在过期时间内的每次请求都会带上这个token
,它的主要方法如下:
.sign()
.verify()
- 在koa中使用:
const jwt = require('koa-jwt');
const auth = jwt({ /*秘钥*/ });
//其中,认证信息放在ctx.state上
工具
-
nodemon
,自动重启包 -
postman
,用于测试API -
koa-json-error
,用于错误处理中间件 -
cross-env
,跨平台环境变量 -
koa-paraeter
,用于校验参数 -
koa-jwt
,用于JWT校验 -
koa-static
,某目录下提供静态服务,使其支持HTTP方法 -
Math.max()
,返回较大数值
Mongoose
- 包含用法
async listFollowers(ctx) {
const users = await User.find({ following: ctx.params.id });
ctx.body = users;
}
- 匹配,
$or
- 时间戳:
{ timestamps: true }
- 模糊搜索:
.find({ content: new RegExp(ctx.query.q)})
- 分页:
limit
配合skip
网友评论