Gestión de errores

Ver en Markdown

OpenWAFError lleva el estado HTTP, el código de error de la API, el campo y el cuerpo decodificado; cómo tratar los conflictos de versión y los fallos del cliente.

En esta página

Cada error de la API, una respuesta con estado 400 o superior, se lanza como OpenWAFError:

PropiedadSignificado
statusEstado HTTP. 0 cuando la petición no obtuvo respuesta de la API (ver abajo).
codeEl código de error de la API, como not_found, invalid, forbidden, reason_required o version_conflict. http_<estado> cuando la respuesta no trae código.
messageEl mensaje de la API.
fieldEn los errores de validación, el campo que indica la API, cuando lo indica.
bodyEl cuerpo del error decodificado, con los datos adicionales como current_version o hostnames.

Los códigos son los de la API; los propios de las escrituras versionadas están en Errores del control de cambios.

Conflictos de versión

Una escritura enviada con una versión esperada que ya no es la actual falla con estado 412 y código version_conflict, y no aplica nada. body.current_version es la versión que tiene ahora la zona. Vuelve a simular, revisa el plan nuevo y confirma con la versión nueva; no reintentes a ciegas.

import { OpenWAFError } from "./openwaf.ts";

try {
  await owf.createRecord({ zone: zoneId, body: record }, { reason, ifMatch: plan.from_version! });
} catch (err) {
  if (err instanceof OpenWAFError && err.code === "version_conflict") {
    const { current_version } = err.body as { current_version: number };
    console.log(`la zona ya va por la versión ${current_version}: vuelve a simular`);
  } else {
    throw err;
  }
}

Errores de validación

invalid (estado 422) significa que la API ha rechazado un valor; field lo indica cuando puede, como content o records[0].ttl. Una simulación falla igual que la escritura real, así que simular es una forma segura de validar datos.

Fallos del cliente

FalloTypeScriptPython
No hay token configuradoOpenWAFError, estado 0, código no_tokenIgual
No se puede averiguar la organización (pasa org)OpenWAFError, estado 0, código org_unresolvedIgual
No hay fetch disponibleOpenWAFError, estado 0, código no_fetch—
No se puede contactar con la APIEl error que lanza fetch (un TypeError), sin envolverOpenWAFError, estado 0, código unreachable
Cancelado con signalEl AbortError que lanza fetch—

Reintentos

Los SDK no reintentan. Las lecturas y las simulaciones se pueden reintentar sin riesgo tras un error de red o un 5xx. Una escritura enviada con ifMatch, también: si el primer intento se aplicó, el reintento falla con version_conflict en vez de aplicar el cambio dos veces.

Última actualización:

↑↓ para moverte↵ para abriresc para cerrar