> For the complete documentation index, see [llms.txt](https://favelaware.gitbook.io/favelaware/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://favelaware.gitbook.io/favelaware/10-banco-de-dados/10.9-usando-funcoes-como-api-no-supabase.md).

# 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:

```sql
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:

```json
jsonCopiarEditar{
  "data_nasc": "1990-05-23"
}
```

* Headers:

```http
httpCopiarEditarapikey: <sua_api_key>
Authorization: Bearer <token_jwt>
Content-Type: application/json
```

* Resposta:

```json
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.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://favelaware.gitbook.io/favelaware/10-banco-de-dados/10.9-usando-funcoes-como-api-no-supabase.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
