Laravel swagger接口文档生成和管理

news2025/1/11 20:57:00

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:publish
    php artisan l5-swagger:publish-config
    php artisan l5-swagger:publish-assets
    php artisan l5-swagger:publish-views
    
    php 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 = ui

  ui.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 大全

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1886718.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python入门 2024/7/2 While

目录 while循环的基础应用 循环输出十次&#xff1a;键盘敲烂&#xff0c;月入过万 计算1~100的和 用while循环练习猜数字 while循环的嵌套应用 打印九九乘法表 输出不换行的功能 while循环的基础应用 格式&#xff1a; while 条件&#xff1a; 条件满足时&#xff0c…

昇思25天学习打卡营第1天|yulang

今天主要了解了深度学习框架之昇思MindSpore的初学入门&#xff0c;没想到 ai学习入门如此简单&#xff0c;不愧是华为大手笔&#xff0c;提供的学习环境配置如此之高。这个平台有点类似百度飞桨&#xff0c;大大降低了AI开发门槛&#xff0c;使用户能够快速实现想要的模型&…

从零开始:如何设计一个现代化聊天系统

写在前面: 此博客内容已经同步到我的博客网站,如需要获得更优的阅读体验请前往https://mainjaylai.github.io/Blog/blog/system/chat-system 在当今数字化时代,聊天系统已成为我们日常生活和工作中不可或缺的一部分。从个人交流到团队协作,从客户服务到社交网络,聊天应用…

科技与水利的深度融合实践:揭秘智慧水利技术如何助力水利行业解决传统难题,推动水资源管理向精细化、智能化方向发展

本文关键词&#xff1a;智慧水利、智慧水利工程、智慧水利发展前景、智慧水利技术、智慧水利信息化系统、智慧水利解决方案、数字水利和智慧水利、数字水利工程、数字水利建设、数字水利概念、人水和协、智慧水库、智慧水库管理平台、智慧水库建设方案、智慧水库解决方案、智慧…

HR 如何用好人才测评系统?

HR 如何用好人才测评系统&#xff1f; 人才测评已经广泛应用在企业招聘、人才选拔&#xff0c;人才盘点&#xff0c;岗位晋升&#xff0c;绩效考评等领域&#xff0c;帮助HR提升人力资源管理效率&#xff0c;更好的发掘人才优势&#xff0c;在教育培训方面&#xff0c;人才测评…

我做了个C++算法学习网站,从语法到算法再到数据结构,全方位为算法竞赛小伙伴护航

哈喽&#xff0c;各位小伙伴大家好&#xff0c;我是大李。 最近半个月&#xff0c;我做了个《C算法宝典》并更新了40多篇教程&#xff0c;目前还在更新中&#xff0c;内容从语法到算法和数据结构&#xff0c;全方位为算法竞赛小伙伴护航。 温馨提示&#xff1a;如果你或你的朋…

prescan软件中导入路径文件txt/lpx

由于博主收到的是lpx格式的路径文件&#xff0c;因此&#xff0c;第一步 1.记事本打开 ctrla 全选 ctrlc 复制 2.新建一个excel 鼠标定位到第一行第一列的格子 ctrlv 复制 3.数据栏“分列”功能 4. (0.1递增的数列&#xff0c;纬度&#xff0c;经度&#xff0c;高程) 导入…

解决obsidian加粗字体显示不突出的问题

加粗字体显示不突出的原因&#xff1a;默认字体的加粗版本本来就不突出 解决方法&#xff1a;改成显示突出的类型Microsoft YaHei UI 【效果】 修改前&#xff1a;修改后&#xff1a; 其他方法&#xff1a; 修改css&#xff08;很麻烦&#xff0c;改半天也不一定奏效&#…

中国民间网络外交组织(CCND)

中国民间网络外交组织Chinese Civil Network Diplomacy简称(CCDN) 是由中国网民建立起来的一个网络外交组织&#xff0c;深度贯彻党的主张和网民意志的统一&#xff0c;为保护中国中华优秀传统文化&#xff0c;民族自信&#xff0c;国家安全&#xff0c;民族利益&#xff0c;社…

pandas数据分析(4)

修改DataFrame数据的最简单的方法是通过loc和iloc属性为某些元素赋值。 首先构造一组数据 通过标签或位置设置值 也可以一次修改多个值&#xff1a; 通过布尔索引设置数据 将所有来自China&#xff0c;或者年龄20以下的人名字设置为匿名&#xff1a; 通过替换值设置数据 如果…

【讨论C++继承】

讨论C继承 继承定义继承方式和访问限定符 基类和派生类的赋值转换继承中的作用域派生类的默认成员函数继承和友元继承和静态成员菱形继承虚拟继承 继承是面向对象程序设计中&#xff0c;使代码可以复用的重要手段&#xff0c;它允许程序员在保持原有类特性的基础上进行扩展。 继…

CVPR 最佳学生论文,一键启动「BioCLIP 生物分类的层次预测 Demo」,帮你快速识别生物种类

很多生物由于外形的相似程度较高&#xff0c;难以使用肉眼进行区分。美国俄亥俄州立大学、微软研究院、加州大学欧文分校、伦斯勒理工学院共同发布了「BioCLlP: A Vision Foundation Model for the Tree of Life」&#xff0c; 基于 TREEOFLIFE-10M 这样的大规模标记数据集&…

海参海胆数据集:探索现实世界水下图像增强的创新之旅(目标检测)

亲爱的读者们&#xff0c;您是否在寻找某个特定的数据集&#xff0c;用于研究或项目实践&#xff1f;欢迎您在评论区留言&#xff0c;或者通过公众号私信告诉我&#xff0c;您想要的数据集的类型主题。小编会竭尽全力为您寻找&#xff0c;并在找到后第一时间与您分享。 在当今…

【触想智能】工业平板电脑在新能源领域上的应用分析

工业平板电脑是一种具有高性能和稳定性的计算机设备&#xff0c;适用于在恶劣环境下进行数据采集、运营管理和现场操作。 随着新能源技术的快速发展&#xff0c;工业平板电脑不断地得到应用&#xff0c;并且已成为新能源领域中的重要工具之一。本文将从四个方面探讨工业平板电脑…

springboot项目jar包修改数据库配置运行时异常

一、背景 我将软件成功打好jar包了&#xff0c;到部署的时候发现jar包中数据库配置写的有问题&#xff0c;不想再重新打包了&#xff0c;打算直接修改配置文件&#xff0c;结果修改配置后&#xff0c;再通过java -jar运行时就报错了。 二、问题描述 本地项目是springBoot项目…

短视频预算表:成都柏煜文化传媒有限公司

短视频预算表&#xff1a;精打细算&#xff0c;打造高质量视觉盛宴 在数字时代&#xff0c;短视频以其独特的魅力迅速占领了互联网内容的半壁江山&#xff0c;成为品牌宣传、文化传播乃至个人表达的重要载体。然而&#xff0c;每一个成功的短视频背后&#xff0c;都离不开一份…

试用笔记之-汇通来电显示软件

首先汇通来电显示软件下载 http://www.htsoft.com.cn/download/httelephone.rar

武汉星起航:引领跨境电商风潮,铸就繁荣新篇章

在风起云涌的跨境电商领域&#xff0c;武汉星起航凭借其深厚的行业经验和创新的运营模式&#xff0c;自2017年起便开始在亚马逊平台上崭露头角。这家拥有多家亚马逊自营店铺的企业&#xff0c;不仅积累了大量的实战经验&#xff0c;更为合作伙伴提供了宝贵的市场洞察和运营指导…

专题七:Spring源码之BeanDefinition

上一篇我们通过refresh方法中的第二个核心方法obtainBeanFactory&#xff0c;通过createBeanFacotry创建容Spring的初级容器&#xff0c;并定义了容器的两个核心参数是否允许循环引用和覆盖。现在容器有了&#xff0c;我们来看看容器里的第一个重要成员BeanDefinition。 进入lo…

基于星火大模型的群聊对话分角色要素提取挑战赛Task1笔记

基于星火大模型的群聊对话分角色要素提取挑战赛Task1笔记 跑通baseline 1、安装依赖 下载相应的数据库 !pip install --upgrade -q spark_ai_python2、配置导入 导入必要的包。 from sparkai.llm.llm import ChatSparkLLM, ChunkPrintHandler from sparkai.core.messages…