Funções de backend
O que são as funções que rodam no servidor, quando o seu app precisa de uma, e o que fazer quando o seu plano não inclui esse recurso.
O app que a Fabapp gera roda no navegador de quem usa. Quase tudo cabe aí: telas, dados, login, IA, as integrações do catálogo. Algumas tarefas, porém, não podem rodar no navegador, e é para elas que existe a função de backend.
O que é
Uma função de backend é um trecho de código que roda no servidor, fora do app que aparece na tela. Quem escreve é
a IA, quando o pedido precisa: ela cria o arquivo functions/<nome>.ts e registra a função em fab.functions.json.
As telas do app chamam a função pelo nome, esperam a resposta e mostram o resultado.
Você não precisa escrever nada. Os arquivos ficam visíveis na aba Código, na pasta functions.
Quando você precisa de uma
Três situações, e em todas elas a resposta é função de backend:
- uma API ou um feed externo bloqueado no navegador. Muitos sites não permitem que o navegador leia os dados deles direto de outro endereço (a trava se chama CORS). É o caso típico de feeds RSS de portais de notícia. O servidor não tem essa trava: a função busca o conteúdo e entrega ao app;
- uma chave secreta. Tudo que está no app pode ser lido por quem abre o app. Uma chave de API de um serviço pago nunca pode ir para lá. Na função, ela fica no servidor. Para guardar a chave, use a subaba APIs externas, na aba Integrações: ela cadastra a API e a credencial, e a função a usa pelo nome;
- um cálculo ou uma regra em que o app precisa confiar. Se a regra roda no navegador, a pessoa pode alterá-la. Exemplos: aplicar um desconto, reservar uma vaga "só se ainda estiver livre", validar algo antes de gravar.
Para ler e gravar os dados do próprio app, usar a IA ou as integrações do catálogo, não é preciso função: o app já faz isso sem ela.
Plano
Funções de backend são um recurso do plano Builder. Nos planos Free e Starter:
- o assistente diz que o pedido precisa de código no servidor e que isso depende do plano, e oferece uma alternativa ou o upgrade;
- se uma função nova for escrita mesmo assim, a plataforma a retira do app no build, porque ela seria recusada a cada chamada.
O que o assistente nunca deve prometer é uma "rota" do próprio app, como /api/rss: o app não tem servidor
próprio, e esse endereço não existe.
Quem pode chamar a função
Cada função declara quem pode usá-la:
- qualquer visitante, sem login (por exemplo, um formulário de contato numa página aberta);
- só quem entrou no app (o padrão, quando nada é declarado);
- só quem tem um papel, como administrador.
Diga no pedido quem deve poder usar. Dentro da função, o código tem acesso a todos os dados do app, sem as regras de acesso: é por isso que a checagem de quem chama importa.
Custo
- escrever a função é trabalho da IA e gasta crédito de IA, como qualquer construção;
- cada chamada conta como uma requisição do app;
- se a função usar IA, mandar aviso ou chamar uma integração, esse uso consome créditos de integração, como consumiria fora dela.
Sem o Builder: as alternativas
Se você não quer mudar de plano agora, dá para resolver os mesmos problemas com um intermediário seu, fora da Fabapp.
Um fluxo seu no n8n, no Make ou no Pipedream
É a alternativa recomendada. Nesses serviços você monta um fluxo que começa num webhook (um endereço que recebe a chamada), faz o trabalho do servidor e devolve o resultado.
- no serviço, crie um fluxo com gatilho de webhook;
- no fluxo, busque o feed ou chame a API. Se houver chave secreta, ela fica guardada no serviço, nunca no app;
- faça o fluxo responder com os dados, em JSON;
- configure a resposta para aceitar chamadas vindas do endereço do seu app (a opção de CORS ou de origens permitidas do serviço). Sem isso, o navegador bloqueia a resposta, exatamente como bloqueava o feed;
- copie a URL do webhook e cole no chat, pedindo: "busque os dados nesta URL e mostre na tela de notícias".
Cuidados:
- a URL do fluxo fica visível no app, e qualquer pessoa pode chamá-la. Não faça o fluxo executar nada que custe dinheiro ou altere dados sem proteção;
- o fluxo roda na sua conta do serviço, com os limites e o preço do plano de lá.
Um serviço público de conversão de RSS
Existem serviços na internet que leem um feed RSS e devolvem o conteúdo pronto para o navegador. Funciona, mas não é o ideal:
- é um terceiro: se ele sair do ar, a tela do seu app para junto;
- costuma ter limite de uso, e o app pode parar quando ele é atingido;
- ele vê tudo o que o seu app lê através dele.
Serve para um protótipo. Para um app em uso, prefira o fluxo próprio ou a função de backend.
O que não fazer
Nunca coloque uma chave secreta no app, nem pedindo à IA, nem colando no código. Tudo que está no app chega ao navegador de quem usa, e qualquer pessoa consegue ler. Se a tarefa precisa de chave, ela precisa de servidor: a função de backend ou um intermediário seu.
Como saber que funcionou
- a aba Código mostra o arquivo em
functions/e a entrada da função emfab.functions.json; - a tela que usa a função mostra o resultado (os itens do feed, o valor calculado);
- se a tela mostrar erro, diga ao assistente o que aparece. Os erros mais comuns são a função pedir login de quem não entrou, e o plano da conta não incluir funções.
Problemas comuns
- O assistente disse que precisa de outro plano. A conta está no Free ou no Starter. Mude para o Builder ou use uma das alternativas acima;
- A tela diz para fazer login ao chamar a função. A função está no padrão (só quem entrou). Se ela deve ser aberta a visitantes, peça isso no chat;
- A conta saiu do Builder e a tela parou. As funções deixam de rodar fora do Builder. Refaça a tela com uma das alternativas ou volte ao Builder;
- O fluxo do n8n, do Make ou do Pipedream responde, mas o app não mostra nada. Quase sempre é CORS: o fluxo precisa permitir chamadas vindas do endereço do app.