Slap.KV over HTTP, as a Plug. Under :prefix (default /v1/kv, relative
to a Plug.forward/4 mount):
GET /v1/kv/{partition}/{key}- the value (200, with the version as theETag), or 404.HEADis the same without the body.PUT /v1/kv/{partition}/{key}- writes the request body. 204 with the new version as theETag.DELETE /v1/kv/{partition}/{key}- 204.GET /v1/kv/{partition}?prefix=>e=<=&limit=&cursor=- a page of the partition's rows in key order (seeSlap.KV.scan/2), as JSON:{"rows": [{"key": k, "value": v}], "cursor": c}, with keys, values and the cursor in unpadded base64url, andcursornullafter the last page.
The partition and key are path segments and the scan's bounds query
parameters, all percent-encoded (a key may contain / as %2F, and a
+ in a query parameter must be sent as %2B).
PUT and DELETE take If-Match: "version", and PUT takes
If-None-Match: * (the row must not exist); a failed condition is 412,
with the current version as the ETag when there is a row. 503 (with
Retry-After) means the shard is unavailable or the request timed out:
a write may still have been applied.
It does not authenticate: put that in front of it.
Options:
:prefix- default"/v1/kv".:max_value- the largest value, in bytes (default 8 MiB; 413 above it).:cluster- KV cluster serving these requests (defaultSlap.KV.Cluster).
Each response sends a [:slap, :kv, :http, :request] telemetry event.