紹介する内容
- swagger.jsonから作られたAPIドキュメント画面が見えます(rswag-ui)
- rspecで手作りのAPIのテストができます(rspec)
- https://github.com/rswag/rswag が紹介する対象です
結論
rails newしたプロジェクトでとにかく
rswagを動かせる実装とコマンドです
- Gemfileにgemを追加して
bundle install
します
gem 'rswag-api'
gem 'rswag-ui'
group :test do
gem 'rspec-rails'
gem 'rswag-specs'
end
- 実行コマンドです
bundle exec rails g rswag:api:install
bundle exec rails g rswag:ui:install
bundle exec rails generate rspec:install
RAILS_ENV=test bundle exec rails g rswag:specs:install
RAILS_ENV=test rake rswag:specs:swaggerize
-
APIドキュメントに例を追加した画面は一番下の
APIドキュメント例が追加された画面とrspecを実行してみます
で確認できます
APIドキュメント画面の内容はRAILS_ENV=test rake rswag:specs:swaggerize
で作られたjsonかyamlファイル次第です
-
spec/swagger_helper.rb
でconfig.swagger_docs
にAPIドキュメントで見せたい内容を書いて、RAILS_ENV=test rake rswag:specs:swaggerize
したら、jsonかyamlファイルが作られます-
config.swagger_docs
内容次第で、上の緑色のcreateがいるイメージで見える作られたファイルたちを調整が必要があります
-
APIドキュメントに使うjsonやyamlファイルはRAILS_ENV=test rake rswag:specs:swaggerize
で作りますが、下準備が必要でした
-
RAILS_ENV=test bundle exec rails g rswag:specs:install
でspec/swagger_helper.rb
を作ります -
spec/swagger_helper.rb
のconfig.swagger_docs
部分にAPIドキュメントで見せたい内容を書きます -
RAILS_ENV=test rake rswag:specs:swaggerize
を実行すると、spec/swagger_helper.rb
のconfig.swagger_docs
の通り作ってくれます
- 筆者は
swagger.json
を手作りして動かしました。READMEを復習した後に自動生成する方法に気づきました。以下はspec/swagger_helper.rb
に書かれている内容です
...(省略)
# When you run the 'rswag:specs:swaggerize' rake task, the complete Swagger will
# be generated at the provided relative path under swagger_root
...(省略)
RAILS_ENV=test rake rswag:specs:swaggerize
でエラーになったら、spec/spec_helper.rb
とspec/rails_helper.rb
があるか確認してください
紹介始めます
ディレクトリ構成
全体ソースコードは https://github.com/cheekykorkind/qiita-example/tree/master/rails/6/rswag で確認できます。
結論
のrails newしたプロジェクトでとにかくrswagを動かせる実装とコマンドです
を全部実行した上で、
spec/swagger_helper.rb
とinitializers/rswag-ui.rb
を修正して、APIドキュメントに例を追加したコードです。
-
手動で調整した部分
spec/swagger_helper.rb
config/initializers/rswag-ui.rb
-
手動で作った部分
spec/api/v1/books_spec.rb
app/controllers/api/v1/books_controller.rb
app/controllers/api/v1/books_controller.rb実装周り説明
- rswagと直接的に関係ないところです。Railsのコントローラーでjsonを返すようにしました
spec/swagger_helper.rb実装周り説明
- 以下のイメージとソースコード https://github.com/cheekykorkind/qiita-example/blob/master/rails/6/rswag/swagger/v1/swagger.json を参考すると書き方が理解できると思います
initializers/rswag-ui.rb実装周り説明
- APIドキュメントに使うファイルをjsonにしたから、yaml部分をjsonに変えました
# コマンド実行で作られるところ
# c.swagger_endpoint '/api-docs/v1/swagger.yaml', 'API V1 Docs'
# jsonファイルを使うから修正
c.swagger_endpoint '/api-docs/v1/swagger.json', 'API V1 Docs'
APIドキュメント例が追加された画面とrspecを実行してみます
- docker composeがあるデレクトリー移動に移動します
cd qitta-example/rails/6/rswag
- dockerコンテナをバックグラウンドで起動します
DOCKER_UID=$(id -u $USER) DOCKER_GID=$(id -g $USER) docker-compose up -d
- rspecでAPIを試します
RAILS_ENV=test bundle exec rspec
- ブラウザでAPIドキュメントを確認します
-
http://192.168.33.14:3000/api-docs
- 開発環境次第でipやportが変わる可能性があります
-