Phoenix — веб-фреймворк для Elixir.
Elixir — функциональный ЯП под BEAM.
BEAM — виртуальная машина Erlang/OTP.
Phoenix предоставляет удобный способ добавить взаимодействие с web в ваше приложение на Elixir.
Ответ от сервера — это запрос, пропущенный через серию последовательных трансформаций.
Спецификация для создания компонуемых функций для трансформации веб-запроса в ответ.
(Plug.Conn.t, Plug.opts) :: Plug.Conn.t
Функция принимает на вход структуру Plug.Conn и опциональные настройки и возвращает модифицированную структуру Plug.Conn.
@spec discard_robots(Plug.Conn.t, Keyword.t) :: Plug.Conn.t
def discard_robots(conn, _) do
user_agent = conn |> get_req_header("user-agent") |> Enum.at(0, "")
if UserAgent.bot?(user_agent) do
conn |> put_status(200) |> json("Ok") |> halt
else
conn
end
end
init/1
принимает список опций и возвращает настройки, которые автоматически передаются в функцию call/2
init(Plug.opts) :: Plug.opts
call/2
имеет ту же сигнатуру, что и Plug-функция
call(Plug.Conn.t, Plug.opts) :: Plug.Conn.t
defmodule Plug.RequestId do
@behaviour Plug
def init(opts) do
Keyword.get(opts, :http_header, "x-request-id")
end
def call(conn, req_id_header) do
conn
|> get_request_id(req_id_header)
|> set_request_id(req_id_header)
end
# ...
end
Пример вызова:
plug Plug.RequestId, http_header: "custom-request-id"
$ mix phx.new back_to_school
$ mix phx.gen.html Content Post posts name:string body:string published_at:datetime
Позволяют осуществлять двунаправленную коммуникацию с клиентами через веб-сокеты или через long-polling для реализации soft-realtime функционала.