Plug.Conn.Adapter behaviour
Specification of the connection adapter API implemented by webservers.
Summary
Types
Callbacks
- chunk(payload, arg2)
Sends a chunk in the chunked response.
- get_http_protocol(payload)
Returns the HTTP protocol and its version.
- get_peer_data(payload)
Returns peer information such as the address, port and ssl cert.
- inform(payload, arg2, headers)
Send an informational response to the client.
- push(payload, path, headers)
Push a resource to the client.
- read_req_body(payload, options)
Reads the request body.
- send_chunked(payload, arg2, arg3)
Sends the given status, headers as the beginning of a chunked response to the client.
- send_file(payload, arg2, arg3, file, offset, length)
Sends the given status, headers and file as a response back to the client.
- send_resp(payload, arg2, arg3, arg4)
Sends the given status, headers and body as a response back to the client.
Types
http_protocol()
Specs
http_protocol() :: :"HTTP/1" | :"HTTP/1.1" | :"HTTP/2" | atom()
payload()
Specs
payload() :: term()
peer_data()
Specs
peer_data() :: %{
address: :inet.ip_address(),
port: :inet.port_number(),
ssl_cert: binary() | nil
} Callbacks
chunk(payload, arg2)
Specs
chunk(payload(), Plug.Conn.body()) ::
:ok | {:ok, sent_body :: binary(), payload()} | {:error, term()} Sends a chunk in the chunked response.
If the request has method "HEAD", the adapter should not send the response to the client.
Webservers are advised to return :ok and not modify any further state for each chunk. However, the test implementation returns the actual body and payload so it can be used during testing.
get_http_protocol(payload)
Specs
get_http_protocol(payload()) :: http_protocol()
Returns the HTTP protocol and its version.
get_peer_data(payload)
Specs
get_peer_data(payload()) :: peer_data()
Returns peer information such as the address, port and ssl cert.
inform(payload, arg2, headers)
Specs
inform(payload(), Plug.Conn.status(), headers :: Keyword.t()) ::
:ok | {:error, term()} Send an informational response to the client.
If the adapter does not support inform, then {:error, :not_supported} should be returned.
push(payload, path, headers)
Specs
push(payload(), path :: String.t(), headers :: Keyword.t()) ::
:ok | {:error, term()} Push a resource to the client.
If the adapter does not support server push then {:error, :not_supported} should be returned.
read_req_body(payload, options)
Specs
read_req_body(payload(), options :: Keyword.t()) ::
{:ok, data :: binary(), payload()}
| {:more, data :: binary(), payload()}
| {:error, term()} Reads the request body.
Read the docs in Plug.Conn.read_body/2 for the supported options and expected behaviour.
send_chunked(payload, arg2, arg3)
Specs
send_chunked(payload(), Plug.Conn.status(), Plug.Conn.headers()) ::
{:ok, sent_body :: binary() | nil, payload()} Sends the given status, headers as the beginning of a chunked response to the client.
Webservers are advised to return nil as the sent_body, as the body can no longer be manipulated. However, the test implementation returns the actual body so it can be used during testing.
send_file(payload, arg2, arg3, file, offset, length)
Specs
send_file(
payload(),
Plug.Conn.status(),
Plug.Conn.headers(),
file :: binary(),
offset :: integer(),
length :: integer() | :all
) :: {:ok, sent_body :: binary() | nil, payload()} Sends the given status, headers and file as a response back to the client.
If the request has method "HEAD", the adapter should not send the response to the client.
Webservers are advised to return nil as the sent_body, as the body can no longer be manipulated. However, the test implementation returns the actual body so it can be used during testing.
send_resp(payload, arg2, arg3, arg4)
Specs
send_resp(payload(), Plug.Conn.status(), Plug.Conn.headers(), Plug.Conn.body()) ::
{:ok, sent_body :: binary() | nil, payload()} Sends the given status, headers and body as a response back to the client.
If the request has method "HEAD", the adapter should not send the response to the client.
Webservers are advised to return nil as the sent_body, as the body can no longer be manipulated. However, the test implementation returns the actual body so it can be used during testing.
© 2013 Plataformatec
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/plug/Plug.Conn.Adapter.html