Utiliser le Client API
Nous utilisons un ApiClient centralisé (wrapper autour de fetch) pour gérer toutes les requêtes HTTP.
Il est situé dans lib/api/client.ts. Toutes les requêtes sont préfixées par /api/v1 (ex. /users/me → {baseUrl}/api/v1/users/me).
Bases
import { apiClient } from "@/lib/api/client";
// GET (l'endpoint est relatif à /api/v1)
const data = await apiClient.get<User>("/users/me");
// POST
await apiClient.post("/cameras", { name: "Stable 1" });
Fonctionnalités
1. Authentification Automatique
Le client récupère automatiquement le JWT depuis le TokenManager et l'injecte dans le header Authorization. Vous n'avez pas besoin de passer le token manuellement.
2. Gestion d'Erreur
Si l'API retourne une erreur (4xx/5xx), la promesse rejette avec une instance de ApiError.
try {
await apiClient.post(...)
} catch (error) {
if (error instanceof ApiError) {
console.log(error.status); // 400
console.log(error.code); // VALIDATION_ERROR (format API v1)
console.log(error.errors); // { email: ['Email invalide'] }
}
}
3. Rate Limiting (429)
Le client parse automatiquement le header Retry-After et lance un message d'erreur user-friendly :
"Trop de tentatives. Veuillez réessayer dans 45 secondes."
4. Gestion du 401
Si une requête échoue avec 401 Unauthorized, le client automatiquement :
- Nettoie le token local.
- Redirige l'utilisateur vers
/login.