# restApi 服务接口开发规范
# 目录规范
# model 规范
模型以大写字母开头
const { User, Product }=require('../models')
1
只涉及本模型(集合、表)内数据处理的方法都放到模型内,以静态方法实现
userSchema.statics = {
async login(username, password) {
...
},
...
}
1
2
3
4
5
6
2
3
4
5
6
# service 规范
服务以大写字母开头
const { UserToken, ProductService }=require('../services')
1
与多个模型(集合、表)数据相关处理的方法都放到服务内,以对象定义,静态方法或实例方法实现
class MpService {
constructor({ appId, secret, ...conf }) {
this.appId = appId
this.secret = secret
this.conf = conf
}
/**
* 从缓存中取accessToken,如没有则从微信取并存入缓存
* @param {string} appId
* @param {string} secret
*/
static async getAccessToken(appId, secret) {
let res = await cache.get(appId)
if (res) return res
const { accessToken, expiresIn } = await getAccessToken(appId, secret)
await cache.set(appId, accessToken, expiresIn)
return accessToken
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# lib 规范
# api 版本规范
/api/v1/user
/api/v1/user/id/:id // 通过id取user数据
/api/v1/user/page // 通过分页取 user列表
1
2
3
2
3
# Method
get 取
post 新增
put 更新
delete 删除
# api 数据结构规范
# 统一 JSON格式
{
errcode: 0, // 0 成功
data: {} / [], // 结果数据: 对象/数组
}
1
2
3
4
2
3
4
# 错误格式及编码意义
{
errcode: 0,
error_code: 0,
msg: '',
errmsg: ''
}
1
2
3
4
5
6
2
3
4
5
6
# 分页规范
# 请求数据格式:
{
page: 1, // 第几页,开始页1
pageSize: 15, // 每页记录数,默认15
}
1
2
3
4
2
3
4
# 返回数据格式:
{
errcode: 0, // success
total:0, // 总记录数
items:[], // 当前页数据
}
1
2
3
4
5
2
3
4
5