Saltar al contenido principal

Aggregator

El aggregator lee blobs de los nodos de almacenamiento, los decodifica, comprueba su blob ID y los sirve por HTTP. También sirve archivos sueltos de un quilt y el estado de la red.

URL base: https://aggregator.iotastorage.com. Público, sin autenticación y con CORS (access-control-allow-origin: *).

MétodoRutaDevuelve
GET, HEAD/v1/blobs/<blob ID>El blob.
GET, HEAD/v1/blobs/by-object-id/<ID del objeto>El blob de un objeto Blob.
GET, HEAD/v1/blobs/by-quilt-patch-id/<quilt patch ID>Un archivo (patch) de un quilt.
GET, HEAD/v1/blobs/by-quilt-id/<blob ID del quilt>/<identificador>Un archivo de un quilt, por su identificador.
GET/v1/quilts/<blob ID del quilt>/patchesLa lista de archivos de un quilt.
GET/v1/estadoEl estado de la red.

Leer un blob​

curl -o archivo https://aggregator.iotastorage.com/v1/blobs/<blob ID>
curl -o archivo https://aggregator.iotastorage.com/v1/blobs/by-object-id/0x<ID del objeto>

La respuesta es el contenido del blob, con estas cabeceras:

CabeceraValor
content-typeapplication/octet-stream
content-lengthTamaño del blob.
etagEl blob ID, entre comillas. El contenido de un blob ID no cambia nunca.
x-content-type-optionsnosniff

HEAD devuelve las mismas cabeceras sin el cuerpo.

  • Por ID de objeto, el aggregator lee el objeto Blob en IOTA para saber su blob ID. Si no hay ningún Blob con ese ID, responde 404.
  • Cada lectura se decodifica de los slivers de los nodos y se comprueba frente al blob ID, así que el aggregator nunca sirve bytes que no coincidan.
  • El blob más grande es de 149.286.452 bytes (unos 142 MiB) con 100 shards.

Leer un archivo de un quilt​

Un archivo guardado en un quilt se lee por su quilt patch ID o por el blob ID del quilt y el identificador del archivo:

curl https://aggregator.iotastorage.com/v1/blobs/by-quilt-patch-id/<quilt patch ID>
curl https://aggregator.iotastorage.com/v1/blobs/by-quilt-id/<blob ID del quilt>/index.html

El identificador puede llevar barras, codificadas como %2F o no. Los archivos de un sitio usan su ruta como identificador, que empieza por /: /index.html se lee en …/by-quilt-id/<blob ID del quilt>/%2Findex.html. La respuesta lleva las mismas cabeceras que un blob, salvo:

  • etag, que es el quilt patch ID;
  • x-quilt-patch-identifier, el identificador del archivo (codificado como en una URL si no es ASCII).

Si el blob no es un quilt, o no tiene ese patch, la respuesta es 404.

Listar los archivos de un quilt​

curl https://aggregator.iotastorage.com/v1/quilts/<blob ID del quilt>/patches
[
{ "identifier": "index.html", "patch_id": "<quilt patch ID>", "tags": {} },
{ "identifier": "logo.svg", "patch_id": "<quilt patch ID>", "tags": { "kind": "image" } }
]

tags son las etiquetas guardadas con cada archivo, si las hay (ver el publisher).

Estado de la red​

GET /v1/estado es propio de IOTA Storage. Devuelve la época actual, los shards, el blob más grande y el comité:

curl https://aggregator.iotastorage.com/v1/estado
{
"epoca": 1,
"shards": 100,
"tamanoMaximo": 149286452,
"nodos": [
{ "nombre": "nodo-4", "direccionRed": "nodo-4.iotastorage.com:443", "shards": 25 },
{ "nombre": "nodo-1", "direccionRed": "nodo-1.iotastorage.com:443", "shards": 25 },
{ "nombre": "nodo-3", "direccionRed": "nodo-3.iotastorage.com:443", "shards": 25 },
{ "nombre": "nodo-2", "direccionRed": "nodo-2.iotastorage.com:443", "shards": 25 }
],
"publisher": { "direccion": "0x…", "maxTamano": 10485760, "maxEpocas": 53, "conToken": true }
}
CampoQué es
epocaLa época actual.
shardsEl número de shards de la red.
tamanoMaximoEl blob más grande, en bytes.
nodosEl comité de la época: nombre, dirección de red registrada en IOTA y número de shards de cada nodo.
publisherSi este servidor también publica: su dirección de IOTA, el blob más grande que admite (maxTamano), el máximo de épocas (maxEpocas) y si pide token (conToken). Si no, null.

Errores​

Los errores son JSON:

{ "error": { "status": "NOT_FOUND", "code": 404, "message": "…" } }
CódigostatusCuándo
400INVALID_ARGUMENTBlob ID, ID de objeto, quilt patch ID o identificador mal formados.
404NOT_FOUNDNingún nodo tiene el blob (no se guardó nunca, caducó o se borró), no hay un Blob con ese ID de objeto, no es un quilt o no tiene ese patch, o la ruta no existe.
405METHOD_NOT_ALLOWEDMétodo equivocado para la ruta.
503UNAVAILABLENo se pudieron leer de los nodos suficientes slivers primarios.

Los textos de message están en español.

Limitaciones actuales​

  • Un patch se lee decodificando el quilt entero, que queda en la caché, en vez de leer solo los slivers de las columnas del patch.
  • Todavía no devuelve las cabeceras que salen de los atributos de un Blob ni de las etiquetas de un patch.