Swagger怎么使用,基于Laravel如何生成swagger
Admin 2022-06-16 群英技术资讯 1185 次浏览
这篇文章主要介绍“Swagger怎么使用,基于Laravel如何生成swagger”,有一些人在Swagger怎么使用,基于Laravel如何生成swagger的问题上存在疑惑,接下来小编就给大家来介绍一下相关的内容,希望对大家解答有帮助,有这个方面学习需要的朋友就继续往下看吧。
本教程是基于Laravel 生成swagger 为例子,其实这个东西和语言或者和框架基本没啥区别,因为都是用的公用的json ,通过程序扫描swagger预先规定的“语言”,生成结构存入json中,通过 swagger ui 展现出来(或者自己开发)。
对于php开发人员来说,有大部分同学很不喜欢swagger。 因为这个看上去写起来好麻烦啊,一想到分分钟用php写完的代码,写swagger要写10分钟,心里就抵触这个东西。
身边有Java开发的同学就知道他们很大一部分都用swagger,因为java要维护数据结构,而且swagger在java整合得更灵活。
这个时候java如果看到有php 说swagger反人类的东西,太麻烦了,上古时代的产物。那身边的java朋友会心里窃喜,这么好用的东西都不用,还说php是世界上最好的语言。
最近在写自动生成代码,其实现在Laravel 很多自动生成CURD的。比如像laravel-admin ,一条命令生成CURD,但是生成之后,数据看上去很冷。 比如有一些字段不需要显示,有一些是要select关联枚举的,有一些是 hasMany的,还有 overtrue(正超)的api脚手架也挺好的
所以swaager也可以根据业务需求写自动化生成
https://github.com/DarkaOnLine/L5-Swagger
composer require "darkaonline/l5-swagger"
php artisan vendor:publish --provider "L5Swagger\L5SwaggerServiceProvider" php artisan l5-swagger:generate
填写下面例子生成之后再访问
/api/documentation
@OA\Info 为必须
/** * @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" * ) * ) */
如果要匹配path中的数值则 in path 查询 in query
/**
* @OA\Get(
* path="/projects/{id}",
* operationId="getProjectById",
* tags={"Projects"},
* summary="Get project information",
* description="Returns project data",
* @OA\Parameter(
* name="id",
* description="Project id",
* required=true,
* in="path",
* @OA\Schema(
* type="integer"
* )
* ),
* @OA\Response(
* response=200,
* description="successful operation"
* ),
* @OA\Response(response=400, description="Bad request"),
* @OA\Response(response=404, description="Resource Not Found"),
* security={
* {
* "oauth2_security_example": {"write:projects", "read:projects"}
* }
* },
* )
*/
/**
* @OA\Post(
* path="/api/test/store",
* operationId="api/test/store",
* tags={"Test"},
* summary="Test创建",
* description="Test提交创建",
* @OA\Parameter(
* name="id",
* description="",
* required=false,
* in="query",
* ),
* @OA\Response(
* response=200,
* description="successful operation",
* @OA\JsonContent(
* ref="#/components/schemas/Test"
* )
* ),
* @OA\Response(response=400, description="Bad request"),
* @OA\Response(response=404, description="Resource Not Found"),
* security={
* {
* "api_key":{}
* }
* },
* )
*/ * @OA\RequestBody(
* @OA\MediaType(
* mediaType="multipart/form-data",
* @OA\Schema(
* type="object",
* @OA\Property(
* property="file",
* type="file",
* ),
* ),
* )
* ), * @OA\Parameter(
* name="status",
* in="query",
* description="状态",
* required=true,
* explode=true,
* @OA\Schema(
* type="array",
* default="available",
* @OA\Items(
* type="string",
* enum = {"available", "pending", "sold"},
* )
* )
* ), * @OA\RequestBody(
* @OA\MediaType(
* mediaType="application/json",
* @OA\Schema(
* @OA\Property(
* property="id",
* type="string"
* ),
* @OA\Property(
* property="name",
* type="string"
* ),
* example={"id": 10, "name": "Jessica Smith"}
* )
* )
* ),
* @OA\RequestBody(
* description="order placed for purchasing th pet",
* required=true,
* @OA\JsonContent(ref="#/components/schemas/UserModel")
* ),/**
* @OA\Schema(
* schema="UserModel",
* required={"username", "age"},
* @OA\Property(
* property="username",
* format="string",
* description="用户名称",
* example="小廖",
* ),
* @OA\Property(
* property="age",
* format="int",
* description="年龄",
* example=1,
* nullable=true,
* )
* )
*/一个枚举单独创建一个Schema
/**
* @OA\Schema(
* schema="product_status",
* type="string",
* description="The status of a product",
* enum={"available", "discontinued"},
* default="available"
* )
*/映射到模型中的具体字段
* @OA\Property( * property="status", * ref="#/components/schemas/product_status" * ),
这样前端开发者就可以
和枚举差不多,通过一个Property关联模型
* @OA\Property( * property="user_detail", * ref="#/components/schemas/UserModel2" * ),
关联模型和枚举,可以自动生成请求的参数和,返回的结构
* @OA\Response(
* response=200,
* description="successful operation",
* @OA\JsonContent(
* type="array",
* @OA\Items(ref="#/components/schemas/UserModel"),
* @OA\Items(ref="#/components/schemas/UserModel2")
* )
* ),就比如那天前端小妹跟你说,哥哥,支付状态3代表什么,可能你很快的说出了是某某状态,但是问你11是啥状态,人都要沙雕了。
通过swagger 的Schema 能让前端人员摸清后端的结构信息,比如:

各位,这些都可以自动化编程,自动生成的,工作效率不要太爽
/**
* @OA\Schema(
* schema="UserModel",
* allOf={
* @OA\Schema(ref="#/components/schemas/UserModel2"),
* @OA\Schema(
* type="object",
* description="Represents an authenticated user",
* required={
* "email",
* "role",
* },
* additionalProperties=false,
* @OA\Property(
* property="email",
* type="string",
* example="user@example.com",
* nullable=true,
* ),
* )
* }
* )
*//** * @OA\SecurityScheme( * type="apiKey", * in="query", * securityScheme="api_key", * name="api_key" * ) */
在接口中添加
security={{"api_key": {}}},这时,swagger Ui 会出现一个锁一样的东西

可以输入自己的token,请求的时候会带上token

可以结合 Laravel 的自带token验证,可以参考之前写的文章 Laravel guard 菊花守卫者
更多使用方法可以查看官网例子: https://github.com/zircote/swagger-php/tree/master/Examples/petstore-3.0
线上环境如果访问不了,可能是你nginx 配置的问题,因为,laravel-swagger 是通过file_content_get() 的方式 echo 输出js 的。而你的nginx 配置判断,如果是 .js 或者css 是静态文件,所以到不了index.php ,更执行不了 file_content_get 函数了。可以参考nginx 配置:
charset utf-8;
client_max_body_size 128M;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass php74:9000 这个换成你自己的;
try_files $uri =404;
}
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
laravel中redis队列监听中断是怎么回事?不少朋友都有遇到过队列监听中断的情况,这究竟是什么原因以及要怎么解决呢?我们能够从以下几个步骤入手:
Laravel框架有mvc模式。Laravel是一款采用了mvc架构模式的php语言web开源框架;m为模型层,主要是掌管业务逻辑,v是视图,一般使用于前端作为视图层,c是控制器,用于分发和收集各种消息。
php信号量和共享内存的介绍:1、信号量:是系统提供的一种原子操作,一个信号数量,同时只有一个进程能操作。2、共享内存:是系统在存储器中打开的一个公共存储器区域,任何一个过程都可以访问。
yii2框架中actions作用是什么?在学习yii2框架过程中,我们经常能看到actions方法,那么actions的作用究竟是什么?以及要如何使用呢?下面小编就带大家了解一下。
php自动加载机制的介绍:1、自动加载是在实例化时,PHP自动将所需的文件交给require,不需要手动去require。2、Laravel、thinkphp、yii2等框架是基于自动加载实现的文件自动加载。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008