Skip to content

Instantly share code, notes, and snippets.

@esdras
Last active May 13, 2019 18:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save esdras/39b5e6815a569364f4843dde0cb8e64a to your computer and use it in GitHub Desktop.
Save esdras/39b5e6815a569364f4843dde0cb8e64a to your computer and use it in GitHub Desktop.
Phoenix Router - scope vs pipeline
# 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