openriak_ex
Elixir HTTP client for OpenRiak, generated from the OpenRiak Smithy model using smithy-beam.
def deps do
[
{:openriak_ex, "~> 0.1.7"}
]
end
config = %{base_url: "http://127.0.0.1:8098"}
body = ~s({"message":"hello"})
# Default bucket path: /buckets/{bucket}/keys/{key}
{:ok, _} =
OpenRiakClient.put_default_object(config, %OpenRiakTypes.PutDefaultObjectOperationInput{
bucket: "demo",
key: "hello",
content_type: "application/json",
w: "1",
dw: "1",
body: body
})
{:ok, %{body: default_body}} =
OpenRiakClient.get_default_object(config, %OpenRiakTypes.GetDefaultObjectOperationInput{
bucket: "demo",
key: "hello"
})
# Typed bucket path: /types/{bucketType}/buckets/{bucket}/keys/{key}
{:ok, _} =
OpenRiakClient.put_object(config, %OpenRiakTypes.PutObjectOperationInput{
bucket_type: "default",
bucket: "demo",
key: "hello-typed",
content_type: "application/json",
w: "1",
dw: "1",
body: body
})
{:ok, %{body: typed_body}} =
OpenRiakClient.get_object(config, %OpenRiakTypes.GetObjectInput{
bucket_type: "default",
bucket: "demo",
key: "hello-typed"
})
Operation functions take a config map and a typed input struct. See OpenRiakClient and OpenRiakTypes for the full API.
Custom HTTP client
By default the client sends HTTP through RuntimeHttpClient.Req. Override the adapter by setting http_client on the config map passed into operations.
Implement @behaviour RuntimeHttpClient. The request is a %RuntimeHttpClient.Request{} (method, url, headers, body). Return {:ok, %RuntimeTypes.HttpResponse{}} or {:error, reason}.
defmodule MyHttpClient do
@behaviour RuntimeHttpClient
alias RuntimeHttpClient.Request
alias RuntimeTypes.HttpResponse
@impl RuntimeHttpClient
def request(%Request{method: method, url: url, headers: headers, body: body}) do
# call your HTTP stack with method, url, headers, and body
{:ok, %HttpResponse{status: 200, headers: [], body: ""}}
end
end
Pass the module in config:
config = %{
base_url: "http://127.0.0.1:8098",
http_client: MyHttpClient
}
OpenRiakClient.get_default_object(config, input)
Typical uses: swap in Finch or another HTTP stack, inject mocks in tests, or add tracing and custom TLS around the request.