今天去野餐,去买票的时候,问可以野炊吗,售票员说不可以,只能野餐,对,我们就是要野餐,没有火的那种,笑死了都,HHHHHH
前言
- 在线音乐戳我呀!
- 音乐博客源码上线啦!
- 相信在开发中前端都会要求后端写接口文档,但各别后端觉得写接口文档麻烦,之前群里有人吐槽他们公司的后端直接把实体类丢给他(抱歉,没笑出声~ HHHHHH)
- 实习公司其实也没写接口文档,因为前后端可能都是一个人开发,于是在开发个人音乐博客也习惯没写接口文档,去年来到现在公司,前后端对接用 swagger 接口文档,于是今天开始音乐博客也要用接口文档啦!
接口文档最终页面效果
先给各位猿友看看实现的效果,其实做每件事情有了目标,实现起来并不再迷茫
使用 swagger-jsdoc 编写接口文档
swagger-jsdoc 使得我们可以将swagger融入到基于JsDoc的注释当中去,这确实是一个对代码侵入性较小,同时能够大大方便对项目文档维护的方式。
下载
npm i koa2-swagger-ui swagger-jsdoc --save
PS:这里的swagger-jsdoc下载最新版本,使用的话会报错,所以我安装了6.0.0版本(报错,第一想到就是版本兼容问题)
新建一个文件 swagger.js
PS:因为我的接口都写在routes文件夹中,猿友们根据自己的接口写的文件位置,进行配置options.apis
在app.js引入使用
PS:这里说下app.use(koaSwagger.koaSwagger({})),看别人写的文章这里其实不是这样写的,而是app.use(koaSwagger({})),这种写法可能是swagger-jsdoc之前低版本的写法,而我为什么会知道这样写的,因为在调试过程中不断打印该对象存在什么值、函数,最终才得知需要这样写才可成功,开发调试打印输出是多么重要!
可以开始编写GET请求的接口文档啦
在注释中使用@swagger开头,然后就可以按照 swagger 的语法来进行接口的定义。这样子极大地方便了文档的书写和修改,在程序员对接口进行修改之后,也不至于忘记维护接口文档,同时可以更加方便的实时的调试自己的接口。
swagger 效果
PS:
-
http://localhost:3333/swagger现在就可以在网页上看到页面啦 -
GET 请求是
in: query,写错会接收不到参数的哦~
编写POST请求的接口文档
swagger 效果
PS:POST 请求是 in: body,写错会接收不到参数的哦~
编写PUT请求的接口文档
PS:PUT 请求也是 in: body,和POST一样~
编写DELETE请求的接口文档
PS:DELETE 请求是 in: query,和GET一样~
其实这些@swagger注解,不需要写在方法上面,可以写在 router 文件夹中任何一处,因为在上面的 swagger.js 写上了
apis: ['./routes/*/*.js']
那么,我又有一个想法了。(因为不用谢在接口方法上,所以可封装模板)
装饰器封装模板注解在接口方法上
思路
将上面增删改查抽成一个类,然后用注解的形式(装饰器)传参用在接口方法上,就不用每次都写一堆。
先让项目KOA支持es7语法
安装babel,与装饰器的编译依赖(只需要要开发环境安装) babel-cli,babel-core,babel-register,babel-plugin-transform-decorators-legacy
npm install babel-cli babel-core babel-register babel-plugin-transform-decorators-legacy --save-dev;
配置 .babelrc 文件让 其能使用装饰器
{
"presets": [],
"plugins": [
"transform-decorators-legacy"
]
}
在 app.js 引入
require("babel-register");
欧克,项目已支持es7语法。
使用VS CODE的时候,使用装饰器@xxx,编辑器检查语法不通过
打开vs code 设置页
修改 javascript.implicitProjectConfig.experimentalDecorators 属性的值为 true
如果,语法检查任然有报错,重启vscode 即可(当然使用ES7及要安装ES7的babel-loader,否则代码编译会报错,教程在上方)
接着写个class来当swagger的基类,里面有GET、POST、PUT、DELETE四个方法的@swagger
/featuresDev/ 这个方法换做${url},发现在注释中,是换不了的,不论我后面定义多个变量避免注释进行拼接,打印出来的效果和上图一样,在swagger中也起不了作用。后面我放弃了,这个思路是可以的,只不过写法可能还要在研究研究一下。
koa-swagger-decorator
如果用上了该库,那么就可以这样写
可我用了却报错:各种写法,各种错
-
TypeError: SwaggerRouter is not a constructor -
SyntaxError: Invalid or unexpected token at wrapSafe (internal/modules/cjs/l) -
declaration expected -
SyntaxError: Invalid or unexpected token
所以我才想自己写装饰器封装模板注解在接口方法上,暂时还是先用swagger-jsdoc写接口文档,之后有时间在研究研究。
有猿友能不吝告知,自当感谢感谢!
参考文章
koa-swagger-decorator:基于注解根据API自动生成可视化swagger文档
node环境 Express编写的后台接口如何结合swagger-ui【解决新版无法传输参数和自定义Authorization】
swagger-decorator:注解方式为 Koa2 应用动态生成 Swagger 文档
Visual Studio Code 解决 TypeScript(or ES7)语法检查报错设置
以往推荐
vue-typescript-admin-template后台管理系统