ホームページ > 記事 > PHPフレームワーク > Laravel Swagger の使用について詳しく見る
この記事では、laravel に関する関連知識を提供します。主に Swagger の使用に関連する問題を紹介します。例として、Laravel に基づいた Swagger の生成を見てみましょう。みんな、助けて。
[関連する推奨事項: laravel ビデオチュートリアル]
このチュートリアルは、例として Swagger を生成する Laravel に基づいています。実際、これは基本的に言語またはフレームワークと同じです。これらはすべてパブリック JSON を使用し、「言語」をスキャンするためです。プログラムを通じて swagger によって事前に決定される。」で生成された構造は json に保存され、swagger ui (または自分で開発) を通じて表示されます。
PHP 開発者にとって、ほとんどの学生は威張った態度を嫌います。というのは、書くのが非常にめんどくさいので、PHPで数分で書けるコードを考えると、スワガワ書くのに10分かかると思うと、心の中で抵抗してしまいます。
Java 開発に携わっている学生は、ほとんどの学生が swagger を使用していることを知っています。これは、Java ではデータ構造を維持する必要があり、swagger の方が Java に統合するのがより柔軟であるためです。
この際、Java の php で swagger は反人類だなどと書かれたら大変です、大昔の産物です。私の周りの Java 友達は、こんな便利なものを使わないことに密かに喜ぶでしょうし、PHP が世界で最高の言語だとも言います。
私は最近自動コード生成を書いていますが、実際、Laravel は CURD を自動的に生成するようになりました。たとえば、laravel-admin
のように、コマンドは CURD を生成しますが、生成後のデータは非常にコールドに見えます。たとえば、一部のフィールドは表示する必要がなく、一部のフィールドは関連する列挙のために選択する必要があり、一部のフィールドは hasMany
であり、真の (スーパー) 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 is required
/** * @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" * ) * ) */
パスの値と一致させたい場合は、クエリ内のパスクエリで
/** * @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"}, * ) * ) * ),#本文は Json モードで送信されます
* @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, * ) * ) */
/** * @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" * ),
フロントエンド開発者ができるように
モデルを関連付けます
これは、プロパティ関連付けモデルを介した列挙と似ています
* @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 のスキーマを通じて、フロントエンド担当者は次のようなバックエンドの構造情報を理解できます。
皆さん、これらは自動的にプログラムされ、自動的に生成されます。作業効率は必要ありません クールすぎる
複数のマージされたスキーマ
/** * @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, * ), * ) * } * ) */検証には、outh2 と apikey という 2 つのメソッドが用意されており、グローバル構成に記述されます (任意のディレクトリに配置することもできます)。
/** * @OA\SecurityScheme( * type="apiKey", * in="query", * securityScheme="api_key", * name="api_key" * ) */インターフェースに
security={{"api_key": {}}},
オンライン環境にアクセスできない場合は、laravel-swagger が file_content_get() を通じて js 出力をエコーするため、nginx 設定に問題がある可能性があります。 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; }
]
以上がLaravel Swagger の使用について詳しく見るの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。