Oct 2, 2025

How Rails Handles API Versioning

Dariusz Michalski

CEO

Explore how Rails API versioning ensures stability and clarity for businesses, with practical strategies for seamless transitions and maintenance.

def matches?(req)
@default || req.headers['Accept'].include?("application/vnd.example.v#{@version}")
end
end

Basic versioning

namespace :v1 do
resources :users, :courses, :assignments
end

Nested structure for API-only apps

namespace :api do
namespace :v1 do
resources :posts, :comments
end
namespace :v2 do
resources :posts, :comments
end
end
end

namespace :v1 do
concerns :api
end

namespace :v2 do
concerns :api
end
end

Updated: app/controllers/v1/courses_controller.rb

class V1::CoursesController < ApplicationController

controller logic

end

For nested APIs: app/controllers/api/v1/users_controller.rb

module Api
module V1
class UsersController < ApplicationController
# controller logic
end
end
end

namespace :v1 do
concerns :api
end

namespace :v2 do
concerns :api
end

Default unversioned requests to v1

scope module: 'v1' do
concerns :api
end
end

private

def add_deprecation_headers
response.headers['Deprecation'] = 'true'
response.headers['Sunset'] = 'Wed, 31 Dec 2025 23:59:59 GMT'
response.headers['X-DEPRECATION-WARN'] = 'API v1 will be removed on 31 December 2025. Please migrate to v2.'
end
end

Have a project idea? Let's talk and bring it to life

Your highly qualified specialists are here. Get in touch to see what we can do together.

Dariusz Michalski

Dariusz Michalski, CEO

dariusz@useo.pl

Konrad Pochodaj

Konrad Pochodaj, CGO

konrad@useo.pl

Have a project idea? Let's talk and bring it to life

Your highly qualified specialists are here. Get in touch to see what we can do together.

Dariusz Michalski

Dariusz Michalski, CEO

dariusz@useo.pl

Konrad Pochodaj

Konrad Pochodaj, CGO

konrad@useo.pl

Have a project idea? Let's talk and bring it to life

Your highly qualified specialists are here. Get in touch to see what we can do together.

Start a Project
our Office

ul. Ofiar Oświęcimskich 17

50-069 Wrocław, Poland

©2009 - 2025 Useo sp. z o.o.

Start a Project
our Office

ul. Ofiar Oświęcimskich 17

50-069 Wrocław, Poland

©2009 - 2025 Useo sp. z o.o.