Skip to main content

Vue d’ensemble

L’API Layer est une couche d’abstraction TypeScript qui centralise toutes les interactions avec le backend Nhost via GraphQL. Elle fournit des fonctions type-safe, une gestion d’erreurs cohérente et une détection automatique des erreurs réseau. Principe fondamental :
Aucune requête GraphQL directe dans les composants. Tout passe par src/api/ via les wrappers apiCall() et apiCallVoid().
Avantages :
  • Type safety avec TypeScript strict
  • Gestion d’erreurs centralisée (ApiError)
  • Détection automatique des erreurs réseau
  • Logging via logger (jamais de console.log en prod)
  • Tests unitaires simplifiés
  • Refactoring facile (changement de backend transparent)
Structure :

Client Nhost

Configuration

Fichier : src/api/client.ts
Singleton : Une seule instance Nhost réutilisée partout. Le client expose automatiquement :
  • nhost.graphql — requêtes GraphQL vers Hasura
  • nhost.auth — authentification (signIn, signOut, session)
  • nhost.storage — upload/download de fichiers

Wrappers apiCall / apiCallVoid

apiCall — Pour les opérations qui retournent des données

Fichier : src/api/base.ts

apiCallVoid — Pour les opérations sans retour (mutations)

ApiError Class


Tools API — Exemple complet

Fichier : src/api/tools.ts Les requêtes sont faites via nhost.graphql.request() avec des queries GraphQL :
Convention Hasura : Pour les mutations update, utilisez _set (avec underscore) pour définir les champs à mettre à jour.

Utilisation dans les composants

Pattern recommandé

❌ Mauvais : Requête GraphQL directe
✅ Bon : Via API Layer

Avec Custom Hook (meilleure approche)


Bonnes pratiques

✅ À faire

Toujours utiliser apiCall/apiCallVoid
Utiliser logger au lieu de console.log
Typer les retours API

❌ À éviter

Ne pas appeler nhost.graphql directement dans les composants. Toujours passer par src/api/. Ne pas ignorer les erreurs silencieusement. Ne pas utiliser de types any — préférer les types définis dans src/api/types.ts.

Ressources

Nhost & GraphQL

Architecture backend complète

Database Schema

Structure des tables pour comprendre les relations

Custom Hooks

Hooks qui utilisent l’API Layer

Testing

Guide complet pour tester l’API