Pular para o conteúdo

Executar

Uma function roda de quatro jeitos: pelo domínio dela, pelo SDK, por agendamento e por evento. Quem pode executar por HTTP e pelo SDK é o que está em Quem pode executar (qualquer pessoa, usuários logados ou só com chave de API).

Cada function responde em https://<id>.fn.owbase.dev, com qualquer método e caminho: o pedido chega inteiro em req. É o jeito de receber webhooks de outros serviços e de servir uma API pequena. Essas chamadas são síncronas.

executar-function.ts (navegador)
import { ExecutionMethod, Functions } from '@owbase/web';
import { client } from './client';
const functions = new Functions(client);
// Síncrona: espera a resposta da function (até 30 s).
const execucao = await functions.createExecution({
functionId: '<ID_DA_FUNCTION>',
xpath: '/pedidos',
method: ExecutionMethod.POST,
headers: { 'content-type': 'application/json' },
body: JSON.stringify({ total: 120 }),
});
console.log(execucao.responseStatusCode, execucao.responseBody);
  • Síncrona (padrão): o SDK espera e devolve a resposta (responseStatusCode, responseBody). A function precisa responder dentro do tempo limite dela (padrão 15 s, configurável até 900 s) e em até 30 s, já contando a partida a frio. Pelo domínio da function, o teto da chamada síncrona é de 60 s.
  • Assíncrona (async: true): volta na hora, com a execução na fila. O resultado sai depois, em getExecution, e a function pode rodar até o tempo limite dela. Com scheduledAt, a execução fica marcada para uma data e hora.
executar-function.ts (servidor)
import { ExecutionMethod, ExecutionStatus, Functions } from '@owbase/node';
import { client } from './client';
// A chave precisa dos escopos executions.write e executions.read.
const functions = new Functions(client);
// Assíncrona: volta na hora, na fila; o resultado sai depois (até o tempo limite da function).
const fila = await functions.createExecution({ functionId: '<ID_DA_FUNCTION>', async: true, xpath: '/relatorio', method: ExecutionMethod.POST });
let execucao = fila;
while (execucao.status === ExecutionStatus.Waiting || execucao.status === ExecutionStatus.Processing) {
await new Promise((r) => setTimeout(r, 2000));
execucao = await functions.getExecution({ functionId: '<ID_DA_FUNCTION>', executionId: fila.$id });
}
console.log(execucao.status, execucao.responseStatusCode, execucao.logs);

Em Configurações → Agendamento (cron), uma expressão de cinco campos: minuto, hora, dia, mês e dia da semana. O horário é UTC: 0 12 * * 1-5 roda ao meio-dia UTC (9h em Brasília) de segunda a sexta. O console mostra a próxima execução.

Em Configurações → Eventos, escolha o que dispara a function, como users.*.create (usuário criado), databases.*.tables.*.rows.*.create (linha criada) ou buckets.*.files.*.create (arquivo enviado). Em Outros eventos dá para restringir a um recurso: buckets.fotos.files.*.create. O evento chega em x-owbase-event, e o recurso, no corpo do pedido.

O header x-owbase-key traz uma chave temporária com os escopos de Configurações → Escopos da chave da execução. Dê só o que o código usa (por exemplo, rows.write e users.read).

A aba Execuções lista cada execução (status, gatilho, método e caminho, código HTTP, duração). O detalhe mostra o pedido, a resposta, os logs e os erros. Executar agora faz uma execução de teste pelo console.