Modelo de Error

Asset Core utiliza códigos de estado HTTP estándar con respuestas de error JSON estructuradas. Esta referencia describe el modelo de error y las condiciones de error comunes.

Visión general

Los errores se devuelven como objetos JSON con detalles sobre qué falló y por qué. El código de estado HTTP indica la categoría del error, mientras que el cuerpo proporciona especificaciones.

Estructura

Respuesta de Error

{
  "error": {
    "code": "ErrorCode",
    "message": "Human-readable description",
    "details": {
      "field": "additional context"
    }
  }
}

Campos de Detalle de Error

CampoTipoDescripción
codecadenaIdentificador de error legible por máquina
messagecadenaDescripción legible por humanos
detailsobjetoContexto adicional (varía según el error)
operation_indexenteroQué operación falló (para transacciones)

Campos

Códigos de Estado HTTP

EstadoSignificadoCuándo se utiliza
200 OKÉxitoSolicitud completada con éxito
400 Bad RequestSolicitud inválidaJSON malformado, campos faltantes
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
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
ContainerNotFound404El contenedor especificado no existe
ContainerAlreadyExists409El ID del contenedor ya está en uso
WrongContainerKind422Operación no soportada para este tipo de contenedor

Errores de Balance

CódigoEstadoDescripción
InvalidQuantity422La cantidad debe ser mayor que cero
InsufficientBalance422No hay suficiente saldo para la operación
InvalidOperation422La operación causaría un desbordamiento o es inválida

Errores de Instancia

CódigoEstadoDescripción
InstanceNotFound404La instancia especificada no existe
AlreadyAttached409La instancia ya tiene un padre
NotAttached422La instancia no tiene un padre del cual desasociarse
HasChildren422Debe desasociar a los hijos antes de quemar
WouldCreateCycle422La asociación crearía un ciclo

Errores de Slot

CódigoEstadoDescripción
SlotOutOfBounds422El índice del slot excede la capacidad del contenedor
SlotOccupied409El slot ya contiene una instancia
SlotEmpty422El slot no contiene una instancia

Errores de Esquema

CódigoEstadoDescripción
ClassNotFound404La clase especificada no está registrada
ClassAlreadyExists409El ID de clase ya está registrado
ShapeAlreadyDefined409El ID de forma ya existe para esta clase
UnregisteredClassShape422Se requiere forma pero no está registrada

Errores del Sistema

CódigoEstadoDescripción
ParseError400JSON inválido en el cuerpo de la solicitud
ValidationError422La validación de la solicitud falló
IntegerOverflow422La operación numérica provocaría un desbordamiento
ServiceUnavailable503El sistema está sobrecargado o en proceso de apagado

Ejemplos

Solicitud Incorrecta (400)

JSON inválido:

{
  "error": {
    "code": "ParseError",
    "message": "Failed to parse JSON body",
    "details": {
      "position": 42,
      "expected": "string"
    }
  }
}

No encontrado (404)

El contenedor no existe:

{
  "error": {
    "code": "ContainerNotFound",
    "message": "Container 1001 does not exist",
    "details": {
      "container_id": 1001
    }
  }
}

Conflicto (409)

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

{
  "error": {
    "code": "IdempotencyConflict",
    "message": "Idempotency key 'create-1001' was used with different request content",
    "details": {
      "idempotency_key": "create-1001"
    }
  }
}

Entidad No Procesable (422)

Saldo insuficiente:

{
  "error": {
    "code": "InsufficientBalance",
    "message": "Insufficient balance: requested 500, available 100",
    "details": {
      "container_id": 1001,
      "class_id": 100,
      "key": 1,
      "requested": 500,
      "available": 100
    },
    "operation_index": 0
  }
}

Servicio No Disponible (503)

Sistema sobrecargado:

{
  "error": {
    "code": "ServiceUnavailable",
    "message": "System is at capacity, please retry later",
    "details": {
      "queue_depth": 1000,
      "retry_after_ms": 100
    }
  }
}

Referencias relacionadas