grape-swagger-rails icon indicating copy to clipboard operation
grape-swagger-rails copied to clipboard

Support multiple "documentation pages"

Open suan opened this issue 8 years ago • 3 comments

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.

suan avatar Oct 08 '15 15:10 suan

I would welcome a PR for this. Ideally we should do away with these global options if possible.

dblock avatar Oct 08 '15 15:10 dblock

@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

matfiz avatar Jan 14 '16 23:01 matfiz

+1. Not having this kills the concept of versioned API (or at least the documentation part). :(

svobom57 avatar Aug 27 '16 20:08 svobom57