Ir al contenido principal
Laravel, thinking fast.
Capitulo 1 · Tu primer endpoint de IA

Falla en voz alta si falta la credencial

Julian Beaujardin

Esa comprobación del token merece su propia sección, porque saltársela cuesta una tarde genuinamente miserable.

Si la credencial falta y no haces nada, Laravel envía alegremente Authorization: Bearer —la cabecera existe, su valor está vacío. El proveedor la rechaza con un error de autenticación cuyo mensaje viene a decir: no has proporcionado una clave de API.

Lo cual es cierto y completamente engañoso, porque el código que lee la clave se ejecutó bien y el valor de configuración existe. Te pondrás a buscar una clave revocada, un entorno equivocado, un desfase de reloj, un proxy que quita cabeceras. La respuesta real es que una credencial por cliente resolvió a cadena vacía y nadie lo comprobó.

Falla en la frontera, con un mensaje que nombre los dos sitios de los que podría haber salido el valor. Ese error debería decirle a la siguiente persona exactamente dónde mirar, porque la siguiente persona eres tú dentro de cuatro meses.

Esto se generaliza. Una mala configuración debe fallar donde se configura, no donde se usa. Cuanto más se separan esos dos puntos, más caro sale el error.

Las credenciales son del cliente, no de la aplicación

Esta es la decisión que la mayoría de las primeras implementaciones se saltan, y es dificilísima de meter después.

Una única clave de API para toda la aplicación significa que el uso de todos los clientes cae en un mismo saco. No puedes atribuir el gasto. No puedes poner tope a un cliente ruidoso sin ponérselo a todos. No puedes dejar que un cliente traiga su propia clave. Y si esa clave se rota o se limita, todos los clientes fallan a la vez.

Así que la configuración de un driver se resuelve por cliente, con un valor de entorno como respaldo para quienes no han traído el suyo:

protected function getConfig(string $driver): array
{
    return (array) Config::get("services.ai.drivers.{$driver}", default: []);
}

Lo importante no es el método: es que los valores que hay detrás se resuelven a partir de los ajustes del llamante autenticado antes de construir el driver, y sólo recurren a un valor de entorno compartido cuando no hay nada específico del cliente.

Haz esto el primer día. Meter credenciales por cliente en un sistema que asumía una clave global significa tocar cada punto de llamada, cada prueba y cada clave de caché, normalmente con prisa y normalmente porque ha llegado una factura.