訳があって未だに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 ?
と表示されることを確認