美文网首页
在laravel框架中集合swagger

在laravel框架中集合swagger

作者: ayingaha | 来源:发表于2019-02-16 18:35 被阅读0次

Swagger是一种简单、强大的RESTful API表现形式。可以提供API文档,前后端同时开发,是非常简洁、高效的工具。如图:


1550313269(1).jpg

1.首先新建一个laravel项目

 composer create-project --prefer-dist laravel/laravel blog 5.5.*

2.导入l5-swagger包

composer require "darkaonline/l5-swagger:5.5.*"

3.修改配置

打开config/app.php,在providers添加下面这一行

L5Swagger\L5SwaggerServiceProvider::class,

4.定义一个控制器

php artisan make:controller SwaggerController 

5.在SwaggerController中添加如下代码

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

/**
 * @SWG\Swagger(
 *     basePath="/",
 *     host="域名",
 *     schemes={"http"},
 *     @SWG\Info(
 *         version="1.0.0",
 *         title="xxx API",
 *         description="xxx  API 1.0 Specification",
 *         termsOfService="/",
 *         @SWG\Contact(name="xxx API Team"),
 *         @SWG\License(name="MIT")
 *     ),
 *     @SWG\Definition(
 *         definition="ErrorModel",
 *         type="object",
 *         required={"code", "message"},
 *         @SWG\Property(
 *             property="code",
 *             type="integer",
 *             format="int32"
 *         ),
 *         @SWG\Property(
 *             property="message",
 *             type="string"
 *         )
 *     )
 * )
 */
class SwaggerController extends Controller
{

    public function doc()
    {
        $swagger = \Swagger\scan(realpath(__DIR__.'/../../'));
        //或者$swagger = \Swagger\scan(app_path('Http/Controllers/'));
        return response()->json($swagger, 200);
    }

}

6.定义路由

在roote/web.php中添加路由

Route::get('/doc',  'SwaggerController@doc');

7.访问127.0.0.1/doc看到如下信息说明成功

{"swagger":"2.0","info":{"title":"\u6211\u7684`Swagger`API\u6587\u6863","version":"1.0.0"},"paths":{"\/swagger\/my-data":{"get":{"tags":["project"],"summary":"\u62ff\u4e00\u4e9b\u795e\u79d8\u7684\u6570\u636e","description":"\u8bf7\u6c42\u8be5\u63a5\u53e3\u9700\u8981\u5148\u767b\u5f55\u3002","operationId":"getMyData","produces":["application\/xml","application\/json"],"parameters":[{"name":"reason","in":"query","description":"\u62ff\u6570\u636e\u7684\u7406\u7531","required":true,"type":"string"}],"responses":{"default":{"description":"\u64cd\u4f5c\u6210\u529f"}}}}},"definitions":{}}

8.编写第一个POST的API接口

php artisan make:controller APIController
 /**
     * @SWG\Post(
     *     path="/create/api",
     *     tags={"api"},
     *     operationId="APICreate",
     *     summary="创建API",
     *     description="使用说明:创建API",
     *     produces={"application/json"},
     *     @SWG\Parameter(
     *         description="参数描述",
     *         in="formData",
     *         name="api_id",
     *         required=true,
     *         type="integer",
     *
     *     ),
    * @SWG\Parameter(
     *         description="内容",
     *         in="formData",
     *         name="content",
     *         required=false,
     *         type="string",
     *
     *     ),
     * @SWG\Response(
     *         response=200,
     *         description="successful operation",
     *     ),
     * )
     */
   public function createAPI()
  {
       dd(1);
  }

在route/web.php中添加

 Route::post('/create/api','APIController@createAPI');

因为laravel自带csrf Token认证,必须符合csrf token的验证,对方发来的post请求才会被接受,所以必须在App\Http\Middleware\VerifyCsrfToken里,将该请求路径去除CSRF TOKEN的保护,官网说明

class VerifyCsrfToken extends BaseVerifier
{
    protected $except = [
       'create/api', 
    ];
}

当然也可以用dinggo等其他办法,暂不做介绍
目前可以用postMan测试一下,如果看到返回1,则说明成功

9.编写Get的API接口

/**
     * @SWG\Get(
     *     path="/create/getAPI",
     *     tags={"api"},
     *     operationId="CreateGetAPI",
     *     summary="创建get接口",
     *     description="使用说明:创建get的API接口",
     *     produces={"application/json"},
     *     @SWG\Parameter(
     *         description="id",
     *         in="query",
     *         name="id",
     *         required=true,
     *         type="integer",
     *
     *     ),
     * @SWG\Response(
     *         response=200,
     *         description="successful operation",
     *     ),
     * )
     */
    public function bindtime()
    {
    }

接下重复第8步

10.引入Swagger-UI

可以点击链接Swagger-UI,下载压缩包,解压缩之后将dist/文件夹下的所有内容放到public/swagger/下,也可以访问我的分享链接下载链接,提取码:1lp0

11.修改Swagger-UI默认请求的接口地址

打开public/swagger/index.html,编辑:

<script type="text/javascript">
    $(function () {
        var url = window.location.search.match(/url=([^&]+)/);
        if (url && url.length > 1) {
          url = decodeURIComponent(url[1]);
        } else {
           url = "http://你的域名/doc"; //这一行
        }
    .
    .
    .
})
</script>

12.打开http://域名/swagger,就可以看到

1550312432(1).jpg

13.其他配置和修改,请参考官网

相关文章

网友评论

      本文标题:在laravel框架中集合swagger

      本文链接:https://www.haomeiwen.com/subject/mblieqtx.html