Как правило, API для моих приложений действительно построены на тех же ресурсах, которые составляют интерфейс HTML. Для некоторых (не для меня) это может быть просто использование кода, который выходит из генератора скаффолдов - но независимо от того, пишу ли я его на заказ или разрешаю генератору обрабатывать его, существует очень мало случаев, когда я предоставляю ресурсы только программному обеспечению. API, а не до конечного пользователя.
Управление версиями не было проблемой для приложений, которые я до сих пор создавал, но я могу придумать два способа его реализации.
1) Вы можете добавить маршруты с префиксом 'v1,' 'v2 и т. Д., Которые устанавливают параметр, к которому вы затем можете обращаться в контроллере, чтобы указать, что обработка должна происходить:
в route.rb:
map.resources :posts, :path_prefix => '/:version'
в posts_controller.rb
class PostsController < ApplicationController
def index
respond_to do |format|
format.xml do
if params[:version] == 'v1'
# ...
else
# ...
end
end
end
end
end
2) Вы можете также рассмотреть возможность добавления собственного формата ответа для каждой версии
в инициализаторах / mime_types.rb
Mime::Type.register_alias "application/xml", :v1
Mime::Type.register_alias "application/xml", :v2
в posts_controller.rb
class PostsController < ApplicationController
def index
respond_to do |format|
format.v1 do
# ...
end
format.v2 do
# ...
end
end
end
end
В первом случае вы получите URL-адреса, например example.com/v1/posts.xml и example.com/v2/posts.xml; последний даст вам URL-адреса, такие как example.com/posts.v1 и example.com/posts.v2