# restApi 服务接口开发规范

# 目录规范

# model 规范

模型以大写字母开头

const { User, Product }=require('../models')
1

只涉及本模型(集合、表)内数据处理的方法都放到模型内,以静态方法实现

userSchema.statics = {
  async login(username, password) {
    ...
  },
  ...
}
1
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

# lib 规范

# api 版本规范

/api/v1/user
/api/v1/user/id/:id   // 通过id取user数据
/api/v1/user/page     // 通过分页取 user列表
1
2
3

# Method

get 取
post 新增
put 更新
delete 删除

# api 数据结构规范

# 统一 JSON格式

{
  errcode: 0,  // 0 成功
  data: {} / [], // 结果数据: 对象/数组
}
1
2
3
4

# 错误格式及编码意义

{
  errcode: 0,
  error_code: 0,
  msg: '',
  errmsg: ''
}
1
2
3
4
5
6

# 分页规范

# 请求数据格式:

{
  page: 1,  // 第几页,开始页1
  pageSize: 15, // 每页记录数,默认15
}
1
2
3
4

# 返回数据格式:

{
  errcode: 0, // success
  total:0,  // 总记录数
  items:[], // 当前页数据
}
1
2
3
4
5