perkeep/doc/protocol/blob-enumerate.md

77 lines
3.2 KiB
Markdown

# Blob Enumerate Protocol
The `/camli/enumerate-blobs` endpoint enumerates all blobs that the
server knows about.
They're returned in sorted order, sorted by (digest_type,
digest_value). That is, md5-acbd18db4cc2f85cedef654fccc4a4d8 sorts
before sha1-0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33 because "m" sorts
before "s", even though "0" sorts before "a".
GET /camli/enumerate-blobs?after=&limit= HTTP/1.1
Host: example.com
URL GET parameters:
after optional If provided, only blobs GREATER THAN this
value are returned.
Can't be used in combination with 'maxwaitsec'
limit optional Limit the number of returned blobrefs. The
server may have its own lower limit, however,
so be sure to pay attention to the presence
of a "continueAfter" key in the JSON response.
maxwaitsec optional The client may send this, an integer max
number of seconds the client is willing to
wait for the arrival of blobs. If the
server supports long-polling (an optional
feature), then the server will return
immediately if any blobs or available, else
it will wait for this number of seconds.
It is an error to send this option with a non-
zero value along with the 'after' option.
The server's reply must include
"canLongPoll" set to true if the server
supports this feature. Even if the server
supports long polling, the server may cap
'maxwaitsec' and wait for less time than
requested by the client.
Can't be used in combination with 'after'.
Response:
HTTP/1.1 200 OK
Content-Type: text/javascript
{
"blobs": [
{"blobRef": "md5-acbd18db4cc2f85cedef654fccc4a4d8",
"size": 3},
{"blobRef": "sha1-0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33",
"size": 3},
],
"continueAfter": "sha1-0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33",
"canLongPoll": true,
}
Response keys:
blobs required Array of {"blobRef": BLOBREF, "size": INT_bytes}
will be an empty list if no blobs are present.
continueAfter optional If present, the result is truncated and there are
are (likely) more blobs after the provided
blobref, which should be passed to the next
request's "after" request parameter. It's possible
but rare that the final page of actual results has
continueAfter set, but the subsequent page is
empty. (if numBlobs % limit == 0)
canLongPoll optional Set to true (type boolean) if the server supports
long polling. If not true, the server ignores
the client's "maxwaitsec" parameter.