# 系统交互模型

系统交互模型,描述了软件产品的网站类型项目中系统基础功能模块的流程、数据模型以及相应 API 输入输出标准格式,包含以下内容:

  • 用户登录,包含登录形式及流程
  • 认证授权方式
  • 数据模型输出

目标在于各端作为 数据服务供应商数据应用消费者 在交互上统一行为,面向标准接口开发,使得项目新建之初可依照 系统交互模型 快速完成系统基础功能建设,从而更从容而有序应对企业后续不断增加的项目和业务

# 基础原则

# API 路径命名规则

基于 数据交互格式标准 - API 交互规则 规则, 在路径命名中应用 开发规范 - 路由命名规则 规则,简言之特性如下

  • 路径使用功能/业务描述性命名,例:/user/profile/del/{id}
  • 单词均使用小写方式书写
  • 词组使用 - 符号分隔,例:/config/user-role/list

# 对象、属性命名规则

对于数据接口中输出的对象名,以及对象中的属性等内容,应使用驼峰命名法(Camel Case)

{
  "user_info": {
    "Name": "zhangsan",
    "age": 18,
    "phone_number": "13655555555",
    "admin_type": 1
  }
}{
  "userInfo": {
    "name": "zhangsan",
    "age": 18,
    "phoneNumber": "13655555555",
    "adminType": 1
  }
}

xxx_yyy_zzz 命名格式仅推荐应用于数据库(表名及表字段名)环境

在编程环境中,即使是变量的声明都应尽可能不使用该格式,在自动化语法检查工具中,也有相应的检查/推荐规则:ESLint - "camelcase" 规则 (opens new window),但常量的命名是个例外

// javascript
const MASTER_ADMIN = 1
const STATUS_ENABLED = 1
const STATUS_DISABLED = 2

// java
public static final String STATUS_ENABLED = 1;
public static final String STATUS_DISABLED = 2;

# 流程示意

login-process

# 数据模型

罗列了系统功能相关的基础数据模型,此处仅列举满足系统功能的模型及元素,后续可根据实际情况进行增补修订

# 用户

{
  "id"         : number, // 用户 id
  "name"       : string, // 用户名称
  "avatar"     : string, // 用户头像
  "companyId"  : string, // 用户当前所属公司 id
  "companyName": string, // 公司名称
  "companyLogo": string, // 公司 logo
  "adminType"  : number  // 管理员类型(0:普通用户 1:主管理员 2:子管理员)
}

# 公司

{
  "id"  : number, // 公司 id
  "name": string, // 公司名称
  "logo": string  // 公司 logo
}

# 菜单







 



{
  "id"      : number, // 菜单 id
  "name"    : string, // 菜单名称
  "icon"    : string, // 菜单图标
  "parentId": number, // 菜单父节点 id
  "sort"    : number, // 排列顺序
  "code"    : string, // 菜单编码
  "status"  : number  // 菜单状态(1:启用,0:禁用)
}

系统菜单应全量输出,但需要在 status 属性中体现该菜单节点的状态

注意

code 字段为菜单项目的编码,是前端系统中作为功能模块的唯一标识编码而定义,该编码由前端统一进行定义

# 权限


 





{
  [code]: {
    // 权限数据节点输出,内容根据具体系统情况而定
  },
  ...
}

此处的 code 与上述 菜单模型 中的 code 属性对应,代表了某个功能模块

# API 接口

系统功能模块 API 接口,内容仅为请求成功后返回的数据格式,完整数据交换格式请参考:数据交互格式标准

# 图形验证码初始化

图形验证码使用的是极验图形验证码,根据返回的数据初始化图形验证码插件

接口路径: /auth/captcha-init

// 入参// 返回数据
// 该格式为极验插件的标准数据格式
{
  "code": 0,
  "data": {
    "success": number,
    "gt": string,
    "challenge": string,
    "newCaptcha": boolean
  }
}

# 密码登录

使用 用户名密码 进行登录

接口路径:/auth/pwd-login

// 入参
{
  "username": string, // 用户名
  "password": string  // 密码
}

// 返回数据
{
  "code": 0,
  "data": {
    "access": {
      "accessToken": string,
      "expiresIn": number
    }
  }
}

# 获取手机短信验证码

使用 手机号 获得验证码用于系统登录,成功访问接口后,相应手机号的手机将收到包含验证码的短信

接口路径:/auth/sms-code

// 入参
{
  "phone": string // 手机号
}

// 返回数据

# 手机短信验证码登录

使用 手机号验证码 进行登录

接口路径:/auth/sms-login

// 入参
{
  "phone": string, // 手机号
  "code": string   // 短信验证码
}

// 返回数据
{
  "code": 0,
  "data": {
    "access": {
      "accessToken": string,
      "expiresIn": number
    }
  }
}

# 获取当前用户数据

在使用 密码登录手机短信验证码登录 登录成功后,获取当前用户的系统功能模型集合,系统根据该模型集合自行进行数据转换、过滤以及缓存,完成网站基础框架功能初始化

接口路径:/auth/profile

// 入参// 返回数据
{
  "code": 0,
  "data": {
    "user": {
      // 用户模型
    },
    "companys": [
      {
        // 公司模型
      }, {
        ...
      }
    ],
    "menus": [
      {
        // 菜单模型
      }, {
        ...
      }
    ],
    "permission": {
      [菜单节点编码]: {
        // 权限数据节点
      },
      ...
    }
  }
}

数据节点与数据模型的对应关系

数据节点 数据模型
user 用户模型
companys 公司模型
menus 菜单模型
permission 权限模型

# 切换公司

切换用户当前所属公司,该操作相当于用户重新登录,所以需要重新分发用户的访问令牌。在完成公司切换的操作后,前端系统会自行再次访问 获取当前用户数据 接口,更新用户信息中当前所属公司等相关信息

接口路径:/auth/switch-company

// 入参
{
  "companyId": number // 待切换的公司 id
}

// 返回数据
{
  "code": 0,
  "data": {
    "access": {
      "accessToken": string,
      "expiresIn": number
    }
  }
}

事实上有多个接口均为获取用户访问令牌的功能:

数据格式及处理规则请参考 数据交互格式标准 - 登录授权

最后更新时间: 2/4/2021, 2:36:29 AM