# `AccessGrid.HttpClient.Behaviour`
[🔗](https://github.com/Access-Grid/accessgrid-ex/blob/main/lib/access_grid/http_client/behaviour.ex#L1)

Behaviour for HTTP clients.

Implementations must normalize responses to `AccessGrid.HttpResponse` and
errors to `AccessGrid.HttpFailure`.

# `request_opts`

```elixir
@type request_opts() :: %{
  optional(:headers) =&gt; [{String.t(), String.t()}],
  optional(:params) =&gt; %{optional(String.t()) =&gt; String.t()},
  optional(:timeout) =&gt; integer(),
  optional(:body) =&gt; term()
}
```

# `url`

```elixir
@type url() :: String.t()
```

# `delete`

```elixir
@callback delete(url(), request_opts()) ::
  {:ok, AccessGrid.HttpResponse.t()} | {:error, AccessGrid.HttpFailure.t()}
```

Performs an HTTP DELETE request.

# `get`

```elixir
@callback get(url(), request_opts()) ::
  {:ok, AccessGrid.HttpResponse.t()} | {:error, AccessGrid.HttpFailure.t()}
```

Performs an HTTP GET request.

# `head`

```elixir
@callback head(url(), request_opts()) ::
  {:ok, AccessGrid.HttpResponse.t()} | {:error, AccessGrid.HttpFailure.t()}
```

Performs an HTTP HEAD request.

# `patch`

```elixir
@callback patch(url(), request_opts()) ::
  {:ok, AccessGrid.HttpResponse.t()} | {:error, AccessGrid.HttpFailure.t()}
```

Performs an HTTP PATCH request.

# `post`

```elixir
@callback post(url(), request_opts()) ::
  {:ok, AccessGrid.HttpResponse.t()} | {:error, AccessGrid.HttpFailure.t()}
```

Performs an HTTP POST request.

# `put`

```elixir
@callback put(url(), request_opts()) ::
  {:ok, AccessGrid.HttpResponse.t()} | {:error, AccessGrid.HttpFailure.t()}
```

Performs an HTTP PUT request.

---

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