Каковы лучшие практики разработки общедоступного API RESTful на Rails?

StackOverflow https://stackoverflow.com/questions/144359

  •  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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top