From 620f46e68bed60229e766e2c82544bc77de8c29e Mon Sep 17 00:00:00 2001 From: Kamil Trzcinski Date: Tue, 12 Jan 2016 18:53:25 +0100 Subject: [PATCH 1/5] Expose Swagger and Swagger UI in Rails app --- Gemfile | 4 +++- Gemfile.lock | 6 ++++++ config/initializers/grape_swagger_rails.rb | 5 +++++ config/routes/api.rb | 1 + lib/api/api.rb | 20 ++++++++++++++++++++ 5 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 config/initializers/grape_swagger_rails.rb diff --git a/Gemfile b/Gemfile index b6ffaf80f243..b623a375a846 100644 --- a/Gemfile +++ b/Gemfile @@ -78,7 +78,9 @@ gem 'github-linguist', '~> 4.7.0', require: 'linguist' # API gem 'grape', '~> 1.0' gem 'grape-entity', '~> 0.6.0' -gem 'rack-cors', '~> 0.4.0', require: 'rack/cors' +gem 'grape-swagger' +gem 'grape-swagger-rails' +gem 'rack-cors', '~> 0.4.0', require: 'rack/cors' # Disable strong_params so that Mash does not respond to :permitted? gem 'hashie-forbidden_attributes' diff --git a/Gemfile.lock b/Gemfile.lock index a6e3c9e27cc0..1f6ac69e53c9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -360,6 +360,10 @@ GEM activesupport grape (>= 0.16.0) rake + grape-swagger (0.27.3) + grape (>= 0.16.2) + grape-swagger-rails (0.3.0) + railties (>= 3.2.12) grape_logging (1.7.0) grape grpc (1.4.5) @@ -1055,6 +1059,8 @@ DEPENDENCIES grape (~> 1.0) grape-entity (~> 0.6.0) grape-route-helpers (~> 2.1.0) + grape-swagger + grape-swagger-rails grape_logging (~> 1.7) haml_lint (~> 0.26.0) hamlit (~> 2.6.1) diff --git a/config/initializers/grape_swagger_rails.rb b/config/initializers/grape_swagger_rails.rb new file mode 100644 index 000000000000..6d109aa205c1 --- /dev/null +++ b/config/initializers/grape_swagger_rails.rb @@ -0,0 +1,5 @@ +GrapeSwaggerRails.options.url = "/api/v3/swagger_doc" +GrapeSwaggerRails.options.app_name = 'GitLab API' +GrapeSwaggerRails.options.app_url = '/' +GrapeSwaggerRails.options.api_key_name = 'PRIVATE-TOKEN' +GrapeSwaggerRails.options.api_key_type = 'header' diff --git a/config/routes/api.rb b/config/routes/api.rb index ce7a7c889009..9b2b6a201428 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -1,2 +1,3 @@ API::API.logger Rails.logger mount API::API => '/' +mount GrapeSwaggerRails::Engine => '/apidoc' diff --git a/lib/api/api.rb b/lib/api/api.rb index 8094597d2386..d058334b0ece 100644 --- a/lib/api/api.rb +++ b/lib/api/api.rb @@ -1,3 +1,5 @@ +require 'grape-swagger' + module API class API < Grape::API include APIGuard @@ -160,6 +162,24 @@ class API < Grape::API mount ::API::Version mount ::API::Wikis + add_swagger_documentation( + base_path: '/api', + api_version: 'v3', + hide_documentation_path: true, + authorizations: { + private_token_header: { + type: 'apiKey', + passAs: 'header', + keyname: 'PRIVATE_HEADER', + }, + private_token_query: { + type: 'apiKey', + passAs: 'query', + keyname: 'private_token', + }, + } + ) + route :any, '*path' do error!('404 Not Found', 404) end -- GitLab From 8b75299bcb909472cc68d18976d86a989db2aa7b Mon Sep 17 00:00:00 2001 From: Kamil Trzcinski Date: Tue, 24 Jan 2017 20:38:06 +0100 Subject: [PATCH 2/5] Fix Grape definition --- Gemfile | 2 ++ Gemfile.lock | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/Gemfile b/Gemfile index b623a375a846..e2b81d60d853 100644 --- a/Gemfile +++ b/Gemfile @@ -80,6 +80,8 @@ gem 'grape', '~> 1.0' gem 'grape-entity', '~> 0.6.0' gem 'grape-swagger' gem 'grape-swagger-rails' +gem 'grape-swagger-entity' +gem 'grape-swagger-representable' gem 'rack-cors', '~> 0.4.0', require: 'rack/cors' # Disable strong_params so that Mash does not respond to :permitted? diff --git a/Gemfile.lock b/Gemfile.lock index 1f6ac69e53c9..4d4aae637349 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -362,8 +362,14 @@ GEM rake grape-swagger (0.27.3) grape (>= 0.16.2) + grape-swagger-entity (0.2.3) + grape-entity (>= 0.5.0) + grape-swagger (>= 0.20.4) grape-swagger-rails (0.3.0) railties (>= 3.2.12) + grape-swagger-representable (0.1.5) + grape-swagger (>= 0.20.4) + representable grape_logging (1.7.0) grape grpc (1.4.5) @@ -1060,7 +1066,9 @@ DEPENDENCIES grape-entity (~> 0.6.0) grape-route-helpers (~> 2.1.0) grape-swagger + grape-swagger-entity grape-swagger-rails + grape-swagger-representable grape_logging (~> 1.7) haml_lint (~> 0.26.0) hamlit (~> 2.6.1) -- GitLab From 18b4d0f7d8e963c75760006067b5ecde8291ba36 Mon Sep 17 00:00:00 2001 From: Achilleas Pipinellis Date: Thu, 9 Mar 2017 16:26:19 +0100 Subject: [PATCH 3/5] Bump API version to v4 --- lib/api/api.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/api/api.rb b/lib/api/api.rb index d058334b0ece..5ee9398c6524 100644 --- a/lib/api/api.rb +++ b/lib/api/api.rb @@ -164,7 +164,7 @@ class API < Grape::API add_swagger_documentation( base_path: '/api', - api_version: 'v3', + api_version: 'v4', hide_documentation_path: true, authorizations: { private_token_header: { -- GitLab From caee109a140748a1fd64cea44e7ac6f75b94811b Mon Sep 17 00:00:00 2001 From: Achilleas Pipinellis Date: Thu, 9 Mar 2017 16:29:53 +0100 Subject: [PATCH 4/5] Add title and description for swagger API --- lib/api/api.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/api/api.rb b/lib/api/api.rb index 5ee9398c6524..f849925ea1ad 100644 --- a/lib/api/api.rb +++ b/lib/api/api.rb @@ -177,6 +177,10 @@ class API < Grape::API passAs: 'query', keyname: 'private_token', }, + }, + info: { + title: 'GitLab Community Edition API documentation', + description: 'Automate GitLab via a simple and powerful API.' } ) -- GitLab From e21092bd67c5cd7d9828d0a27feafa11105a63b3 Mon Sep 17 00:00:00 2001 From: Achilleas Pipinellis Date: Mon, 10 Apr 2017 11:35:06 +0200 Subject: [PATCH 5/5] Bump initializer to API v4 --- config/initializers/grape_swagger_rails.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/initializers/grape_swagger_rails.rb b/config/initializers/grape_swagger_rails.rb index 6d109aa205c1..7691b383fdb4 100644 --- a/config/initializers/grape_swagger_rails.rb +++ b/config/initializers/grape_swagger_rails.rb @@ -1,4 +1,4 @@ -GrapeSwaggerRails.options.url = "/api/v3/swagger_doc" +GrapeSwaggerRails.options.url = "/api/v4/swagger_doc" GrapeSwaggerRails.options.app_name = 'GitLab API' GrapeSwaggerRails.options.app_url = '/' GrapeSwaggerRails.options.api_key_name = 'PRIVATE-TOKEN' -- GitLab