Funciones de backend
Qué son las funciones que se ejecutan en el servidor, cuándo tu app necesita una y qué hacer cuando tu plan no incluye esta función.
La app que genera Fabapp se ejecuta en el navegador de quien la usa. Casi todo cabe ahí: pantallas, datos, login, IA, las integraciones del catálogo. Algunas tareas, sin embargo, no pueden ejecutarse en el navegador, y para ellas existe la función de backend.
Qué es
Una función de backend es un fragmento de código que se ejecuta en el servidor, fuera de la app que aparece en pantalla. Quien la escribe es la IA, cuando el pedido lo necesita: crea el archivo functions/<nombre>.ts y registra la función en fab.functions.json. Las pantallas de la app llaman a la función por su nombre, esperan la respuesta y muestran el resultado.
No necesitas escribir nada. Los archivos están visibles en la pestaña Código, en la carpeta functions.
Cuándo necesitas una
Tres situaciones, y en todas la respuesta es una función de backend:
- una API o un feed externo bloqueado en el navegador. Muchos sitios no permiten que el navegador lea sus datos directamente desde otra dirección (ese bloqueo se llama CORS). Es el caso típico de los feeds RSS de portales de noticias. El servidor no tiene ese bloqueo: la función busca el contenido y se lo entrega a la app;
- una clave secreta. Todo lo que está en la app lo puede leer quien abre la app. Una clave de API de un servicio de pago nunca puede ir ahí. En la función, se queda en el servidor. Para guardar la clave, usa la subpestaña APIs externas, en la pestaña Integraciones: registra la API y la credencial, y la función la usa por su nombre;
- un cálculo o una regla en la que la app necesita confiar. Si la regla se ejecuta en el navegador, la persona puede alterarla. Ejemplos: aplicar un descuento, reservar un lugar "solo si todavía está libre", validar algo antes de grabar.
Para leer y grabar los datos de la propia app, usar la IA o las integraciones del catálogo, no hace falta una función: la app ya lo hace sin ella.
Plan
Las funciones de backend son una función del plan Builder. En los planes Free y Starter:
- el asistente dice que el pedido necesita código en el servidor y que eso depende del plan, y ofrece una alternativa o mejorar el plan;
- si aun así se escribe una función nueva, la plataforma la quita de la app en la compilación, porque se rechazaría en cada llamada.
Lo que el asistente nunca debe prometer es una "ruta" de la propia app, como /api/rss: la app no tiene servidor propio, y esa dirección no existe.
Quién puede llamar a la función
Cada función declara quién puede usarla:
- cualquier visitante, sin iniciar sesión (por ejemplo, un formulario de contacto en una página abierta);
- solo quien inició sesión en la app (el valor predeterminado, cuando no se declara nada);
- solo quien tiene un rol, como administrador.
Indica en el pedido quién debe poder usarla. Dentro de la función, el código tiene acceso a todos los datos de la app, sin las reglas de acceso: por eso importa comprobar quién llama.
Costo
- escribir la función es trabajo de la IA y gasta créditos de IA, como cualquier construcción;
- cada llamada cuenta como una solicitud de la app;
- si la función usa IA, envía un aviso o llama a una integración, ese uso consume créditos de integración, igual que fuera de ella.
Sin Builder: las alternativas
Si no quieres cambiar de plan ahora, puedes resolver los mismos problemas con un intermediario propio, fuera de Fabapp.
Un flujo tuyo en n8n, Make o Pipedream
Es la alternativa recomendada. En esos servicios armas un flujo que empieza en un webhook (una dirección que recibe la llamada), hace el trabajo del servidor y devuelve el resultado.
- en el servicio, crea un flujo con disparador de webhook;
- en el flujo, busca el feed o llama a la API. Si hay una clave secreta, queda guardada en el servicio, nunca en la app;
- haz que el flujo responda con los datos, en JSON;
- configura la respuesta para aceptar llamadas que vienen de la dirección de tu app (la opción de CORS u orígenes permitidos del servicio). Sin eso, el navegador bloquea la respuesta, exactamente como bloqueaba el feed;
- copia la URL del webhook y pégala en el chat, pidiendo: "busca los datos en esta URL y muéstralos en la pantalla de noticias".
Precauciones:
- la URL del flujo queda visible en la app, y cualquier persona puede llamarla. No hagas que el flujo ejecute nada que cueste dinero o altere datos sin protección;
- el flujo se ejecuta en tu cuenta del servicio, con los límites y el precio del plan que tengas allí.
Un servicio público de conversión de RSS
Existen servicios en internet que leen un feed RSS y devuelven el contenido listo para el navegador. Funciona, pero no es lo ideal:
- es un tercero: si se cae, la pantalla de tu app se cae con él;
- suele tener límite de uso, y la app puede dejar de funcionar cuando se alcanza;
- ve todo lo que tu app lee a través de él.
Sirve para un prototipo. Para una app en uso, prefiere el flujo propio o la función de backend.
Lo que no hay que hacer
Nunca pongas una clave secreta en la app, ni pidiéndoselo a la IA ni pegándola en el código. Todo lo que está en la app llega al navegador de quien la usa, y cualquier persona puede leerlo. Si la tarea necesita una clave, necesita un servidor: la función de backend o un intermediario propio.
Cómo saber que funcionó
- la pestaña Código muestra el archivo en
functions/y la entrada de la función enfab.functions.json; - la pantalla que usa la función muestra el resultado (los elementos del feed, el valor calculado);
- si la pantalla muestra un error, dile al asistente lo que aparece. Los errores más comunes son que la función pida iniciar sesión a quien no entró, y que el plan de la cuenta no incluya funciones.
Problemas comunes
- El asistente dijo que hace falta otro plan. La cuenta está en Free o en Starter. Cambia a Builder o usa una de las alternativas de arriba;
- La pantalla pide iniciar sesión al llamar a la función. La función está en el valor predeterminado (solo quien inició sesión). Si debe estar abierta a visitantes, pídelo en el chat;
- La cuenta dejó Builder y la pantalla dejó de funcionar. Las funciones dejan de ejecutarse fuera de Builder. Rehaz la pantalla con una de las alternativas o vuelve a Builder;
- El flujo de n8n, Make o Pipedream responde, pero la app no muestra nada. Casi siempre es CORS: el flujo tiene que permitir llamadas desde la dirección de la app.