Closed Rio517 closed 8 years ago
Sure, just wrap the api_version
in a namespace.
app/controllers/public/v1/foos_controller.rb:
class Public::V1::FoosController < ApplicationController
def index
render json: {"version"=>"public v1"} and return
end
end
app/controllers/private/v1/foos_controller.rb
class Private::V1::FoosController < ApplicationController
def index
render json: {"version"=>"private v1"} and return
end
end
config/routes.rb
Rails.application.routes.draw do
namespace :public do
api_version(:module => "V1", :path => {:value => "v1"}) do
resources :foos
end
end
namespace :private do
api_version(:module => "V1", :path => {:value => "v1"}) do
resources :foos
end
end
end
In action:
> curl http://localhost:3000/public/v1/foos
{"version":"public v1"}
> curl http://localhost:3000/private/v1/foos
{"version":"private v1"}
Ah, works prefectly. I had the parent module in the :module
option, and was getting the error about not having two defaults. Thanks for the help.
Previously bad code:
namespace :api do
api_version(module: "Api::V1", path: {value: "v1"}, default: true) do
resources :whatever, only: :create
end
end
namespace :public_api do
api_version(module: "PublicApi::V1", path: {value: "v1"}, default: true) do
resources :typeform, only: :create
end
end
👍
Is it possible to support multiple APIs in the same rails-api app? For example,
/public-api/v1/
and/api/v1/
, each with their own default versions. Based on looking at Versionist.configuration, it looks like there is no easy way to support this.Thanks for a great gem!