Model d’Error

Asset Core utilitza codis d’estat HTTP estàndard amb respostes d’error JSON estructurades. Aquesta referència descriu el model d’error i les condicions d’error comunes.

Visió general

Els errors es retornen com a objectes JSON amb detalls sobre què ha fallat i per què. El codi d’estat HTTP indica la categoria d’error, mentre que el cos proporciona especificacions.

Estructura

Resposta d’Error

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

Camps de Detall d’Error

CampTipusDescripció
codecadenaIdentificador d’error llegible per màquina
messagecadenaDescripció llegible per humans
detailsobjecteContext addicional (varia segons l’error)
operation_indexenterQuina operació ha fallat (per a transaccions)

Camps

Codi d’estat HTTP

EstatSignificatQuan s’utilitza
200 OKÈxitSol·licitud completada amb èxit
400 Bad RequestSol·licitud invàlidaJSON malformat, camps mancant
404 Not FoundRecurso no trobatEl contenidor o la classe no existeix
409 ConflictConflicte d’estatCol·lisió de la clau d’idempotència, ja existeix
422 Unprocessable EntityValidació fallidaCondicions prèvies de l’operació no complertes
500 Internal Server ErrorError del servidorFallades inesperades
503 Service UnavailableTemporalment no disponibleSobrecàrrega, apagant-se

Codi d’Error Comú

Errors de contenidor

CodiEstatDescripció
ContainerNotFound404El contenidor especificat no existeix
ContainerAlreadyExists409L’ID del contenidor ja està en ús
WrongContainerKind422Operació no suportada per aquest tipus de contenidor

Errors de Balance

CodiEstatDescripció
InvalidQuantity422La quantitat ha de ser superior a zero
InsufficientBalance422No hi ha prou saldo per a l’operació
InvalidOperation422L’operació causaria un desbordament o és invàlida

Errors d’Instància

CodiEstatDescripció
InstanceNotFound404La instància especificada no existeix
AlreadyAttached409La instància ja té un pare
NotAttached422La instància no té cap pare del qual desconnectar-se
HasChildren422Cal desconnectar els fills abans de cremar
WouldCreateCycle422L’adjunció crearia un cicle

Errors de Slot

CodiEstatDescripció
SlotOutOfBounds422L’índex del slot excedeix la capacitat del contenidor
SlotOccupied409El slot ja conté una instància
SlotEmpty422El slot no conté cap instància

Errors d’Esquema

CodiEstatDescripció
ClassNotFound404La classe especificada no està registrada
ClassAlreadyExists409L’ID de classe ja està registrat
ShapeAlreadyDefined409L’ID de forma ja existeix per a aquesta classe
UnregisteredClassShape422Es requereix una forma però no està registrada

Errors del sistema

CodiEstatDescripció
ParseError400JSON no vàlid al cos de la sol·licitud
ValidationError422La validació de la sol·licitud ha fallat
IntegerOverflow422L’operació numèrica provocaria un desbordament
ServiceUnavailable503El sistema està sobrecarregat o s’està apagant

Exemples

Sol·licitud incorrecta (400)

JSON invàlid:

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

No Trobat (404)

El contenidor no existeix:

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

Conflicte (409)

La clau d’idempotència ja s’ha utilitzat amb contingut diferent:

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

Entitat No Processable (422)

Saldo insuficient:

{
  "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
  }
}

Servei No Disponible (503)

Sistema sobrecarregat:

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

Referències relacionades