Laravel 安装 Swagger 扩展及使用教程

什么是 Swagger

Swagger 是一个基于 Open Api 规范的 API 管理工具,通过项目注解的形式自动构建 API 文档,拥有在线调试的功能。提供了多语言的客户端,laravel 中也有相应的扩展包。

选择的扩展包

darkaonline/l5-swagger 是一款针对 laravel 集成开发的扩展包,可以直接使用 laravel 命令行模式进行操作。

packagist的swagger

安装过程

1、通过 composer 安装扩展

composer require darkaonline/l5-swagger

2、添加服务提供者,引导框架运行时加载,AppServiceProvider 中添加

$this->app->register(\L5Swagger\L5SwaggerServiceProvider::class);

或者在 app 配置文件,providers 选项中添加

L5Swagger\L5SwaggerServiceProvider::class

3、配置完成后,通过输入命令 php artisan 查看已经发现该扩展已经加入 laravel 命令列表

swagger命令

4、在浏览器中输入 http://localhost/api/documentation 打开 Swagger UI 面板就可以看到接口信息
swagger ui

5、默认的配置文件在 vendor 的 Swagger 项目中,如果需要修改默认的配置项,可以把配置文件复制出来进行覆写

php artisan vendor:publish --provider "L5Swagger\L5SwaggerServiceProvider"
swagger配置文件

注解格式

由于 Swagger 是采用注解的形式进行文档生成,需要按照既定的规则去编写注解,这里只提供一些重要的信息

  • API 基础信息
    title:API 名称
    version:API 版本
    description:API 描述
    @OA\Contact:联系方式
    @OA\License:许可协议
<?php
/**
 *
 * @OA\Info(
 *      title="电商API",
 *      version="1.0.1",
 *      description="电商API测试文档",
 *      @OA\Contact(
 *          email="dyuan58@gmail.com"
 *      ),
 *     @OA\License(
 *         name="Apache 2.0",
 *         url="http://www.apache.org/licenses/LICENSE-2.0.html"
 *     )
 * )
 */
?>
  • 接口服务器地址
    url:接口地址
<?php
/**
 *  @OA\Server(
 *      url="http://localhost.dev/api/v2",
 *      description="电商测试环境"
 *  )
 *
 *  @OA\Server(
 *      url="http://localhost.production/api/v1",
 *      description="电商生产环境"
 * )
 */
?>
  • 请求
    @OA\Get | @OA\Post:请求类型
    path:请求URI
    tag:归纳相同标签的接口
    summary:接口概要
    description:接口描述
    operationId:接口ID,全局唯一
  • 响应
    @OA\Response:响应信息
    response:响应的 http 状态码
    description:响应描述
    @OA\MediaType:响应体
    mediaType:返回格式
    @OA\Schema:定义响应体内的数据
    @OA\Property:定义属性字段(id),数据类型(string),字段描述(description)
    @OA\JsonContent:因为现在接口通常采用 json 通讯,所以可以直接定义 json 响应格式
    ref:指定可复用的注解模块,TestApi 为模块ID,全局唯一
    @OA\Schema:可复用注解模块,内部可嵌套 Schema
<?php
/**
 * @OA\Get(
 *     path="/test",
 *     tags={"对外服务"},
 *     summary="测试用例",
 *     description="一个测试用的控制器",
 *     operationId="testController",
 *     @OA\Response(
 *         response=500,
 *         description="请求错误示例",
 *         @OA\JsonContent(ref="#/components/schemas/TestApi"),
 *     ),
 *     @OA\Response(
 *         response=200,
 *         description="请求成功示例",
 *         @OA\MediaType(
 *             mediaType="application/json",
 *             @OA\Schema(
 *                 @OA\Property(property="id", type="integer", description="主键ID"),
 *                 @OA\Property(property="name", type="string", description="名称"),
 *             ),
 *         )
 *     ),
 * )
 * @OA\Schema(
 *   schema="TestApi",
 *   allOf={
 *     @OA\Schema(
 *       @OA\Property(property="user_id", type="integer", description="用户ID"),
 *       @OA\Property(property="email", type="string", description="email"),
 *     )
 *   }
 * )
 */
?>

生成文档

命令行执行,如果注解格式错误,会报致命错误

php artisan l5-swagger:generate

如果不想每次修改后都手动执行生成命令,可以通过修改 env 文件,添加配置项 L5_SWAGGER_GENERATE_ALWAYS=true
打开 API 文档页面,即可以发现文档生成成功

API文档

点击 "try it out",可以进行在线调试


try it out

点击 "Execute",就可以发送调试请求


execute
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,752评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,100评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,244评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,099评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,210评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,307评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,346评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,133评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,546评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,849评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,019评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,702评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,331评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,030评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,260评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,871评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,898评论 2 351

推荐阅读更多精彩内容