grape-swagger-rails
grape-swagger-rails copied to clipboard
Support multiple "documentation pages"
Right now grape-swagger-rails expects to be mounted only once, at a single route. It also expects a single global definition of options.url
, options.app_url
, etc.
It would be really useful if we could mount multiple "swagger roots", just like we can mount multiple APIs at different routes using Grape itself. I think it'll also go a long way towards supporting issues like https://github.com/ruby-grape/grape-swagger/issues/141 and at the very least provide a nice workaround
Would this be something you'd be open to supporting? I'm thinking it'll look something like you can specify a set of options
per-mount and you can mount multiple subclasses of GrapeSwaggerRails::Engine
at different routes.
P/S: The reason we need this now is due to Swagger 2.0's decision to only support one endpoint/operation for each (unique resource path + HTTP method) combo. The version of swagger-ui
vendored here assumes this and only documents the last-mounted endpoint for each path. Since we use accept-header-only versioning, obviously this is very bad for us.
I would welcome a PR for this. Ideally we should do away with these global options if possible.
@suan I had a simmilar issue. In the project, I am using Accept-Version
versioning header. I have added the following code to the Rails initializer:
GrapeSwaggerRails.options.before_filter do |request|
if (version = request.query_parameters['version']).present?
GrapeSwaggerRails.options.headers['Accept-Version'] = version
end
end
Then I needed to modify a bit grape-swagger-rails to ensure the headers are taken into consideration upon first SwaggerUi.load()
(look at my comment here https://github.com/ruby-grape/grape-swagger-rails/pull/25). You can find my forked library here, feel free to use it: https://github.com/GeecoLABs/grape-swagger-rails
+1. Not having this kills the concept of versioned API (or at least the documentation part). :(