Documentació d'Asset Core

Documentació del motor d'estat del món determinista i referències de l'API.

Decision Gate docs

API HTTP

Asset Core exposa APIs HTTP a través de dos daemons: el daemon d’escriptura per a les confirmacions i el daemon de lectura per a les consultes. Aquesta separació manté les escriptures deterministes i les lectures ràpides mentre preserva una única font de veritat.

Visió general

L’API és RESTful amb càrregues JSON i autenticació obligatòria amb token de portador. Ambdós daemons proporcionen punts d’entrada de salut per al monitoratge, i les respostes inclouen metadades de frescor quan sigui aplicable. Aquesta pàgina resumeix l’àrea superficial mentre que la referència OpenAPI proporciona el contracte complet.

Tots els punts d’entrada de dades estan espaiats sota /v1/write/namespaces/{namespace_id} i /v1/read/namespaces/{namespace_id}. Els espais de noms són el límit d’aïllament, així que incloeu l’espai de noms correcte en cada sol·licitud.

La especificació completa està disponible a la referència OpenAPI.

Estructura

Control del Pla d’Autenticació i Espai de Noms

Aquests punts finals permeten als operadors inspeccionar els principals, enumerar permisos i gestionar metadades de l’espai de noms. Utilitzeu-los per a fluxos de treball de governança i per verificar l’accés abans d’enviar compromisos.

MètodeCamíDescripció
GET/v1/write/auth/whoamiInspeccionar el principal actual
GET/v1/write/auth/permissionsLlistar permisos per al token actual
GET/v1/write/namespacesLlistar espais de noms
GET/v1/write/namespaces/{namespace_id}Obtenir detalls de l’espai de noms
GET/v1/write/namespaces/changesConsultar el feed de canvis de l’espai de noms
GET/v1/write/namespaces/statusLlistar instantànies d’estat de l’espai de noms
GET/v1/write/namespaces/{namespace_id}/statusObtenir l’estat de l’espai de noms
POST/v1/write/namespaces/{namespace_id}/lifecycleProveir o eliminar un espai de noms
POST/v1/write/namespaces/{namespace_id}/operational_stateEstablir el mode operatiu de l’espai de noms
POST/v1/write/namespaces/{namespace_id}/placementActualitzar metadades de col·locació
POST/v1/write/namespaces/fork_from_snapshotFer un fork d’un espai de noms a partir d’una instantània

Punts d’escriptura amb abast de namespace

Aquests punts finals gestionen escriptures. commit/preflight és no mutador però utilitza les mateixes regles de validació que un compromís real. Sempre utilitzeu claus d’idempotència per a càrregues de treball de compromís en producció perquè els reintents siguin segurs.

MètodeCamíDescripció
POST/v1/write/namespaces/{namespace_id}/commitEnviar una transacció
POST/v1/write/namespaces/{namespace_id}/commit/preflightValidar una transacció sense mutació
POST/v1/write/namespaces/{namespace_id}/commits/{commit_id}/reverseAplicar un pla de reversió emmagatzemat des del sidecar d’undo (verificat per conflictes)
POST/v1/write/namespaces/{namespace_id}/register_classRegistrar una nova classe d’actius
POST/v1/write/namespaces/{namespace_id}/register_class_shapeRegistrar una forma per a una classe
POST/v1/write/namespaces/{namespace_id}/register_class_continuous_shape_1dRegistrar una forma contínua 1D
POST/v1/write/namespaces/{namespace_id}/register_class_continuous_shape_2dRegistrar una forma contínua 2D

Punts d’Accés de Lectura Amb Àmbit de Namespace

Els punts finals de lectura exposen projeccions derivades del registre de compromisos i inclouen metadades de frescor perquè pugueu raonar sobre l’anticuïtat.

Els punts finals de lectura seleccionats es detallen a continuació; consulteu la referència d’OpenAPI per al catàleg complet.

MètodeCamíDescripció
GET/v1/read/namespaces/{namespace_id}/containersLlistar contenidors
GET/v1/read/namespaces/{namespace_id}/containers/{id}Obtenir metadades del contenidor
GET/v1/read/namespaces/{namespace_id}/containers/{id}/balancesObtenir saldos del contenidor
GET/v1/read/namespaces/{namespace_id}/containers/{id}/slotsObtenir espais del contenidor
GET/v1/read/namespaces/{namespace_id}/containers/{id}/grid/cellsObtenir col·locacions de la graella
GET/v1/read/namespaces/{namespace_id}/containers/{id}/grid/freeTrobar espai lliure a la graella
GET/v1/read/namespaces/{namespace_id}/containers/{id}/contentsContingut unificat del contenidor
GET/v1/read/namespaces/{namespace_id}/containers/{id}/continuous_1d/placementsCol·locacions contínues 1D
GET/v1/read/namespaces/{namespace_id}/containers/{id}/continuous_2d/placementsCol·locacions contínues 2D
GET/v1/read/namespaces/{namespace_id}/containers/{id}/commitsHistorial de compromisos del contenidor
GET/v1/read/namespaces/{namespace_id}/commitsHistorial de compromisos
GET/v1/read/namespaces/{namespace_id}/classesLlistar classes registrades
GET/v1/read/namespaces/{namespace_id}/classes/statsEstadístiques del registre de classes
GET/v1/read/namespaces/{namespace_id}/classes/{id}Obtenir detalls de la classe
GET/v1/read/namespaces/{namespace_id}/classes/{id}/shapesObtenir formes de la classe
GET/v1/read/namespaces/{namespace_id}/instancesLlistar instàncies
GET/v1/read/namespaces/{namespace_id}/instances/{id}Obtenir detalls de la instància
GET/v1/read/namespaces/{namespace_id}/owners/{id}/summaryResum de propietari
GET/v1/read/namespaces/{namespace_id}/freshnessObtenir metadades de frescor
GET/v1/read/namespaces/{namespace_id}/replayReproduir esdeveniments del registre de compromisos
GET/v1/read/namespaces/{namespace_id}/streamTransmetre compromisos a través de SSE

Punts finals de salut global

Els punts finals de salut i mètriques estan dissenyats per a equilibradors de càrrega i sistemes de monitorització. Han de formar part de les seves comprovacions estàndard de desplegament.

MètodeCamíDescripció
GET/v1/write/healthEscriure l’estat de salut del daemon
GET/v1/read/healthLlegir l’estat de salut del daemon
GET/v1/write/livezEscriure la prova de viabilitat del daemon
GET/v1/read/livezLlegir la prova de viabilitat del daemon
GET/v1/write/readyzEscriure la prova de preparació del daemon
GET/v1/read/readyzLlegir la prova de preparació del daemon
GET/v1/write/startupzEscriure la prova d’inici del daemon
GET/v1/read/startupzLlegir la prova d’inici del daemon
GET/v1/write/metricsEscriure les mètriques Prometheus del daemon (escolta quan està habilitada)
GET/v1/read/metricsLlegir les mètriques Prometheus del daemon (escolta quan està habilitada)

Campanyes

Encapsulaments de sol·licitud

HeaderRequiredDescription
AuthorizationToken Bearer per al principal actual
Content-TypeHa de ser application/json per a les sol·licituds POST
x-assetcore-namespaceCondicionalNamespace per llegir punts d’entrada de salut/prova quan no està configurat
x-assetcore-min-world-seqNoRequereix projecció per assolir una seqüència mínima del món
x-correlation-idNoID de correlació del client per al seguiment

Encapsulaments de resposta

HeaderDescription
x-asset-idempotencyhit si la resposta es va servir des de la memòria cau d’idempotència
Content-TypeSempre application/json

Camps de resposta comuns

Les respostes d’èxit inclouen:

{
  "namespace": 5001,
  "commit_id": "00000000000000000000000000000001",
  "outcome": "Committed",
  "world_seq_start": 42,
  "world_seq_end": 42,
  "event_count": 2,
  "start_time_ms": 1769800000000,
  "commit_time_ms": 1769800000123,
  "server_correlation_id": "wr-0000000000000001-0000000000000042",
  "client_correlation_id": "doc-example-2026-01-15",
  "echo": { ... }
}

Les respostes de prevol inclouen: status, executed_ops, failed_op_index, op_outcomes, i validated_world_seq. Vegeu Prevol i Compromís Invers per a la semàntica.

Les respostes de consulta inclouen frescor:

{
  "server_correlation_id": "rd-0000000000000001-0000000000000042",
  "client_correlation_id": "doc-example-2026-01-15",
  "freshness": {
    "namespace": 5001,
    "world_seq": 42,
    "commit_log_world_seq": 45,
    "lag": 3,
    "lag_ms": 125
  }
}

Exemples

Enviar una transacció

curl -X POST http://localhost:8080/v1/write/namespaces/5001/commit \
  -H "Authorization: Bearer $ASSETCORE_WRITE_TOKEN" \
  -H "x-correlation-id: doc-example-2026-01-15" \
  -H "Content-Type: application/json" \
  -d '{
    "operations": [
      {
        "op": "CreateContainer",
        "args": {
          "container_id": 1001,
          "kind": { "type": "balance" },
          "owner": null,
          "policies": null
        }
      }
    ],
    "idempotency_key": "create-container-2026-01-15"
  }'

Resposta:

{
  "namespace": 5001,
  "commit_id": "00000000000000000000000000000001",
  "outcome": "Committed",
  "world_seq_start": 1,
  "world_seq_end": 1,
  "event_count": 1,
  "start_time_ms": 1769800000000,
  "commit_time_ms": 1769800000123,
  "server_correlation_id": "wr-0000000000000001-0000000000000042",
  "client_correlation_id": "doc-example-2026-01-15",
  "echo": {
    "idempotency_key": "create-container-2026-01-15"
  },
  "created_entities": {
    "containers": [1001]
  }
}

Consulta de Saldo de Contenidors

curl -H "Authorization: Bearer $ASSETCORE_READ_TOKEN" \
  http://localhost:8081/v1/read/namespaces/5001/containers/1001/balances

Resposta:

{
  "container_id": 1001,
  "balances": [
    {
      "class_id": 100,
      "key": 1,
      "quantity": 500
    }
  ],
  "server_correlation_id": "rd-0000000000000001-0000000000000042",
  "freshness": {
    "namespace": 5001,
    "world_seq": 1,
    "commit_log_world_seq": 1,
    "lag": 0,
    "lag_ms": 0
  }
}

Comprovar la salut

curl -H "Authorization: Bearer $ASSETCORE_ADMIN_TOKEN" \
  http://localhost:8080/v1/write/health

Resposta:

{
  "status": "healthy",
  "version": "0.1.0",
  "api_version": "0.1.0",
  "build_git_sha": "abc123",
  "uptime_secs": 3600
}