Во фреймворке Phoenix для Elixir структура Plug.Conn представляет как входящий HTTP-запрос, так и исходящий ответ в виде неизменяемой структуры данных.
Инспекция входящих запросов (Inspecting Incoming Requests)
conn.host # => "example.com"
conn.method # => "GET", "POST", etc.
conn.path_info # => ["users", "42"]
conn.request_path # => "/users/42"
conn.query_string # => "tab=activity&sort=desc"
conn.port # => 443
conn.scheme # => :https
conn.remote_ip # => {127, 0, 0, 1}
# Доступ к заголовкам запроса
get_req_header(conn, "authorization") # => ["Bearer token_xyz"]
Отправка HTTP-ответов (Sending HTTP Responses)
# Отправка JSON-ответа
conn
|> put_status(200)
|> json(%{status: "ok", count: 42})
# Отправка HTML-ответа
conn
|> put_status(200)
|> html("<h1>Welcome</h1>")
# Отправка простого текста
conn
|> put_status(404)
|> text("Not Found")
Перенаправления и управление потоком (Redirects & Flow Control)
# Локальное перенаправление
redirect(conn, to: "/dashboard")
# Внешнее перенаправление
redirect(conn, external: "https://example.com")
# Немедленная остановка пайплайна (halt)
conn
|> put_status(401)
|> text("Unauthorized")
|> halt()
Заголовки и cookies (Modifying Headers & Cookies)
# Заголовки ответа
conn
|> put_resp_header("x-frame-options", "DENY")
|> put_resp_content_type("application/pdf")
# Установка и удаление cookies
conn
|> put_resp_cookie("session_id", "xyz", http_only: true, secure: true)
|> delete_resp_cookie("remember_token")