View Source Any HTTP

Elixir library which wraps the main HTTP libraries. It allows the final project to decide which HTTP library they want to use and provide an unified interface.

Documentation

Installation

def deps do
  [
    {:any_http, "~> 0.3"}
  ]
end

Configuration

Req

Declare your favorite HTTP library in the configuration

config :any_http, client_adapter: AnyHttp.Adapters.Req

Ensure, you added the corresponding dependency for the adapter:

def deps do
  [
    {:req, "~> 0.4"}
  ]
end

:httpc

Declare your favorite HTTP library in the configuration

config :any_http, client_adapter: AnyHttp.Adapters.Httpc

Usage

Just call the AnyHttp module to interact with HTTP:

AnyHttp.post(
  # Provide the URL as a string or an URI
  "https://my_server/api",
  # Provide the HTTP headers as map or list of tuple, put nil if none
  %{"content-type" => "application/json"},
  # Provide the body, put nil if none
  Jason.encode!(%{hello: "world"}),
  # Provide the adapter options, can be ommited
  receive_timeout: :timer.seconds(5)
)

The result will look like:

{:ok,
  %AnyHttp.Response{
    status: 201,
    headers: %{"content-type" => ["application/json"]},
    body: "{\"bye\":\"world\"}"
  }
}