 
          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.optscall/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 функционала.