最近想用Lumen搭建一个微服务项目 主要给别的项目提供API接口 准备用swagger做显示和调试 结果试了几次因为各种原因都失败了,一波三折 最后还好成功了写个记录吧
Lumen:
Laravel中衍生出的框架 为速度而生,相对Laravel而言它更适合做微服务架构和API开发
Swagger:
可以方便美观的呈现出接口API的各种定义,生成API文档,包括参数 路径啥的,有时后端修改了API参数或者其他设置 直接通过这个swagger的ui就可以看了方便测试 调试等等
准备工作
1. 确保PHP版本 >5.5.9
2. OpenSSL PHP Extension
3. 确保已经安装 Composer 并配置到环境变量中
创建一个Lumen项目
|
|
其中 lumen-swagger是项目名 可以随便起一个自己喜欢的名字
- 安装好后进入 lumen-swagger 目录 复制其中的.env.example 重命名为.env文件
- 修改.env这个文件中的参数
APP_KEY=P5B4DQdsKGVjczjdnTTiJBzj90ZJBh2F
这个值需要32位的一个随机字符串 你可以不用使用我上面这个,先暂时用下
等程序可以跑起来可以自己写个随机生成的随机function 去生成在替换掉好了 0-9 a-z A-Z 【这个东东加密用的 安全作用吧】
注意Lumen里好多artisan命令都用不了 不然我也想直接用php artisan key:generate
来生成这个key了
使用php artisan list
可以看到当前的lumen框架中支持的artisan命令
下一步修改 bootstap/app.php
文件 把下面这个注释去掉
然后lumen就算安装完成了 你可以自己配置虚拟主机啦之类的来访问测试 或者使用php artisan sreve --port=8888
这个命令就是启动一个server,上面的artisan列表里也有 【ps:这个端口号你随便设置 别和你已经在用的冲突好了】
当你看到下面的提示就说明启动成功了哦Lumen development server started on http://localhost:8888/
这时你访问浏览器 输入 http://localhost:8888/
看到这个就算Lumen安装完成了
集成 Swagger
可以去 https://packagist.org 去找下 Swagger
相关的包 这里直接推荐 darkaonline/swagger-lume
这个包
贴个作者项目地址: https://github.com/DarkaOnLine/SwaggerLume (感谢下)
一、安装
|
|
二、修改配置
安装完成后编辑 bootstrap/app.php
文件 在大概 26 行处添加如下内容
|
|
三、生成文件
- 运行
php artisan swagger-lume:publish-config
生成配置文件 如果成功的话 你会看到你的项目目录下多了一个config文件夹 并且下面有一个swagger-lume.php
的配置文件 这个文件里的配置就是swagger运行需要的配置参数 - 运行
php artisan swagger-lume:publish
它会帮你把以前swagger前端显示的一些UI啦 配置文件什么帮你统统搞定 如果成功的话你会发现在你项目的根目录下的 public 和resource 文件夹下多了一个 vendor/swagger-lume的文件夹 - 运行
php artisan swagger-lume:generate
这个是帮助你生成swagger运行锁需要的一个json文件 这一步可以先不操作 因为我们还没有写API的Controller以及Swagger的标签 运行的话会报错Required @SWG\Info() not found
类似这样一个错误 这是正常的哦
同时我们可以看到 在storage
目录下多了一个api-docs
的文件夹(swagger运行需要的json文件就是存放在这里的) 虽然他是空的 看到这个说明刚刚那个命令有效 等我们写完测试Controller就生成了
进入目录 app/Http/Controllers
下新建一个TestController.php (这个随便你了哦)
国际惯例 hello world
|
|
写完TestController记得去route.php
中去添加路由$app->get('/testindex','TestController@index');
路由你可以随便定的 不一定我写的这个
注意:上面的
index()
方法上面的swagger标签中的path
参数那个斜线/
一定要带上,像这样path="/testindex"
不然它会很傻的在你访问的时候也没有,那你的请求就变成这样了http://localhost:8888testindex?say=d
而你原意想请求的地址是http://localhost:8888/testindex?say=d
四、修改Swagger配置文件
swagger 的配置文件 config/swagger-lume.php
|
|
五、测试
启动server php artisan serve --port=8888
浏览器访问 http://localhost:8888/api/documentation
看到下图就算完成了