Documentos de Asset Core

Documentación del motor de estado mundial determinista y referencias de API.

Documentos de Decision Gate

Modelo de Error

Asset Core utiliza códigos de estado HTTP estándar con respuestas de error de detalles del problema según la RFC 9457. Esta referencia describe el modelo de error y las condiciones de error comunes. Está diseñado para ser estable, de modo que los clientes puedan construir una lógica de reintento y remediación predecible.

Resumen

Los errores se devuelven como cargas útiles application/problem+json con una taxonomía estable, códigos legibles por máquina y orientación opcional para reintentos. El código de estado HTTP indica la categoría del error, mientras que el cuerpo proporciona detalles específicos. Trate el campo code como el identificador canónico legible por máquina.

Estructura

Respuesta de Error de Escritura/lectura (Detalles del Problema)

{
  "type": "urn:assetcore:error:CONTAINER_NOT_FOUND",
  "title": "NotFoundError",
  "status": 404,
  "detail": "Container 1001 not found",
  "code": "CONTAINER_NOT_FOUND",
  "retryable": false,
  "hint": "Verify the container ID",
  "server_correlation_id": "wr-0000000000000001-0000000000000042",
  "client_correlation_id": "client-req-2026-01-15",
  "details": {
    "container_id": 1001
  }
}

Campos de Detalle de Error

CampoTipoDescripción
typecadenaURI de tipo RFC 9457 (Asset Core utiliza urn:assetcore:error:\CODE“)
titlecadenaNombre corto de la clase de error (ValidationError, NotFoundError)
statusenteroCódigo de estado HTTP
detailcadenaExplicación legible por humanos
codecadenaIdentificador de error legible por máquina (SCREAMING_SNAKE_CASE)
retryablebooleanoSi los clientes deben reintentar
retry_after_msenteroSugerencia opcional de reintento después en milisegundos (429/503)
hintcadenaSugerencia opcional de remediación
auth_reasoncadenaRazón opcional de denegación de autenticación (solo cuando la divulgación es reason_code)
server_correlation_idcadenaID de correlación asignado por el servidor opcional
client_correlation_idcadenaID de correlación proporcionado por el cliente opcional
detailsobjetoDetalles estructurados opcionales
core_errorobjetoCarga útil de error central serializada opcional (solo para el daemon)

Campos

Códigos de Estado HTTP

EstadoSignificadoCuándo se utiliza
200 OKÉxitoSolicitud completada con éxito
400 Bad RequestSolicitud inválidaJSON mal formado, campos faltantes
401 UnauthorizedNo autenticadoToken de portador faltante o inválido
403 ForbiddenNo permitidoEl principal no tiene permiso o acceso al espacio de nombres
404 Not FoundRecurso no encontradoEl contenedor o clase no existe
409 ConflictConflicto de estadoColisión de clave de idempotencia, ya existe
422 Unprocessable EntityValidación fallidaNo se cumplieron las condiciones previas de la operación
425 Too EarlyLectura obsoletaSecuencia mínima del mundo no alcanzada (puntos finales de lectura)
429 Too Many RequestsLímite de tasaCuota o límites de tasa de autenticación
500 Internal Server ErrorError del servidorFallos inesperados
503 Service UnavailableTemporalmente no disponibleSobrecargado, apagándose

Códigos de Error Comunes

Errores de Contenedor

CódigoEstadoDescripción
CONTAINER_NOT_FOUND404El contenedor especificado no existe
CONTAINER_ALREADY_EXISTS409El ID del contenedor ya está en uso
WRONG_CONTAINER_KIND422Operación no soportada para este tipo de contenedor

Errores de Balance

CódigoEstadoDescripción
INVALID_QUANTITY422La cantidad debe ser mayor que cero
INSUFFICIENT_BALANCE422Saldo insuficiente para la operación
INVALID_OPERATION422La operación provocaría un desbordamiento o es inválida

Errores de Instancia

CódigoEstadoDescripción
INSTANCE_NOT_FOUND404La instancia especificada no existe
ALREADY_ATTACHED409La instancia ya tiene un padre
NOT_ATTACHED422La instancia no tiene un padre del cual desvincularse
HAS_CHILDREN422Debe desvincular a los hijos antes de eliminar
WOULD_CREATE_CYCLE422La vinculación crearía un ciclo

Errores de Slot

CódigoEstadoDescripción
SLOT_OUT_OF_BOUNDS422El índice del slot excede la capacidad del contenedor
SLOT_OCCUPIED409El slot ya contiene una instancia
SLOT_EMPTY422El slot no contiene una instancia

Errores de Esquema

CódigoEstadoDescripción
UNREGISTERED_CLASS404La clase especificada no está registrada
CLASS_ALREADY_EXISTS409El ID de clase ya está registrado
SHAPE_ALREADY_REGISTERED409La forma ya existe para esta clase
UNREGISTERED_CLASS_SHAPE422Se requiere forma pero no está registrada

Errores del Sistema

CódigoEstadoDescripción
INVALID_REQUEST400JSON malformado o parámetros inválidos
PAYLOAD_TOO_LARGE413El cuerpo de la solicitud excede los límites configurados
UNSUPPORTED_MEDIA_TYPE415Content-Type no es JSON
INTEGER_OVERFLOW500Desbordamiento numérico (error)
SERVICE_UNAVAILABLE503El sistema está sobrecargado o en proceso de apagado

Ejemplos

Solicitud Incorrecta (400)

JSON inválido:

{
  "type": "urn:assetcore:error:INVALID_REQUEST",
  "title": "ValidationError",
  "status": 400,
  "detail": "Failed to parse JSON body",
  "code": "INVALID_REQUEST",
  "retryable": false,
  "details": {
    "position": 42,
    "expected": "string"
  }
}

No encontrado (404)

El contenedor no existe:

{
  "type": "urn:assetcore:error:CONTAINER_NOT_FOUND",
  "title": "NotFoundError",
  "status": 404,
  "detail": "Container 1001 does not exist",
  "code": "CONTAINER_NOT_FOUND",
  "retryable": false,
  "details": {
    "container_id": 1001
  }
}

Conflicto (409)

La clave de idempotencia ya se utilizó con contenido diferente:

{
  "type": "urn:assetcore:error:IDEMPOTENCY_CONFLICT",
  "title": "ConflictError",
  "status": 409,
  "detail": "Idempotency key 'create-1001' was used with different request content",
  "code": "IDEMPOTENCY_CONFLICT",
  "retryable": false,
  "details": {
    "idempotency_key": "create-1001"
  }
}

Entidad No Procesable (422)

Saldo insuficiente:

{
  "type": "urn:assetcore:error:INSUFFICIENT_BALANCE",
  "title": "ValidationError",
  "status": 422,
  "detail": "Insufficient balance: requested 500, available 100",
  "code": "INSUFFICIENT_BALANCE",
  "retryable": false,
  "details": {
    "container_id": 1001,
    "class_id": 100,
    "key": 1,
    "requested": 500,
    "available": 100
  }
}

Servicio No Disponible (503)

Sistema sobrecargado:

{
  "type": "urn:assetcore:error:SERVICE_UNAVAILABLE",
  "title": "UnavailableError",
  "status": 503,
  "detail": "System is at capacity, please retry later",
  "code": "SERVICE_UNAVAILABLE",
  "retryable": true,
  "retry_after_ms": 100,
  "details": {
    "queue_depth": 1000
  }
}