当前位置: 首页 > news >正文

Laravel swagger接口文档生成和管理

Laravel swagger接口文档生成和管理

接口开发随着时间推移接口会越来越多,随着多部门之间的协作越来越频繁, 维护成本越来越高, 文档的可维护性越来越差, 需要一个工具来管理这些接口的文档, 并能够充当mock server给调用方使用

这里推荐swagger生成和管理接口文档,下面介绍基于laravel项目的swagger使用

福利彩蛋:没有好玩的 API 接口?上百款免费接口等你来,免费 API,免费 API 大全

安装swagger

    //安装composer require darkaonline/l5-swagger

laravel >= 5.5

    php artisan vendor:publish --provider "L5Swagger\L5SwaggerServiceProvider"php artisan l5-swagger:generate

laravel < 5.5

    php artisan l5-swagger:publishphp artisan l5-swagger:publish-configphp artisan l5-swagger:publish-assetsphp artisan l5-swagger:publish-viewsphp artisan l5-swagger:generate

注意:在运行 php artisan l5-swagger:generate 命令之前,请确保在app目录下存在@OA\Info注解和 且至少定义一个@OA\Get 注解(接口) 否则会异常:


//这是基本信息/*** @OA\Info(*      version="1.0.0",*      title="L5 OpenApi",*      description="L5 Swagger OpenApi description",*      @OA\Contact(*          email="darius@matulionis.lt"*      ),*     @OA\License(*         name="Apache 2.0",*         url="http://www.apache.org/licenses/LICENSE-2.0.html"*     )* )*///这是get接口
/*** @OA\Get(*   path="/api/users/{user_id}",*   summary="根据 ID 获取用户信息",*   tags={"用户管理"},*   @OA\Parameter(*     name="user_id",*     in="path",*     required=true,*     description="用户 ID",*     @OA\Schema(*        type="string"*     )*   ),*   @OA\Response(*     response=200,*     description="用户对象",*     @OA\JsonContent(ref="#/components/schemas/UserModel")*   )* )*///UserModel定义/*** @OA\Schema(*      schema="UserModel",*      required={"username", "age"},*      @OA\Property(*          property="username",*          type="string",*          description="用户名称"*      ),*      @OA\Property(*          property="age",*          type="int",*          description="年龄"*      )* )*/

全局鉴权:注解

/*** @OA\SecurityScheme(*     type="oauth2",*     description="这里有多中校验方式:basic|apiKey|oauth2",*     name="Password Based",*     in="header|query",*     scheme="https",*     securityScheme="Password Based",*     @OA\Flow(*         flow="password",*         authorizationUrl="/oauth/authorize",*         tokenUrl="/oauth/token",*         refreshUrl="/oauth/token/refresh",*         scopes={}*     )* )*/

全局鉴权:config配置全局开启(l5-swagger.php)

    'securityDefinitions' => ['securitySchemes' => [/** Examples of Security schemes*/'Authorization-Bearer' => [ // Unique name of security'type' => 'apiKey',// The type of the security scheme. Valid values are "basic", "apiKey" or "oauth2".'description' => '用户登录鉴权Token','name' => 'authorization',// The name of the header or query parameter to be used.'in' => 'header',// The location of the API key. Valid values are "query" or "header".],]]

鉴权参数

参数含义
type类型 “http”, “apiKey”, “oauth2”, “openIdConnect”
name名称
in需要API密钥的位置 值为 query、header
flowOAuth2安全方案使用的流 值为:“implicit”、“password”、“application”或“accesscode”
authorizationUrlOAuth2授权URL
scopesOAuth2安全方案的可用范围

问题

如果在使用中遇到了Authorize:apiKey header模式情况下,token未通过header进行请求传递的话请参照修复

修改:/resource/views/vendor/l5-swagger/index.blade.php,主动添加token到头部

  window.ui = uiui.getConfigs().requestInterceptor = function (request) {if (ui.authSelectors.authorized().size){var authObject = ui.authSelectors.authorized()._root.entries[0];var securityConfig = authObject[1]._root.entries[1][1]._list._tail.array;if (securityConfig[0][1] === 'apiKey' && securityConfig[3][1] === 'header') {var token = authObject[1]._root.entries[2][1];if (authObject[0] === 'Bearer' && !token.startsWith('Bearer ')){token = 'Bearer ' + token;}request.headers[securityConfig[2][1]] = token;}}request.headers['X-CSRF-TOKEN'] = '{{ csrf_token() }}';return request;} 

演示

运行完php artisan l5-swagger:generate 命令后就可以通过浏览器查看接口文档(访问/api/documentation: 当然这个地址可以在l5-swagger.php配置文件中进行修改)

image.png
福利彩蛋:没有好玩的 API 接口?上百款免费接口等你来,免费 API,免费 API 大全

相关文章:

  • 数据结构与算法—空间复杂度详解与示例(C#,C++)
  • 【力扣 - 每日一题】3115. 质数的最大距离(一次遍历、头尾遍历、空间换时间、埃式筛、欧拉筛、打表)Golang实现
  • Halcon机器视觉定位--模板匹配
  • Android启动时间分析
  • 7.2总结
  • 计算机相关术语科普之什么叫网关(Gateway)
  • llama3模型部署时遇到的问题及解决方案
  • 【ONLYOFFICE】| 桌面编辑器从0-1使用初体验
  • mysql创建表的规范
  • 鸿蒙开发设备管理:【@ohos.multimodalInput.touchEvent (触摸输入事件)】
  • XPath 语法笔记
  • DP:子序列问题
  • elasticsearch导出和导入数据
  • eNSP中WLAN的配置和使用
  • Linux文件描述符与FILE指针互相转换
  • angular组件开发
  • Apache的基本使用
  • Facebook AccountKit 接入的坑点
  • JAVA 学习IO流
  • Python3爬取英雄联盟英雄皮肤大图
  • Python实现BT种子转化为磁力链接【实战】
  • React as a UI Runtime(五、列表)
  • 简单基于spring的redis配置(单机和集群模式)
  • 理清楚Vue的结构
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 算法-图和图算法
  • 用jquery写贪吃蛇
  • 用jQuery怎么做到前后端分离
  • FaaS 的简单实践
  • ​​​【收录 Hello 算法】10.4 哈希优化策略
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​Linux·i2c驱动架构​
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (145)光线追踪距离场柔和阴影
  • (7)摄像机和云台
  • (C#)获取字符编码的类
  • (ibm)Java 语言的 XPath API
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .NET编程C#线程之旅:十种开启线程的方式以及各自使用场景和优缺点
  • .net经典笔试题
  • .set 数据导入matlab,设置变量导入选项 - MATLAB setvaropts - MathWorks 中国
  • /var/spool/postfix/maildrop 下有大量文件
  • @软考考生,这份软考高分攻略你须知道
  • [C++] vector list 等容器的迭代器失效问题
  • [C++]命名空间等——喵喵要吃C嘎嘎
  • [CareerCup] 6.1 Find Heavy Bottle 寻找重瓶子
  • [EFI]Acer Aspire A515-54g电脑 Hackintosh 黑苹果efi引导文件