如何在Lumen / Laravel中集成Swagger用于REST API?

时间:2017-07-20 10:02:28

标签: laravel-5.4 lumen

我在Lumen微框架中构建了一些REST API,它工作正常。现在我想将Swagger集成到其中,以便API在未来的使用中得到很好的记录。有没有人这样做过?

2 个答案:

答案 0 :(得分:6)

使用 OpenApi 3.0 规范进行摇摇欲坠的的步骤(这决定了编写批注的方式,以便生成摇摇欲坠的文档)

为了使它起作用,我在@ black-mamba答案上进行了此调整。

1。安装swagger-lume依赖项(也将安装swagger)

composer require "darkaonline/swagger-lume:5.6.*"

2。编辑bootstrap/app.php文件

  

确保未对$app->withFacades();进行评论(第26行)

     在创建应用程序部分的

之前,在注册容器绑定部分

之前添加以下内容
$app->configure('swagger-lume');
     在注册服务提供商部分的

添加

$app->register(\SwaggerLume\ServiceProvider::class);

3。发布swagger-lume的配置文件

php artisan swagger-lume:publish

4。在代码中添加注释

例如,在您的app/Http/Controllers/Controller.php中,您可以拥有文档的一般部分

<?php

namespace App\Http\Controllers;

use Laravel\Lumen\Routing\Controller as BaseController;

class Controller extends BaseController
{
    /**
     * @OA\Info(
     *   title="Example API",
     *   version="1.0",
     *   @OA\Contact(
     *     email="support@example.com",
     *     name="Support Team"
     *   )
     * )
     */
}

在每个控制器内部,每个公共方法上方都应具有适当的注释

<?php

namespace App\Http\Controllers;

class ExampleController extends Controller
{
    /**
     * @OA\Get(
     *     path="/sample/{category}/things",
     *     operationId="/sample/category/things",
     *     tags={"yourtag"},
     *     @OA\Parameter(
     *         name="category",
     *         in="path",
     *         description="The category parameter in path",
     *         required=true,
     *         @OA\Schema(type="string")
     *     ),
     *     @OA\Parameter(
     *         name="criteria",
     *         in="query",
     *         description="Some optional other parameter",
     *         required=false,
     *         @OA\Schema(type="string")
     *     ),
     *     @OA\Response(
     *         response="200",
     *         description="Returns some sample category things",
     *         @OA\JsonContent()
     *     ),
     *     @OA\Response(
     *         response="400",
     *         description="Error: Bad request. When required parameters were not supplied.",
     *     ),
     * )
     */
    public function getThings(Request $request, $category)
    {
        $criteria= $request->input("criteria");
        if (! isset($category)) {
            return response()->json(null, Response::HTTP_BAD_REQUEST);
        }

        // ...

        return response()->json(["thing1", "thing2"], Response::HTTP_OK);
    }
}

5。生成招摇的文档

php artisan swagger-lume:generate

每次更新文档时都运行此


请参阅:

答案 1 :(得分:2)

我很难学习如何使用它。在这里,我将分享一些我为使其工作而做的事情

Use this wrapper

在终端中运行此命令:

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

如果这对您不起作用,则来自回购链接的旧版本

然后从回购中按照以下步骤操作:

  

打开bootstrap / app.php文件并:   在Create The Application中取消注释该行(在第26行附近)   部分:

 $app->withFacades(); add this line before Register Container Bindings section:

 $app->configure('swagger-lume'); add this line in Register Service Providers section:

$app->register(\SwaggerLume\ServiceProvider::class);

然后,您需要为项目使用注释而不是YAML或JSON For more 在app文件夹中创建Annotation.php文件,添加以下示例

/**
 * @SWG\Swagger(
 *     basePath="/",
 *     schemes={"http"},
 *     @SWG\Info(
 *         version="1.0.0",
 *         title="HAVE MY BOOKS",
 *         @SWG\Contact(
 *             email="ishumahajan94@gmail.com"
 *         ),
 *     )
 * )
 */
/**
* @SWG\Get(
 *   path="/",
 *   summary="Version",
 *   @SWG\Response(
 *     response=200,
 *     description="Working"
 *   ),
 *   @SWG\Response(
 *     response="default",
 *     description="an ""unexpected"" error"
 *   )
 * )
 */

然后运行

php artisan swagger-lume:publish

然后运行

php artisan swagger-lume:generate

这会生成JSON,可以从您的localhost:8000或您为LUMEN服务提供的任何端口访问

  

注意:在回购中创建问题后,我发现要访问您需要提供服务或运行

php -S localhost:8000 public/index.php

由于php -S localhost:8000 public

的PHP路由问题