Protocol behavior for HTTP and gRPC implementations.
@type body() :: map() | list() | nil
@type method() :: :get | :post | :put | :patch | :delete | :head
@type opts() :: keyword()
@type path() :: String.t()
@type response() :: {:ok, map() | list()} | {:error, WeaviateEx.Error.t()}
@callback request(client :: term(), method(), path(), body(), opts()) :: response()