提问者:小点点

用于RailsAPI应用程序的Swagger留档工具


我用谷歌搜索了一下,想找到一种合适且易于实现的方法来为现有的RailsAPI应用程序生成Swagger留档。简而言之,有两种实现方式:通过控制器、模型或通过Rspec控制器/请求规范。列表并不太长,选择也不容易:

  • swagger-文档gem,-最古老的一个。优点:实现将在控制器中完成。缺点:不支持Swagger V2版本,仅限于1.2。
  • swagger-块gem,-swagger-文档的改进版本,支持Swagger V2版本,实现将在控制器,模型中完成。但是我无法使其工作,Swagger Editor无法解析生成的json文件。
  • rswaggem:使用基于Swagger的DSL扩展rspec-rails“请求规范”。就我个人而言,我发现在现有的Rails应用程序中实现非常困难,原因有两个:
    • 您必须修改现有的请求规范
    • 请求规范看起来很奇怪,语法也不是RSpec-ish。

    有人知道为现有的RailsAPI应用程序生成Swagger留档的其他宝石吗?欢迎任何建议!谢谢。


共2个答案

匿名用户

我来的解决方案是使用rswiggem和rspec-rails-swagger gem-通过在您的Gemfile中添加以下内容来安装rswiggem:

#Gemfile
gem 'rswag-api'
gem 'rswag-ui'

group :development, :test do
  gem 'rspec-rails',         '~> 3.8.1'
  gem 'rspec-rails-swagger', '~> 0.1.5'
...
end
  • 运行“捆绑安装”
  • 运行rails g rwag: install生成swagger_helper.rb
  • 要使用rspec-rails-swagger创建新的请求规范,请运行rails生成rspec: swagger PostsController(将名称调整为您想要编写规范的won控制器)。
  • 编写一些规范,如rspec-rails-swagger README
  • 中所述
  • 运行bundle exec rake swagger生成一个swagger. json文件。
  • 挂载RSwagAPI和RSwagUI引擎,方法是将以下行添加到您的routes. rb文件中:
#../config/routes.rb

Rails.application.routes.draw do
  mount Rswag::Ui::Engine => '/api-docs'
  mount Rswag::Api::Engine => '/api-docs'
...#other routes come here
end
  • 使用rails s
  • 启动您的rails服务器
  • 导航到localhost:3000/api-docs查看生成的Swagger留档。

注意:它工作得很好,并回复了客户的要求,即:

  • 生成Swagger 2.0兼容的留档
  • 能够直接从Swagger接口执行请求以查看真实数据

我删除了rswag-spesgem,因为它无法验证我在RailsAPI应用程序中使用的gem以JSONAPI格式返回active_model_serializers响应模式。我总是:

  • 生成文档
  • 注释掉失败的测试
  • 然后取消注释失败的测试,以防我需要生成一些新的留档,这真的很难维护。

现在请求规范由RSpec和rspec-rails-swagger同时验证,没有任何麻烦。

希望这有帮助。

匿名用户

我们的工作解决方案是使用:

  • swagger-阻止宝石以生成SwaggerJSON
  • SwaggerUI控制台Chrome扩展提供SwaggerUI