引き続き swagger-php を試している.前回 swagger-php のサンプルアノテーションを使って Swagger Specification を生成するところまで確認したので,次は実際にアノテーションを書いてみようと思って格闘していた.
deprecated って言われた
swagger-php のドキュメントを参考にアノテーションを書いていたら,以下のエラーが出てしまった.調べたところ,このドキュメントは Swagger 1.x 系のもので,現在主流の Swagger 2.x 系だと deprecated になっているアノテーションだとわかった.gh-pages ブランチを見ると最近メンテされてなさそうだし,swagger-php で Swagger 2.x 系に対応したドキュメントはどこにあるんだろう?
まぁ今後 @SWG\Resource() と @SWG\Api() となっていたら「あ! Swagger 1.x 系だな」とわかるし,学びがあって良かった(と思うことにする).
[WARN] The annotation @SWG\Resource() is deprecated. Found in xxx For more information read the migration guide: https://github.com/zircote/swagger-php/blob/2.x/docs/Migrating-to-v2.md [WARN] The annotation @SWG\Api() is deprecated. Found in xxx For more information read the migration guide: https://github.com/zircote/swagger-php/blob/2.x/docs/Migrating-to-v2.md
swagger-php Examples
ドキュメントが無さそうだったので,swagger-php の Examples を参考にした.Examples はちゃんと Swagger 2.x 系になっていた.全ての記法が網羅されているわけではないけど,最低限の Swagger Specification なら書けそうな気がする.
アノテーションを書いてみた
ローカルの Vagrant に PHP でサンプル API を実装して,アノテーションを書いてみた.前回同様に swagger-php CLI で Swagger Specification を出力して,Swagger UI で API をコールするところまで確認できた.
まず Swagger Specification の共通的な部分を書いた.
- SWAGGER OBJECT
- INFO OBJECT
- CONTACT OBJECT
- LICENSE OBJECT
- EXTERNAL DOCUMENTATION OBJECT
/**
* @SWG\Swagger(
* schemes={"http"},
* host="192.168.33.22",
* basePath="/api/v1",
* @SWG\Info(
* version="1.0.0",
* title="Swagger Sample",
* description="This is a documents for swagger sample server.",
* @SWG\Contact(
* email="swagger@example.com"
* ),
* @SWG\License(
* name="Apache 2.0",
* url="http://www.apache.org/licenses/LICENSE-2.0.html"
* )
* ),
* @SWG\ExternalDocumentation(
* description="Find out more about Swagger",
* url="http://swagger.io"
* )
* )
*/
次に API 単位の部分を書いた.モデル関連のアノテーションは無くても動いたので省略した.
- PATHS OBJECT
- PATH ITEM OBJECT
- OPERATION OBJECT
/**
* @SWG\Get(
* path="/projects",
* summary="list projects",
* tags={"project"},
* description="list projects",
* @SWG\Response(
* response=200,
* description="A list with projects"
* ),
* @SWG\Response(
* response="400",
* description="Invalid tag value",
* )
* )
*/
参考情報
Swagger UI はローカルで直接 dist/index.html を参照していたので,Vagrant 上に実装したサンプル API は CORS の制限でコールできなかった.一時的に Nginx の設定で CORS を通すようにして,無事動くようになった.念のためメモしておく.
server {
(中略)
location ~ \.php$ {
if ($request_method = 'GET') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET';
add_header 'Access-Control-Allow-Headers' 'DNT, X-CustomHeader, Keep-Alive, User-Agent, X-Requested-With, If-Modified-Since, Cache-Control, Content-Type';
}
}
(中略)
}
Web API Advent Calendar
今日の Web API Advent Calendar で Swagger の記事が上がってた!
Amazon API Gateway との連携には興味があるし,それこそ Swagger のメリットかなとも思うので,試したいなー!
まとめ
少し Swagger に詳しくなった気がするw