Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support multiple "documentation pages" #34

Open
suan opened this issue Oct 8, 2015 · 3 comments
Open

Support multiple "documentation pages" #34

suan opened this issue Oct 8, 2015 · 3 comments

Comments

@suan
Copy link
Contributor

suan commented Oct 8, 2015

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 ruby-grape/grape-swagger#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.

@dblock
Copy link
Member

dblock commented Oct 8, 2015

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

@matfiz
Copy link

matfiz commented Jan 14, 2016

@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 #25). You can find my forked library here, feel free to use it: https://github.com/GeecoLABs/grape-swagger-rails

@svobom57
Copy link

svobom57 commented Aug 27, 2016

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants