10.9 - Usando Funções como API no Supabase

Agora que você já sabe criar suas funções no banco, vamos ver como usá-las diretamente pela API RESTful que o Supabase gera para o seu banco de dados.

Como funciona?

O Supabase cria automaticamente uma API chamada PostgREST que expõe suas tabelas e também suas funções armazenadas (database functions) — desde que estejam configuradas para isso.

Passos para chamar uma função via API:

  1. Criar a função com parâmetros (se precisar)

  2. Permitir a execução da função para a role anon ou authenticated (você faz isso na interface de permissões do Supabase ou via SQL com GRANT EXECUTE)

  3. Chamar a função pela rota /rpc/nome_da_funcao usando uma requisição POST com JSON contendo os parâmetros

Exemplo prático:

Suponha a função PL/pgSQL que calcula idade:

CREATE OR REPLACE FUNCTION calcular_idade(data_nasc DATE)
RETURNS integer
LANGUAGE plpgsql
AS $$
BEGIN
  RETURN date_part('year', age(now(), data_nasc));
END;
$$;

Para chamar via API REST:

  • Endpoint: POST https://<seu-projeto>.supabase.co/rest/v1/rpc/calcular_idade

  • Body JSON:

jsonCopiarEditar{
  "data_nasc": "1990-05-23"
}
  • Headers:

httpCopiarEditarapikey: <sua_api_key>
Authorization: Bearer <token_jwt>
Content-Type: application/json
  • Resposta:

jsonCopiarEditar{
  "calcular_idade": 34
}

Importante:

  • As funções expostas via /rpc devem retornar um tipo válido (ex: scalar, tabela, void).

  • Você sempre faz a chamada via POST, enviando os parâmetros no corpo da requisição em JSON.

  • Funções sem parâmetros podem ser chamadas enviando um objeto JSON vazio {}.

  • Para garantir segurança, configure as permissões das funções para que apenas usuários autenticados possam executá-las, quando for o caso.


Por que usar funções via API?

  • Isolamento da lógica: O cliente não precisa saber como o cálculo é feito, só chama a função.

  • Mais segurança: Você controla o que o usuário pode executar sem dar acesso direto às tabelas.

  • Redução de dados trafegados: O banco retorna só o resultado final da função, não dados brutos para processar no cliente.

Last updated