Pular para o conteúdo
🔌 API REST

PostgREST automático.

API REST gerada a partir do seu schema. SELECT, INSERT, UPDATE, DELETE, filtros, joins. Sem escrever endpoint.

URL base

endpoint
https://api.superdb.com.br/{tabela}

Path raiz, sem /rest/v1/ e sem {projeto} na URL. O tenant é escolhido por header: Accept-Profile: proj_{slug} na leitura e Content-Profile: proj_{slug} na escrita.

Autenticação

Toda requisição precisa dos headers de auth mais o profile do tenant:

headers
apikey: sua-anon-key
Authorization: Bearer jwt-do-usuario-logado
Accept-Profile: proj_meuapp     # leitura (GET)
Content-Profile: proj_meuapp    # escrita (POST/PATCH/DELETE)
💡

Dica: RLS é respeitado automaticamente. Usuário só lê o que suas políticas permitem.

SELECT

curl
# Todos os registros
curl https://api.superdb.com.br/tasks \
  -H "apikey: $ANON_KEY" \
  -H "Authorization: Bearer $JWT" \
  -H "Accept-Profile: proj_meuapp"

# Filtro: tarefas não concluídas
curl "https://api.superdb.com.br/tasks?done=eq.false" \
  -H "apikey: $ANON_KEY" -H "Authorization: Bearer $JWT" \
  -H "Accept-Profile: proj_meuapp"

# Selecionar colunas
curl "https://api.superdb.com.br/tasks?select=id,title" \
  -H "apikey: $ANON_KEY" -H "Authorization: Bearer $JWT" \
  -H "Accept-Profile: proj_meuapp"

# Ordem + paginação
curl "https://api.superdb.com.br/tasks?order=created_at.desc&limit=10" \
  -H "apikey: $ANON_KEY" -H "Authorization: Bearer $JWT" \
  -H "Accept-Profile: proj_meuapp"

Operadores de filtro

Use no formato ?coluna=op.valor. Operadores principais:

  • eq — igual: ?done=eq.true
  • neq — diferente: ?status=neq.deleted
  • gt, gte, lt, lte — comparações: ?age=gt.18
  • like, ilike — pattern matching: ?name=ilike.*silva*
  • is — NULL/TRUE: ?deleted_at=is.null
  • in — lista: ?status=in.(active,pending)

INSERT

curl
curl -X POST https://api.superdb.com.br/tasks \
  -H "apikey: $ANON_KEY" -H "Authorization: Bearer $JWT" \
  -H "Content-Type: application/json" \
  -H "Content-Profile: proj_meuapp" \
  -H "Prefer: return=representation" \
  -d '{"title": "Nova tarefa", "done": false}'

UPDATE

curl
curl -X PATCH "https://api.superdb.com.br/tasks?id=eq.UUID" \
  -H "apikey: $ANON_KEY" -H "Authorization: Bearer $JWT" \
  -H "Content-Type: application/json" \
  -H "Content-Profile: proj_meuapp" \
  -d '{"done": true}'

DELETE

curl
curl -X DELETE "https://api.superdb.com.br/tasks?id=eq.UUID" \
  -H "apikey: $ANON_KEY" -H "Authorization: Bearer $JWT" \
  -H "Content-Profile: proj_meuapp"

Joins automáticos

PostgREST detecta foreign keys e permite joins por sintaxe tabela(colunas):

curl
curl "https://api.superdb.com.br/tasks?select=*,user:users(name,email)" \
  -H "apikey: $ANON_KEY" -H "Authorization: Bearer $JWT" \
  -H "Accept-Profile: proj_meuapp"

Preview no Studio

Toda chamada REST roda como SQL embaixo. Você pode espiar no Studio:

superdb.com.br/dash/meuapp/api-logs
v0.4.2
GET /tasks?done=eq.false ×
1-- traduzido pelo PostgREST
2select * from proj_meuapp.tasks
3 where done = false
4 and user_id = auth.uid();

Limites

  • Máximo de 1.000 registros por request por padrão
  • Use limit e offset pra paginar
  • Use Range header pra range requests
💡

Dica: Para queries tipadas, use o SDK @superdb/client (drop-in do supabase-js) com createClient(url, anonKey, { project: 'meuapp' }) — o .from() monta as URLs PostgREST e manda o Accept-Profile automaticamente, sem header manual.

Essa página ajudou?