SDK Client, Realtime et Backups PocketBase – Guide 2026
PocketBase est un backend open-source complet qui inclut des APIs utilitaires pour la maintenance quotidienne et des SDK clients pour une intégration simple avec vos applications web ou mobiles. Dans ce guide, nous explorons les APIs pour les health checks, le realtime, les backups, les logs et les settings. Nous couvrons aussi les SDK JavaScript et Dart, avec un focus sur la persistance d'authentification et les uploads mobiles. Ces outils sont essentiels pour les startups et PME qui cherchent une solution légère et scalable, sans complexité inutile.
Ce tutoriel s'adresse aux débutants : nous expliquons chaque concept pas à pas, avec des exemples de code directement utilisables. Tous les détails proviennent de la documentation officielle de PocketBase, mise à jour en 2025. Prêt ? Commençons par les bases des APIs utilitaires.
1. Health Check : Vérifiez l'État de Votre Serveur en Un Coup d'Œil
Le health check est l'API la plus simple de PocketBase. Elle permet de confirmer que votre serveur fonctionne correctement, sans authentification requise. C'est idéal pour les scripts de monitoring ou les déploiements automatisés dans une startup.
L'Endpoint Principal
Utilisez GET /api/health ou HEAD /api/health. La méthode HEAD est plus légère car elle ne renvoie pas le corps de la réponse, juste le code de statut.
Paramètres de Requête :
fields(optionnel, string) : Spécifiez les champs à inclure, séparés par des virgules. Par exemple,?fields=data.canBackuppour ne récupérer que ce champ. Vous pouvez utiliser des modificateurs comme:excerpt(100, true)pour tronquer des chaînes longues avec des points de suspension.
Réponse (200 OK) :
{
"status": 200,
"message": "API is healthy.",
"data": {
"canBackup": false
}
}
status: Code HTTP (toujours 200 si tout va bien).message: Message lisible ("API is healthy.").data: Objet avec des infos spécifiques, commecanBackup(booléen indiquant si les backups sont activés).
Exemples Pratiques
Pour un appel basique en JavaScript (sans SDK) :
fetch('http://127.0.0.1:8090/api/health')
.then(response => response.json())
.then(data => console.log(data.message)); // "API is healthy."
Avec HEAD pour un monitoring rapide :
fetch('http://127.0.0.1:8090/api/health', { method: 'HEAD' })
.then(response => {
if (response.ok) {
console.log('Serveur opérationnel');
}
});
Bonnes Pratiques :
- Intégrez-le dans vos outils CI/CD ou des services comme UptimeRobot pour alerter en cas de panne.
- Utilisez
fieldspour réduire la taille des réponses en production. - Pas d'authentification : parfait pour des checks publics, mais surveillez les abus potentiels avec des rate limits.
Ce endpoint est minimaliste, mais extensible. En 2025, il reste inchangé, avec un focus sur la simplicité pour les PME qui n'ont pas besoin de métriques avancées.
2. Realtime avec SSE : Mises à Jour en Temps Réel Sans Effort
PocketBase utilise Server-Sent Events (SSE) pour le realtime, ce qui signifie des notifications push pour les créations, mises à jour ou suppressions de records. C'est natif et efficace pour des apps collaboratives, comme un dashboard partagé dans une startup.
Les Endpoints Clés
GET /api/realtime: Établit la connexion SSE. Le serveur renvoie immédiatement un événementPB_CONNECTavec unclientIdunique.POST /api/realtime: Définit les abonnements. Remplace les précédents et gère l'authentification.
Paramètres pour POST :
clientId(requis, string) : L'ID de la connexion SSE.subscriptions(optionnel, array de strings) : Formats commecollection_name(toute la collection) oucollection_name/record_id(un record spécifique). Ajoutez?options={"query":{"filter":"title ~ 'test'"},"headers":{"x-custom":"value"}}pour des filtres ou headers custom.
Réponses :
- 204 : Succès (pas de corps).
- 400 : Erreur de validation (ex. :
clientIdmanquant). - 403 : Auth mismatch.
- 404 :
clientIdinvalide.
L'auth se fait via l'en-tête Authorization sur le POST. Les règles d'accès (ListRule ou ViewRule) s'appliquent aux abonnements.
Événements SSE
PB_CONNECT: Connexion établie.- Événements pour
create,update,delete: Avecactionetrecord(le record modifié).
Timeout : 5 minutes d'inactivité, puis déconnexion automatique (reconnexion si le client est actif).
Exemples avec SDK JavaScript
Initialisez et abonnez-vous :
import PocketBase from 'pocketbase';
const pb = new PocketBase('http://127.0.0.1:8090');
// Auth (optionnel, mais recommandé)
await pb.collection('users').authWithPassword('[email protected]', '1234567890');
// Abonnement à toute la collection
pb.collection('example').subscribe('*', (e) => {
console.log(e.action, e.record); // ex. : "update", { id: "...", title: "Nouveau titre" }
}, { expand: 'relField' }); // Options pour expansions
// Abonnement à un record spécifique
pb.collection('example').subscribe('RECORD_ID', (e) => {
console.log(e.record);
});
// Désabonnement
pb.collection('example').unsubscribe('RECORD_ID');
pb.collection('example').unsubscribe(); // Tout pour la collection
Pour Dart (Flutter) :
import 'package:pocketbase/pocketbase.dart';
final pb = PocketBase('http://127.0.0.1:8090');
await pb.collection('users').authWithPassword('[email protected]', '1234567890');
pb.collection('example').subscribe('*', (e) {
print(e.action);
print(e.record);
});
pb.collection('example').unsubscribe();
Bonnes Pratiques :
- Utilisez toujours les SDK pour gérer les reconnexions automatiquement.
- Testez les règles d'accès : un abonnement à une collection vérifie ListRule.
- Pour les mobiles, polyfill EventSource (voir section SDK).
En 2025, SSE reste le choix par défaut pour sa simplicité, sans besoin de WebSockets complexes.
3. Backups Automatisés : Sauvegardez Vos Données Sans Stress
Les backups protègent vos données critiques. L'API gère la liste, création, upload, suppression, restauration et téléchargement. Réservé aux superusers, avec verrouillage contre les opérations concurrentes.
Endpoints Principaux
GET /api/backups: Liste les backups (avecfields,sort,filter).POST /api/backups: Crée un backup (nom optionnel, formatpb_backup_YYYYMMDDHHMMSS.zip).POST /api/backups/upload: Upload un ZIP (multipart/form-data, MIMEapplication/zip).DELETE /api/backups/{key}: Supprime un backup.POST /api/backups/{key}/restore: Restaure (redémarre le serveur).GET /api/backups/{key}: Télécharge (avec token pour sécurité).
Réponses Exemples (liste) :
[
{
"key": "pb_backup_20230519162514.zip",
"modified": "2023-05-19T16:25:57.542Z",
"size": 251316185
}
]
Erreurs : 400 (concurrence), 401/403 (auth), 404 (non trouvé).
Pas d'intégration S3 directe dans l'API, mais configurable via settings (voir section suivante) pour stocker les backups sur S3.
Exemples avec SDK
JavaScript :
import PocketBase from 'pocketbase';
const pb = new PocketBase('http://127.0.0.1:8090');
// Auth superuser
await pb.collection('_superusers').authWithPassword('[email protected]', 'secret');
// Créer
await pb.backups.create('mon_backup.zip');
// Lister
const backups = await pb.backups.getFullList();
// Restaurer
await pb.backups.restore('mon_backup.zip');
// Télécharger (avec token)
const token = await pb.files.getToken();
const url = pb.backups.getDownloadUrl(token, 'mon_backup.zip');
Dart similaire :
await pb.collection('_superusers').authWithPassword('[email protected]', 'secret');
await pb.backups.create('mon_backup.zip');
final backups = await pb.backups.getFullList();
await pb.backups.restore('mon_backup.zip');
Pour l'upload :
await pb.backups.upload({ file: new Blob([/* ZIP bytes */]) });
Bonnes Pratiques :
- Activez les backups cron via settings pour l'automatisation (quotidien, garder 3 max).
- Testez les restaurations en dev avant prod.
- Utilisez des tokens pour les downloads sécurisés.
Pour les PME, c'est un gain de temps : un backup complet en une ligne de code.
4. Logs et Settings API : Surveillez et Configurez Votre Backend
Logs : Analysez l'Activité de Votre App
Accès superuser seulement. Endpoints pour lister, voir un log, et stats.
GET /api/logs: Liste paginée (page, perPage, sort, filter, fields).GET /api/logs/{id}: Un log spécifique.GET /api/logs/stats: Stats horaires agrégées.
Filtres : Puissants, ex. data.status >= 400 && (data.url ~ 'api' || level > 0).
Réponse Liste :
{
"page": 1,
"perPage": 20,
"totalItems": 2,
"items": [
{
"id": "ai5z3aoed6809au",
"created": "2024-10-27T09:28:19.524Z",
"message": "GET /api/collections/...",
"level": 0,
"data": {
"method": "GET",
"url": "/api/...",
"status": 200,
"execTime": 2.392327,
"userIP": "127.0.0.1"
}
}
]
}
Exemple JS :
const logs = await pb.logs.getList(1, 20, { filter: 'data.status >= 400' });
const oneLog = await pb.logs.getOne('LOG_ID');
const stats = await pb.logs.getStats({ filter: 'level > 0' });
Bonnes Pratiques : Filtrez par statut pour debugger les erreurs. Gardez max 7 jours via settings.
Settings API : Centralisez Vos Configurations
GET /api/settings: Récupère tout (secrets masqués).PATCH /api/settings: Met à jour en bulk (meta, smtp, s3, etc.).POST /api/settings/test/s3: Teste S3 (storage ou backups).POST /api/settings/test/email: Envoie un email test.POST /api/settings/apple/generate-client-secret: Génère secret OAuth Apple.
Champs Clés :
- SMTP :
enabled,host,port,username,password,tls. - S3 :
enabled,bucket,region,accessKey,secret(pour fichiers/backups). - Meta :
appName,appUrl,senderName. - Logs :
maxDays: 7,minLevel: 0. - Backups :
cron: "0 0 * * *",cronMaxKeep: 3,s3nested. - RateLimits : Règles comme
{ label: "*:auth", maxRequests: 2, duration: 3 }.
Exemple Update JS :
await pb.settings.update({
meta: { appName: 'Ma Startup', appUrl: 'https://monapp.com' },
smtp: { enabled: true, host: 'smtp.gmail.com', port: 587, username: '[email protected]', password: 'apppass', tls: true }
});
Test S3 :
await pb.settings.testS3('backups'); // 204 si OK
Bonnes Pratiques : Testez SMTP et S3 après config. Activez rate limits pour la sécurité. Pour backups S3, configurez dans backups.s3.
Ces APIs centralisent la gestion, parfait pour une équipe réduite en PME.
5. SDK JavaScript et Dart : Les Outils pour Vos Frontends
Les SDK clients simplifient l'interaction avec les APIs. Un seul instance globale par app.
Installation et Initialisation
JavaScript (npm) :
npm install pocketbase
Pour React Native : Ajoutez react-native-sse et @react-native-async-storage/async-storage.
Init basique :
import PocketBase from 'pocketbase';
const pb = new PocketBase('http://127.0.0.1:8090');
Dart (Flutter) :
dependencies:
pocketbase: ^0.18.0
shared_preferences: ^2.2.2
Init :
import 'package:pocketbase/pocketbase.dart';
final pb = PocketBase('http://127.0.0.1:8090');
Méthodes core : create(), getList(), update(), delete(), authWithPassword().
Comparaison
Les deux SDKs sont similaires : même API, support CRUD, realtime, fichiers. JS pour web/mobile, Dart pour Flutter cross-platform.
6. Auth Persistance et Uploads Mobile : Intégrez Sans Frottements
Persistance d'Auth
Sur mobile, stockez le token pour les redémarrages.
JS React Native :
import eventsource from 'react-native-sse';
import AsyncStorage from '@react-native-async-storage/async-storage';
import { AsyncAuthStore } from 'pocketbase';
global.EventSource = eventsource;
const store = new AsyncAuthStore({
save: async (data) => AsyncStorage.setItem('pb_auth', data),
initial: await AsyncStorage.getItem('pb_auth'),
});
const pb = new PocketBase('http://127.0.0.1:8090', store);
await pb.collection('users').authWithPassword('[email protected]', 'pass');
Dart Flutter :
import 'package:shared_preferences/shared_preferences.dart';
final prefs = await SharedPreferences.getInstance();
final store = AsyncAuthStore(
save: (data) => prefs.setString('pb_auth', data),
initial: prefs.getString('pb_auth'),
);
final pb = PocketBase('http://127.0.0.1:8090', authStore: store);
await pb.collection('users').authWithPassword('[email protected]', 'pass');
Uploads Fichiers Mobile
FormData diffère sur mobile.
JS React Native :
const data = new FormData();
const imageUri = 'path/to/image.jpg'; // De image picker
if (Platform.OS === 'web') {
const blob = await (await fetch(imageUri)).blob();
data.append('avatar', blob);
} else {
data.append('avatar', {
uri: imageUri,
type: 'image/jpeg',
name: 'image.jpg',
});
}
await pb.collection('users').update('USER_ID', data);
Bonnes Pratiques : Polyfill EventSource pour realtime mobile. Évitez SSR avec PocketBase (sécurité et perf) ; préférez SPAs ou un superuser client serveur-side.
Exemple Superuser Client (Node) :
const pb = new PocketBase('https://example.com');
pb.autoCancellation(false);
await pb.collection('_superusers').authWithPassword('admin', 'pass');
Conclusion : Lancez Votre App en Quelques Lignes
Avec ces APIs et SDK, PocketBase gère le monitoring (health, logs), la résilience (backups, settings) et l'intégration client (realtime, auth, uploads). Pour une startup, c'est du plug-and-play : configurez S3 pour backups auto, abonnez-vous au realtime pour des updates live, et persistez l'auth sur mobile.
Testez en local, puis déployez. Si vous avez des questions, la doc officielle est votre meilleur allié. Prêt à scaler ?