Last active
May 13, 2019 18:29
-
-
Save esdras/39b5e6815a569364f4843dde0cb8e64a to your computer and use it in GitHub Desktop.
Phoenix Router - scope vs pipeline
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Router é feito com macros, pipeline e scopes são macros. | |
# O `scope` é um grupo de rotas que compartilham determinado prefixo. | |
# Você pode criar um escopo para agrupar as rotas do painel admin de uma aplicação | |
# e outro para a API json da sua aplicação, etc.. | |
# rotas da área admin do sistema | |
scope "/admin", MeuAppWeb.Admin do | |
get "/foo/new", FooController, :new # vai ser compilado como: GET /admin/foo/new | |
end | |
# rotas da API | |
scope "/api", MeuAppWeb.Api do # o segundo argumento (MeuAppWeb.Api) é um namespace pra você agrupar os controllers/views | |
# observe que, pelo fato de você ter informado ao scope que o namespace deste scope é `MeuAppWeb.Api` (segundo argumento acima) | |
# o phoenix espera que o controller tenha o nome de MeuAppWeb.Api.FooController. Se você omitir o segundo argumento acima, vai | |
# ter que informar o nome completo do módulo do controller em cada rota ;) | |
get "/foo/new", FooController, :new # vai ser compilado como: GET /api/foo/new | |
end | |
# Pipelines são grupos de middlewares (em phoenix chamados de Plugs) que nada mais são que funções por onde a request passar | |
# para ser (ou não) transformada. | |
# Por exemplo, você pode definir um pipeline para todas as requests que são servidas via JSON. Outro pipeline para requests | |
# que precisam ser autenticadas. Cada pipeline lista (em ordem) os plugs por onde a request vai passar: | |
pipeline :browser do | |
# sequencia de middewares que tratam das requests enviadas via browser | |
# tratar cookies, proteger de sequestro de requests, etc... | |
end | |
pipeline :api do | |
# sequencia de middlewares que tratam das requests via API | |
# não se preocupa com cookies, visto que estas requests não vem do browser | |
# coloca um header que aceita o formato json, etc... | |
end | |
pipeline :authenticate_admin do | |
# sequencia de middlewares que trata de autenticação de administradores | |
end | |
pipeline :authenticate_api_users do | |
# sequencia de middlewares que trata de autenticação de usuários da API | |
end | |
# cada scope você pode dizer quais pipelines serão usados, ex: | |
scope "/admin" do | |
pipe_through [:browser, :authenticate_admin] | |
end | |
scope "/admin" do | |
pipe_through [:api, :authenticate_api_users] | |
end | |
# e assim vai, tens total controle para definir grupo de rotas, como as requests das rotas serão tratadas, etc... | |
# para entenderes melhor podes olhar aqui: | |
# https://hexdocs.pm/phoenix/routing.html#scoped-routes | |
# https://hexdocs.pm/phoenix/routing.html#pipelines | |
# https://hexdocs.pm/phoenix/plug.html#content |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment