Camada de transporte HTTP plugável.
A implementação padrão é ApiBrasil.Core.Transport.Httpc (:httpc, do
Erlang/OTP — sem dependências). Injete a sua para usar proxies
corporativos, instrumentação, Finch/Req/Tesla ou mocks de teste.
Um transporte pode ser:
- um módulo que implementa este behaviour;
- uma tupla
{módulo, opções}, com as opções repassadas em cada chamada; - uma função de aridade 1, que recebe a
t:request/0e devolve{:ok, resposta}ou{:error, erro}— o atalho para testes.
Contrato
Devolve {:ok, %Response{}} para qualquer status HTTP; devolve
{:error, %ApiBrasil.Core.Error{}} (:network ou :timeout) apenas
quando não houve resposta.
defmodule MeuTransporte do
@behaviour ApiBrasil.Core.Transport
alias ApiBrasil.Core.Transport.Response
@impl true
def request(%ApiBrasil.Core.Transport.Request{} = request, _opts) do
{:ok, Response.json(200, %{"ok" => true, "url" => request.url})}
end
end
ApiBrasil.new(transport: MeuTransporte)
Summary
Callbacks
Executa a requisição HTTP.
Functions
Despacha a requisição para o transporte configurado — módulo,
{módulo, opções} ou função de aridade 1.
Decodifica o corpo cru conforme o tipo de resposta: JSON vira mapa/lista,
corpos não-JSON viram texto e :binary devolve os próprios bytes.
Devolve o verbo em maiúsculas — GET, POST, PUT, PATCH ou DELETE.
Verbos HTTP suportados.
Types
@type method() :: :get | :post | :put | :patch | :delete
Verbo HTTP usado pelo gateway.
@type t() :: module() | {module(), keyword()} | (ApiBrasil.Core.Transport.Request.t() -> {:ok, ApiBrasil.Core.Transport.Response.t()} | {:error, ApiBrasil.Core.Error.t()})
Transporte aceito pela configuração.
Callbacks
@callback request( ApiBrasil.Core.Transport.Request.t(), keyword() ) :: {:ok, ApiBrasil.Core.Transport.Response.t()} | {:error, ApiBrasil.Core.Error.t()}
Executa a requisição HTTP.
Functions
@spec call(t(), ApiBrasil.Core.Transport.Request.t()) :: {:ok, ApiBrasil.Core.Transport.Response.t()} | {:error, ApiBrasil.Core.Error.t()}
Despacha a requisição para o transporte configurado — módulo,
{módulo, opções} ou função de aridade 1.
Decodifica o corpo cru conforme o tipo de resposta: JSON vira mapa/lista,
corpos não-JSON viram texto e :binary devolve os próprios bytes.
Devolve o verbo em maiúsculas — GET, POST, PUT, PATCH ou DELETE.
@spec methods() :: [method()]
Verbos HTTP suportados.