web-dev-qa-db-ja.com

REST APIのためにLumen / LaravelにSwaggerを統合する方法は?

私はいくつかのREST APIをLumenマイクロフレームワークで構築しましたが、それは正常に動作しています。Swaggerをそれに統合して、APIが将来の使用について十分に文書化されるようにしたいと思います。誰かがこれを実行しましたか?

9
Anand Pandey

Laravel Lumen 5.7OpenApi 3.0仕様を使用してSwaggerで実行する手順(これにより、注釈の記述方法が決まり、swaggerドキュメントが生成されます)

私はそれを機能させるために、@ black-mambaの回答でこの調整に達しました。

1。 swagger-lume依存関係をインストールします(swaggerもインストールされます)

_composer require "darkaonline/swagger-lume:5.6.*"
_

2。 _bootstrap/app.php_ファイルを編集

$app->withFacades();がコメント化されていないことを確認してください(26行目あたり)

Create Applicationセクションで、Register Container Bindingsセクションの前に以下を追加します

_$app->configure('swagger-lume');
_

Register Service Providersセクションに追加

_$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="[email protected]",
     *     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。 Swaggerドキュメントを生成

_php artisan swagger-lume:generate
_

ドキュメントを更新するたびにこれを実行します


見る:

10
Bogdan

使い方を覚えるのに苦労しました。ここで、それを機能させるために行ったいくつかのことを共有します。

このラッパーを使用

端末で次のコマンドを実行します。

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

または、これが機能しない場合は、リンクされたリポジトリの古いバージョン

次に、リポジトリから次の手順に従います。

Bootstrap/app.phpファイルを開き、「アプリケーションの作成」セクションで次の行(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の代わりにプロジェクトの注釈を使用する必要があります 詳細 アプリフォルダーにAnnotation.phpファイルを作成し、次のサンプルを追加します

/**
 * @SWG\Swagger(
 *     basePath="/",
 *     schemes={"http"},
 *     @SWG\Info(
 *         version="1.0.0",
 *         title="HAVE MY BOOKS",
 *         @SWG\Contact(
 *             email="[email protected]"
 *         ),
 *     )
 * )
 */
/**
* @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

これにより、localhost:8000またはLumenサービスを提供している任意のポートからアクセスできるJSONが生成されます

注:リポジトリで問題を作成した後、アクセスするには、使用または使用してサービスを実行する必要があることがわかりました

php -S localhost:8000 public/index.php

PHP php -S localhost:8000 public

5
Black Mamba