Supabase génère automatiquement une API REST complète pour chaque table de votre base de données, alimentée par PostgREST. Pas besoin d’écrire de routes backend : lisez, créez, modifiez et supprimez des données directement depuis votre frontend.
Pour comprendre les fondations, consultez notre guide complet Supabase. Pour structurer vos tables, voir créer et structurer sa base de données Supabase. Pour sécuriser vos endpoints, voir Supabase RLS. Pour intégrer l’API dans Next.js, voir Supabase avec Next.js. Pour intégrer dans React, voir Supabase avec React.
Comment Fonctionne l’API REST Supabase
Supabase utilise PostgREST, un serveur web qui transforme automatiquement votre base PostgreSQL en API RESTful. Chaque table devient un endpoint accessible via HTTP.
# URL de base de l'API
https://[project-ref].supabase.co/rest/v1/
# Endpoints générés automatiquement
GET /rest/v1/posts → Lire tous les posts
POST /rest/v1/posts → Créer un post
GET /rest/v1/posts?id=eq.uuid → Lire un post spécifique
PATCH /rest/v1/posts?id=eq.uuid → Modifier un post
DELETE /rest/v1/posts?id=eq.uuid → Supprimer un post
SELECT : Lire des données
// Lire tous les posts
const { data, error } = await supabase
.from('posts')
.select('*')
// Sélectionner des colonnes spécifiques
const { data } = await supabase
.from('posts')
.select('id, title, created_at')
// Jointures (relations)
const { data } = await supabase
.from('posts')
.select(`
id,
title,
content,
profiles (
username,
avatar_url
),
categories (
name,
slug
)
`)
// Compter les résultats
const { data, count } = await supabase
.from('posts')
.select('*', { count: 'exact' })
.limit(10)
Filtres et opérateurs
// Égalité
.eq('status', 'published')
// Comparaisons
.gt('views', 100) // Greater than
.gte('views', 100) // Greater than or equal
.lt('views', 100) // Less than
.lte('views', 100) // Less than or equal
// IN / NOT IN
.in('status', ['published', 'draft'])
// ILIKE (insensible à la casse)
.ilike('title', '%supabase%')
// Null
.is('deleted_at', null)
// OR
.or('status.eq.published,status.eq.draft')
Tri et pagination
// Tri
.order('created_at', { ascending: false })
// Pagination classique
.range(0, 9) // Premiers 10 résultats
.range(10, 19) // Page 2
// Limite simple
.limit(20)
// Single result
.single() // Erreur si 0 ou plusieurs résultats
.maybeSingle() // Null si 0 résultat
INSERT, UPDATE et DELETE
// Insérer un enregistrement
const { data, error } = await supabase
.from('posts')
.insert({
title: 'Mon article',
content: 'Contenu...',
user_id: userId
})
.select()
// Upsert (créer ou mettre à jour)
const { data, error } = await supabase
.from('profiles')
.upsert({
id: userId,
username: 'jeandupont',
updated_at: new Date().toISOString()
})
.select()
// Modifier un enregistrement
const { data, error } = await supabase
.from('posts')
.update({ title: 'Nouveau titre' })
.eq('id', postId)
.select()
// Supprimer
const { error } = await supabase
.from('posts')
.delete()
.eq('id', postId)
Requêtes via HTTP Direct (curl)
# Lire tous les posts publiés
curl 'https://[ref].supabase.co/rest/v1/posts?status=eq.published&select=id,title' \
-H "apikey: VOTRE_ANON_KEY" \
-H "Authorization: Bearer VOTRE_JWT"
# Créer un post
curl -X POST 'https://[ref].supabase.co/rest/v1/posts' \
-H "apikey: VOTRE_ANON_KEY" \
-H "Authorization: Bearer VOTRE_JWT" \
-H "Content-Type: application/json" \
-H "Prefer: return=representation" \
-d '{"title": "Mon article", "content": "..."}'
Appeler des Fonctions RPC
const { data, error } = await supabase
.rpc('get_trending_posts', {
limit_count: 10,
since_date: '2024-01-01'
})
Gestion des Erreurs
if (error) {
switch (error.code) {
case 'PGRST116': // No rows returned
console.log('Post non trouvé')
break
case '42501': // Insufficient privilege (RLS)
console.log('Accès refusé')
break
case '23505': // Unique violation
console.log('Doublon détecté')
break
default:
console.error('Erreur:', error.message)
}
}
👉 Articles du guide Supabase
Cet article fait partie du Guide Complet Supabase 2026. Retrouvez les autres articles :
- ✅ Supabase : Le Guide Complet 2026
- ✅ Supabase vs Firebase : Comparatif Complet 2026
- ✅ Installer Supabase en Local avec Docker
- ✅ Supabase Pricing : Quel Plan Choisir en 2026
- ✅ Architecture Supabase : Postgres, GoTrue, Realtime et Storage
- ✅ Créer et Structurer sa Base de Données Supabase
- ✅ Supabase RLS : Sécuriser ses Données avec Row Level Security
- ✅ Supabase SQL : Triggers, Fonctions et Procédures Stockées
- ✅ Supabase Migrations : Gérer l’Évolution de son Schéma
- ✅ Supabase Auth : Email, OAuth et Magic Links
- ✅ Supabase Rôles et Permissions
- ✅ Supabase JWT : Comprendre les Tokens
- ✅ Supabase avec Next.js : App Router
- ✅ Supabase avec React : Hooks et Contexte
- 📅 Edge Functions — à paraître le 26/06
- 📅 Realtime Supabase — à paraître le 28/06
- 📅 Storage Supabase — à paraître le 30/06
- 📅 Vector & pgvector — à paraître le 02/07
- 📅 Supabase MCP — à paraître le 04/07
- 📅 Déploiement en production — à paraître le 06/07
- 📅 CLI Supabase — à paraître le 08/07

