LoginSignup
0
0

More than 1 year has passed since last update.

OpenAPI GeneratorでSlim3向けのソースコードを生成

Posted at

訳があって未だにPHP 5.6を使用している環境があり、Slim3でWeb APIを実装することになった。
ドキュメンテーションが面倒なので、Swagger EditorでOpenAPIを記述し、そこで生成したyamlをOpenAPI Generatorを使用してWeb APIのスタブコードに変換することにした。
その際、最初に行ったことを以下に記録して置く。

参考先:https://qiita.com/amuyikam/items/e8a45daae59c68be0fc8

作業環境

項目 内容
OS LinuxMint 18.3 (Sylvia)
Docker 18.09.7
Apache 2.4.25 (Debian)
PHP 5.6.40

OpenAPI GeneratorのDockerコンテナの利用

作業は参考先の内容にしたがってOpenAPI GeneratorのDockerコンテナを使用したが、最新のコンテナではSlim3が未対応になっているため、以前のバージョン3.3.4を使用した。

Web APIスタブへの変換

参考先に記載の(Swagger Petstoreの簡易版)petstore.yamlを、以下のコマンドでWeb APIのスタブコードに変換することができた。

docker run --rm -v ${pwd}:/local openapitools/openapi-generator-cli:v3.3.4 \
generate -g php-slim -i /local/petstore.yaml -o /local/petstore

カレントディレクトリ下のpetstoreの内容は以下の通り。

.
├── README.md
├── composer.json
├── index.php
├── lib
│   ├── AbstractApiController.php
│   ├── Api
│   │   └── PetsApi.php
│   ├── Model
│   │   ├── Error.php
│   │   └── Pet.php
│   └── SlimRouter.php
├── phpunit.xml.dist
└── test
    ├── Api
    │   └── PetsApiTest.php
    └── Model
        ├── ErrorTest.php
        └── PetTest.php
  • index.php で 実体化する SlimRouter のソースコードは lib/SlimRouter.php であり、ここに /v1/pets へのルートが記述されている
  • GET /v1/pets の実装は lib/Api/PetsApi.php に listPets メソッドとして定義されている
  • listPets メソッド名は petstore.yaml に operationId として定義されている
  • PetsApi.php ファイル名の Pets は petstore.yaml に tags として定義されている
  • petstore.yaml の components/schemas に定義されている Pet と Error に対応するソースコ ードは lib/Model 下に作成される(Pets のは作成されない)

Web APIを呼び出す

以下の手順でWeb APIを呼び出すことができた。

  • Apacheの .htaccess が有効なドキュメントルート以下に、作成された petstore ディレクトリをコピー
  • コピー先の petstore ディレクトリに移動して、 composer install を実行(いくつかのパッケージを諦めたログが出力されたが無視)
  • curl http://<ホスト名>/v1/pets を実行すると、 How about implementing listPets as a GET method ? と表示されることを確認
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0