Quais são as melhores práticas para a concepção de uma API pública RESTful on Rails?

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

  •  02-07-2019
  •  | 
  •  

Pergunta

Rails vem com recursos RESTful fora da caixa, mas você usa aqueles para sua API pública real? Se sim, como você iria realizar o controle de versão de sua API ou seja example.com/api/v2/foo/bar?

Foi útil?

Solução

Normalmente, APIs para minhas aplicações estão realmente construído sobre os mesmos recursos que compõem a interface HTML. Para alguns (não eu), que pode ser apenas usando o código que sai do andaime gerador, mas independentemente de eu escrevê-lo personalizado ou deixe a alça gerador que, há muito poucos casos em que eu expõem recursos apenas ao programático API e não o ponto de vista do usuário final.

versão não tem sido um problema para as aplicações que eu construí até agora, mas eu posso pensar de duas maneiras de implementá-lo.

1) Você pode adicionar rotas com o 'v1' 'v2 prefixo', etc., que definir um parâmetro que você pode, então, o acesso no controlador para especificar o processamento para ocorrer:

em routes.rb:

map.resources :posts, :path_prefix => '/:version'

em 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) Você também pode considerar a adição de um formato de resposta personalizada para cada versão

em initializers / mime_types.rb

Mime::Type.register_alias "application/xml", :v1
Mime::Type.register_alias "application/xml", :v2

em posts_controller.rb

class PostsController < ApplicationController
  def index
    respond_to do |format|
      format.v1 do
        # ...
      end
      format.v2 do
        # ...
      end
    end
  end
end

O ex-lhe daria URLs como example.com/v1/posts.xml e example.com/v2/posts.xml; este último lhe daria URLs como example.com/posts.v1 e example.com/posts.v2

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top