Skip to content

Latest commit

 

History

History
166 lines (121 loc) · 7.95 KB

DOCUMENTATION.md

File metadata and controls

166 lines (121 loc) · 7.95 KB

v4.x 架构说明

接口概述

HTTP 状态码 errors

  • 400 请求的业务被拒绝
  • 401 鉴权失败
  • 403 权限不足/请求参数需要访客为管理员角色
  • 404 资源不存在
  • 405 无此方法
  • 500 服务器挂了
  • 200 正常
  • 201 POST 正常

数据特征码 response.interface.ts

  • status
    • success:正常
    • error:异常
  • message:永远返回,由 responsor.decorator 装饰
  • error:一般会返回错误发生节点的 error;在 statuserror 的时候必须返回,方便调试
  • debug:开发模式下为发生错误的堆栈,生产模式不返回
  • result:在 statussuccess 的时候必须返回
    • 基本数据:例如文章,直接输出数据如 { title: '', content: '', ... }
    • 列表数据:一般返回 { pagination: {...}, data: {..} }

数据模型

通用

  • extend 为数据表的通用扩展结构 Extend Model
  • 文章、分类、Tag 表都包含 extend 字段,用于在后台管理中自定义扩展,类似于 WordPress Custom Fields

各表重要字段

  • _id:MongoDB 生成的 ID,一般用于后台执行 CRUD 操作
  • id:插件生成的自增数字 ID,类似 MySQL 中的 ID,具有唯一性,用于前台获取数据
  • pid:父级数据 ID,用于建立数据表关系,与 ID 字段映射

数据组成的几种可能

  • 数据库真实存在数据
  • 业务计算出的衍生数据,非存储数据,如:统计数据
  • Mongoose 支持的 virtual 虚拟数据

应用结构

入口

  • main.ts:引入配置,启动主程序,引入各种全局服务
  • app.module.ts:主程序根模块,负责各业务模块的聚合
  • app.controller.ts:主程序根控制器
  • app.config.ts:主程序配置,数据库、程序、第三方,一切可配置项
  • app.environment.ts:全局环境变量

请求处理流程

  1. request:收到请求
  2. middleware:中间件过滤(跨域、来源校验等处理)
  3. guard:守卫过滤(鉴权)
  4. interceptor:before:数据流拦截器(本应用为空,即:无处理)
  5. pipe:参数格式化/校验器,参数字段权限/校验,参数挂载至 request 上下文
  6. controller:业务控制器
  7. service:业务服务
  8. interceptor:after:数据流拦截器(格式化数据、错误)
  9. filter:捕获以上所有流程中出现的异常,如果任何一个环节抛出异常,则返回错误

鉴权处理流程

  1. guard守卫 分析请求
  2. guard.canActivate:继承处理
  3. JwtStrategy.validate:调用 鉴权服务
  4. guard.handleRequest根据鉴权服务返回的结果作判断处理,通行或拦截

鉴权级别

  • 任何写操作(CUD)都会校验必须的 Token admin-only.guard.ts
  • 涉及表数据读取的 GET 请求会智能校验 Token,无 Token 或 Token 验证生效则通行,否则不通行 admin-maybe.guard.ts

参数校验逻辑

  • 任何用户的请求参数不合法,将被校验器拦截,返回 400 validation.pipe.ts
  • 普通用户使用高级查询参数将被视为无权限,返回 403 permission.guard.ts

错误过滤器 error.filter.ts

拦截器 interceptors

装饰器扩展 decorators

  • 缓存装饰器:用于配置 cache key / cache ttl
  • 响应装饰器:用于输出规范化的信息,如 message 和 翻页参数数据
  • 请求参数装饰器:用户自动校验和格式化请求参数,包括 query/params/ip 等辅助信息
  • 访客请求装饰器:用于装饰 class-validate 中的子字段,为其增加一些供 permission.pipe 消费的配置项元数据

守卫 guards

  • 默认所有非 GET 请求会使用 AdminOnlyGuard 守卫鉴权
  • 所有涉及到多角色请求的 GET 接口会使用 AdminMaybeGuard 进行鉴权

中间件 middlewares

管道 pipes

  • validation.pipe 用于验证所有基于 class-validate 的验证类的数据格式合法性
  • permission.pipe 用于验证所有数据(格式已合法)的权限合法性

业务模块 modules

  • Announcement
  • Article
  • Category
  • Tag
  • Comment
  • Option
  • Auth:全局鉴权、Token、用户(Admin)
  • Vote:赞踩评论、文章、主站
  • Disqus:外接 Disqus 的业务服务
  • Archive:全站数据缓存
  • Expansion
    • 统计:业务数据统计业务
    • 备份:数据库备份业务(定时、手动)
    • 其他:其他第三方 token 等服务

核心(全局)模块 processors

  • database
    • 连接数据库和异常管理
  • cache
    • 基本的缓存数据 set get del 等操作
    • 扩展的 once manual interval schedule 几种缓存模式
  • helper
    • 搜索引擎实时更新服务:根据入参主动提交搜索引擎收录,支持百度、Google 服务;分别会在动态数据进行 CUD 操作的时候调用
    • 评论过滤服务:使用 Akismet 过滤 SPAM;暴露三个方法:校验 SPAM、提交 SPAM、提交 HAM
    • 邮件服务:根据入参发送邮件;程序启动时会自动校验客户端有效性,校验成功则根据入参发送邮件
    • IP 地理查询服务:根据入参查询 IP 物理位置;使用一些免费在线服务
    • 第三方云存储服务:AWS 云存储相关服务
    • Google 证书(鉴权)服务:用于生成各 Google 应用的服务端证书

Special issues

Google Indexing API

Google Auth

Google Analytics Embed API