この記事では、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"}, * ) * ) * ),
* @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") * ) * ),
皆さん、これらは自動的にプログラムされ、自動的に生成されます。作業効率は必要ありません クールすぎる
複数のマージされたスキーマ
/** * @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": {}}},
オンライン環境にアクセスできない場合は、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 サイトの他の関連記事を参照してください。