Développement de Storefront Medusa
Guide d'intégration frontend pour construire des storefronts avec Medusa. Couvre l'utilisation du SDK, les patterns React Query et l'appel de routes API personnalisées.
Quand appliquer
Charger cette skill pour TOUTE tâche de développement de storefront, y compris :
- Appeler des routes API Medusa personnalisées depuis le storefront
- Intégrer le SDK Medusa dans les applications frontend
- Utiliser React Query pour la récupération de données
- Implémenter des mutations avec mises à jour optimistes
- Gestion des erreurs et invalidation du cache
Charger aussi building-with-medusa quand : Construire les routes API backend que le storefront appelle
CRITIQUE : Charger les fichiers de référence si nécessaire
La référence rapide ci-dessous NE SUFFIT PAS pour l'implémentation. Vous DEVEZ charger le fichier de référence avant d'écrire du code d'intégration storefront.
Charger cette référence lors de l'implémentation des fonctionnalités storefront :
- Appeler des routes API ? → DOIT charger
references/frontend-integration.mden premier - Utiliser le SDK ? → DOIT charger
references/frontend-integration.mden premier - Implémenter React Query ? → DOIT charger
references/frontend-integration.mden premier
Catégories de règles par priorité
| Priorité | Catégorie | Impact | Préfixe |
|---|---|---|---|
| 1 | Utilisation du SDK | CRITIQUE | sdk- |
| 2 | Patterns React Query | HAUTE | query- |
| 3 | Affichage des données | HAUTE (inclut règle CRITIQUE de prix) | display- |
| 4 | Gestion des erreurs | MOYENNE | error- |
Référence rapide
1. Utilisation du SDK (CRITIQUE)
sdk-always-use- TOUJOURS utiliser le SDK JS Medusa pour TOUTES les requêtes API - JAMAIS utiliser fetch() réguliersdk-existing-methods- Pour les endpoints intégrés, utiliser les méthodes SDK existantes (sdk.store.product.list(),sdk.admin.order.retrieve())sdk-client-fetch- Pour les routes API personnalisées, utilisersdk.client.fetch()sdk-required-headers- Le SDK ajoute automatiquement les headers obligatoires (clé API publique pour store, auth pour admin) - fetch() régulier manque ces headers et cause des erreurssdk-no-json-stringify- JAMAIS utiliser JSON.stringify() sur le body - Le SDK gère la sérialisation automatiquementsdk-plain-objects- Passer des objets JavaScript simples au body, pas des chaînessdk-locate-first- Toujours localiser où le SDK est instancié dans le projet avant de l'utiliser
2. Patterns React Query (HAUTE)
query-use-query- UtiliseruseQuerypour les requêtes GET (récupération de données)query-use-mutation- UtiliseruseMutationpour les requêtes POST/DELETE (mutations)query-invalidate- Invalider les queries dansonSuccesspour rafraîchir les données après les mutationsquery-keys-hierarchical- Structurer les query keys hiérarchiquement pour une gestion efficace du cachequery-loading-states- Toujours gérer les étatsisLoading,isPending,isError
3. Affichage des données (HAUTE)
display-price-format- CRITIQUE : Les prix de Medusa sont stockés tels quels ($49.99 = 49.99, PAS en centimes). Les afficher directement - JAMAIS diviser par 100
4. Gestion des erreurs (MOYENNE)
error-on-error- Implémenter le callbackonErrordans les mutations pour gérer les échecserror-display- Afficher les messages d'erreur aux utilisateurs quand les mutations échouenterror-rollback- Utiliser les mises à jour optimistes avec rollback en cas d'erreur pour une meilleure UX
Pattern SDK critique
TOUJOURS passer des objets simples au SDK - JAMAIS utiliser JSON.stringify() :
// ✅ CORRECT - Objet simple
await sdk.client.fetch("/store/reviews", {
method: "POST",
body: {
product_id: "prod_123",
rating: 5,
}
})
// ❌ FAUX - JSON.stringify casse la requête
await sdk.client.fetch("/store/reviews", {
method: "POST",
body: JSON.stringify({ // ❌ NE PAS FAIRE!
product_id: "prod_123",
rating: 5,
})
})
Pourquoi c'est important :
- Le SDK gère la sérialisation JSON automatiquement
- Utiliser JSON.stringify() va double-sérialiser et casser la requête
- Le serveur ne pourra pas parser le body
Checklist des erreurs courantes
Avant d'implémenter, vérifier que vous ne faites PAS ces choses :
Utilisation du SDK :
- [ ] Utiliser fetch() régulier au lieu du SDK JS Medusa (cause des erreurs de headers manquants)
- [ ] Ne pas utiliser les méthodes SDK existantes pour les endpoints intégrés (p.ex. utiliser sdk.client.fetch("/store/products") au lieu de sdk.store.product.list())
- [ ] Utiliser JSON.stringify() sur le paramètre body
- [ ] Définir manuellement les headers Content-Type (le SDK les ajoute)
- [ ] Hardcoder les chemins d'import du SDK (les localiser en premier dans le projet)
- [ ] Ne pas utiliser sdk.client.fetch() pour les routes personnalisées
React Query :
- [ ] Ne pas invalider les queries après les mutations
- [ ] Utiliser des query keys plates au lieu de hiérarchiques
- [ ] Ne pas gérer les états de chargement et d'erreur
- [ ] Oublier de désactiver les boutons pendant les mutations (isPending)
Affichage des données :
- [ ] CRITIQUE : Diviser les prix par 100 lors de l'affichage (les prix sont stockés tels quels : $49.99 = 49.99, PAS en centimes)
Gestion des erreurs :
- [ ] Ne pas implémenter les callbacks onError
- [ ] Ne pas afficher les messages d'erreur aux utilisateurs
- [ ] Ne pas gérer les défaillances réseau correctement
Comment utiliser
Pour les patterns détaillés et les exemples, charger le fichier de référence :
references/frontend-integration.md - Utilisation du SDK, patterns React Query, intégration API
Le fichier de référence contient :
- Patterns d'intégration SDK étape par étape
- Exemples complets React Query
- Exemples de code correct vs incorrect
- Meilleures pratiques pour les query keys
- Patterns de mises à jour optimistes
- Stratégies de gestion des erreurs
Quand utiliser le serveur MCP MedusaDocs
Utiliser cette skill pour (SOURCE PRIMAIRE) :
- Comment appeler des routes API personnalisées depuis le storefront
- Patterns d'utilisation du SDK (sdk.client.fetch)
- Patterns d'intégration React Query
- Erreurs courantes et anti-patterns
Utiliser le serveur MCP MedusaDocs pour (SOURCE SECONDAIRE) :
- Méthodes SDK intégrées (sdk.admin., sdk.store.)
- Référence API du SDK Medusa officiel
- Options de configuration spécifiques au framework
Pourquoi les skills d'abord :
- Les skills contiennent des patterns critiques comme « ne pas utiliser JSON.stringify » que le MCP n'met pas en avant
- Les skills montrent les patterns correct vs incorrect ; le MCP montre ce qui est possible
- La planification nécessite de comprendre les patterns, pas juste la référence API
Intégration avec le backend
⚠️ CRITIQUE : TOUJOURS utiliser le SDK JS Medusa - JAMAIS utiliser fetch() régulier
Lors de la construction de fonctionnalités qui s'étendent sur le backend et le frontend :
- Backend (skill building-with-medusa) : Module → Workflow → Route API
- Storefront (cette skill) : SDK → React Query → Composants UI
- Connexion :
- Endpoints intégrés : Utiliser les méthodes SDK existantes (
sdk.store.product.list()) - Routes API personnalisées : Utiliser
sdk.client.fetch("/store/my-route") - JAMAIS utiliser fetch() régulier - clé API publique manquante cause des erreurs
- Endpoints intégrés : Utiliser les méthodes SDK existantes (
Pourquoi le SDK est obligatoire :
- Les routes store ont besoin du header
x-publishable-api-key - Les routes admin ont besoin des headers
Authorizationet de session - Le SDK gère automatiquement tous les headers obligatoires
- fetch() régulier sans headers → erreurs d'authentification/autorisation
Voir building-with-medusa pour les patterns de routes API backend.