中文版本 | English Version
基于 swagger-decorator 的自动实体类构建与 Swagger 接口文档生成,对于不反感使用注解的项目中利用 swagger-decorator 添加合适的实体类或者接口类注解,从而实现支持嵌套地实体类校验与生成、Sequelize 等 ORM 模型生成、基于 Swagger 的接口文档生成等等功能。
swagger-decorator: 一处注解,多处使用
swagger-decorator 的初衷是为了简化 JavaScript 应用开发,笔者在编写 JavaScript 应用(Web 前端 & Node.js)时发现我们经常需要重复地创建实体类、添加注释或者进行类型校验,swagger-decorator 希望能够让开发者一处注解、多处使用。需要强调的是,在笔者多年的 Java 应用开发中也感受到,过多过度的注解反而会大大削弱代码的可读性,因此笔者也建议应该在合适的时候舒心地使用 swagger-decorator,而不是本末倒置,一味地追求注解覆盖率。swagger-decorator 已经可以用于实体类生成与校验、Sequelize ORM 实体类生成、面向 Koa 的路由注解与 Swagger 文档自动生成。我们可以使用 yarn 或者 npm 安装 swagger-decorator 依赖,需要注意的是,因为我们在开发中还会用到注解语法,因此还需要添加 babel-plugin-transform-decorators-legacy 插件以进行语法兼容转化。
# 使用 npm 安装依赖 $ npm install swagger-decorator -S $ # 使用 yarn 安装依赖 $ yarn add swagger-decorator $ yarn add babel-plugin-transform-decorators-legacy -D # 导入需要的工具函数 import from "swagger-decorator";
实体类注解
/** * Description 创建某个属性的描述 * @param type 基础类型 self - 表示为自身 * @param description 描述 * @param required 是否为必要参数 * @param defaultValue 默认值 * @param pattern * @param primaryKey 是否为主键 * @returns */ {}
// @flow ;;/** * Description 用户实体类 */ // 编号 @ id: string = 0; // 姓名 @ name: string = "name"; // 邮箱 @ email: string = "email"; // 属性 @ property: UserProperty = ; // 朋友列表 @ friends: number;
数据类型支持:
Common Name | type |
format |
Comments |
---|---|---|---|
integer | integer |
int32 |
signed 32 bits |
long | integer |
int64 |
signed 64 bits |
float | number |
float |
|
double | number |
double |
|
string | string |
||
byte | string |
byte |
base64 encoded characters |
binary | string |
binary |
any sequence of octets |
boolean | boolean |
||
date | string |
date |
As defined by full-date - RFC3339 |
dateTime | string |
date-time |
As defined by date-time - RFC3339 |
password | string |
password |
Used to hint UIs the input needs to be obscured. |
实例生成与校验
/** * Description 从实体类中生成对象,并且进行数据校验;注意,这里会进行递归生成,即对实体类对象同样进行生成 * @param EntityClass 实体类 * @param data 数据对象 * @param ignore 是否忽略校验 * @param strict 是否忽略非预定义类属性 * @throws 当校验失败,会抛出异常 */: Object {}
; ;
Sequelize 模型生成
const originUserSequelizeModel = ; const UserSequelizeModel = sequelize; UserSequelizeModel;
实体类转化与生成工具
从 Flow 类型声明中自动生成注解
接口注解与 Swagger 文档生成
对于 Swagger 文档规范可以参考 OpenAPI Specification ,而对于 swagger-decorator 的实际使用可以参考本项目的使用示例或者 基于 Koa2 的 Node.js 应用模板 。
封装路由对象
; ... const Router = ; const router = ; ; // define default routerouter; // use scan to auto add method in classrouter;
定义接口类
@ @ static async : User ctxbody = ; @ @ static async : User ctxbody = ; @ @ static async : number ctxbody = statusCode: 200 ;
@ static async : User {} @ @ @ static async : User {} @ @ static async : number {}
应用运行
- run your application and open swagger docs (PS. swagger-decorator contains Swagger UI):
/swagger
/swagger/api.json
About
RoadMap
- 修复实体类自动生成中可能存在的错误
- 复合类型推导
- 接口数据自动校验