Каковы лучшие практики разработки общедоступного API RESTful на Rails?
-
02-07-2019 - |
Вопрос
Rails изначально поставляется с ресурсами RESTful, но используете ли вы их для своего реального публичного API?Если да, то как бы вы выполнили управление версиями вашего API, т.е. example.com/api/v2/foo/bar
?
Решение
Обычно API для моих приложений действительно создаются на тех же ресурсах, что и HTML-интерфейс.Для некоторых (не для меня) это может быть просто использование кода, который выходит из генератора scaffold, но независимо от того, пишу ли я его самостоятельно или позволяю генератору обрабатывать его, очень мало случаев, когда я предоставляю ресурсы только программному обеспечению. API, а не для просмотра конечному пользователю.
Управление версиями не было проблемой для приложений, которые я создал до сих пор, но я могу придумать два способа его реализации.
1) Вы можете добавить маршруты с префиксом «v1», «v2» и т. д., которые устанавливают параметр, к которому вы затем можете получить доступ в контроллере, чтобы указать, какая обработка должна произойти:
в маршрутах.рб:
map.resources :posts, :path_prefix => '/:version'
в post_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
в post_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.