Errores y manejo de errores

Cuando una solicitud de Firestore en modo Datastore se completa de forma correcta, la API mostrará un código de estado HTTP 200 OK, junto con los datos solicitados en el cuerpo de la respuesta.

Cuando falla una solicitud, la API de Datastore muestra un código de estado HTTP 4xx5xx que identifica de forma genérica la falla y una respuesta que proporciona información más específica sobre los errores que la causaron.

En el resto de esta página, se describe la estructura de un error, se detallan códigos de error específicos y se recomienda cómo manejarlos.

A continuación, se muestra la estructura de una respuesta de error para una solicitud JSON:

{
  "error": {
    "code": "integer",
    "message": "string",
    "status": "string"
  }
}

El objeto de respuesta contiene un solo campo error, cuyo valor contiene los siguientes elementos:

Elemento Descripción
code Un código de estado HTTP que identifica genéricamente la falla de la solicitud.
message Información específica sobre la falla de la solicitud.
status El código de error canónico (google.rpc.Code) para las API de Google. Los códigos que la API de Datastore puede mostrar se detallan en Códigos de error.

Este es un ejemplo de una respuesta de error para una solicitud JSON:

{
  "error": {
    "code": 400,
    "message": "Key path is incomplete: [Person: null]",
    "status": "INVALID_ARGUMENT"
  }
}

Si una solicitud realizada con un tipo de contenido de application/x-protobuf genera un error, se mostrará un mensaje google.rpc.Status en serie como la carga útil.

Códigos de error

La forma recomendada de clasificar los errores es inspeccionar el valor del código de error canónico (google.rpc.Code). En los errores de JSON, este código aparece en el campo status. En los errores application/x-protobuf, está en el campo code.

Código de error canónico Descripción Acción recomendada
ABORTED Indica que la solicitud entró en conflicto con otra. Para una confirmación no transaccional:
Reintenta la solicitud o estructura tus entidades a fin de reducir la contención.

Para solicitudes que forman parte de una confirmación transactional:
Vuelve a intentar la transacción completa o estructura tus entidades a fin de reducir la contención.
ALREADY_EXISTS Indica que la solicitud intentó insertar una entidad que ya existe. No vuelvas a intentar la operación sin solucionar el problema.
DEADLINE_EXCEEDED Se superó la fecha límite en el servidor. Vuelve a intentarlo con una retirada exponencial.
FAILED_PRECONDITION Indica que no se cumplió una condición previa para la solicitud. El campo de mensaje en la respuesta de error proporciona información sobre la condición previa que falló. Una causa posible es ejecutar una consulta que requiere un índice aún no definido. No vuelvas a intentar la operación sin solucionar el problema.
INTERNAL El servidor mostró un error. No vuelvas a intentar esta solicitud más de una vez.
INVALID_ARGUMENT Indica que un parámetro de solicitud tiene un valor no válido. El campo de mensaje en la respuesta de error proporciona información sobre el valor que no fue válido. No vuelvas a intentar la operación sin solucionar el problema.
NOT_FOUND Indica que la solicitud intentó actualizar una entidad que no existe. No vuelvas a intentar la operación sin solucionar el problema.
PERMISSION_DENIED Indica que el usuario no estaba autorizado a realizar la solicitud. No vuelvas a intentar la operación sin solucionar el problema.
RESOURCE_EXHAUSTED Indica que el proyecto superó su cuota, o la capacidad de la región o la multirregión. Verifica que no superaste la cuota del proyecto. Si superaste la cuota de un proyecto, no lo intentes de nuevo sin solucionar el problema.

De lo contrario, vuelve a intentarlo con la retirada exponencial.
UNAUTHENTICATED Indica que la solicitud no tenía credenciales de autenticación válidas. No vuelvas a intentar la operación sin solucionar el problema.
UNAVAILABLE El servidor mostró un error. Vuelve a intentarlo con una retirada exponencial.