# `Lather.Server.Handler`
[🔗](https://github.com/awksedgreep/lather/blob/v1.0.49/lib/lather/server/handler.ex#L1)

Generic HTTP handler for SOAP server endpoints.

This module provides SOAP server functionality without requiring Plug.
It can be used with any HTTP server (Phoenix, Bandit, Cowboy, etc.).

## Usage

In Phoenix controller:

    defmodule MyAppWeb.SOAPController do
      use MyAppWeb, :controller

      def handle_soap(conn, _params) do
        case Lather.Server.Handler.handle_request(conn.method, conn.request_path, conn.req_headers, conn.assigns.raw_body, MyApp.UserService) do
          {:ok, status, headers, body} ->
            conn
            |> put_status(status)
            |> put_headers(headers)
            |> text(body)
          {:error, status, headers, body} ->
            conn
            |> put_status(status)
            |> put_headers(headers)
            |> text(body)
        end
      end
    end

With any HTTP server:

    body = read_request_body(request)
    headers = get_request_headers(request)

    case Lather.Server.Handler.handle_request("POST", "/soap", headers, body, MyApp.UserService) do
      {:ok, status, response_headers, response_body} ->
        send_response(status, response_headers, response_body)
      {:error, status, response_headers, response_body} ->
        send_response(status, response_headers, response_body)
    end

# `handle_request`

Handles a SOAP HTTP request.

Returns `{:ok, status, headers, body}` or `{:error, status, headers, body}`.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
