Каковы лучшие практики для разработки публичного API RESTful на Rails? - PullRequest
9 голосов
/ 28 сентября 2008

Rails поставляется с ресурсами RESTful из коробки, но используете ли вы их для своего реального публичного API? Если это так, как бы вы выполнили управление версиями своего API, т.е. example.com/api/v2/foo/bar?

1 Ответ

11 голосов
/ 28 сентября 2008

Как правило, 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...