Sanity API Configuration
Type de ressource : Configuration API Sanity (Client / Token / RequĂȘte)
Fichier source :apps/web/src/lib/sanity.ts
Statut : Actif
1. Vue dâensemble
Section titled â1. Vue dâensembleâ1.1. Description
Section titled â1.1. DescriptionâConfiguration du client Sanity pour la communication avec lâAPI Sanity. Supporte le mode published (CDN) et previewDrafts (sans CDN) pour la prĂ©visualisation des documents non publiĂ©s.
1.2. Objectif
Section titled â1.2. Objectifâ- Interface centralisĂ©e pour les requĂȘtes Sanity
- Support du mode preview pour les drafts
- Configuration des credentials et du dataset
- Gestion automatique du token pour lâaccĂšs aux drafts
1.3. PérimÚtre concerné
Section titled â1.3. PĂ©rimĂštre concernĂ©â- Environnements : Development, Production
- Couches utilisatrices : L2 (Astro)
- Types de requĂȘtes : CDN (published), Preview (previewDrafts)
2. Architecture et flux
Section titled â2. Architecture et fluxâ2.1. Diagramme de flux
Section titled â2.1. Diagramme de fluxâ[Astro] â âŒ[Client Sanity (configurĂ©)] â âą DĂ©tection du mode preview â âą SĂ©lection du token appropriĂ© â âą Configuration du CDN âŒ[Sanity Content Lake API] â âą RequĂȘte GROQ â âą Validation des permissions âŒ[RĂ©ponse JSON typĂ©e]2.2. Composants impliquĂ©s
Section titled â2.2. Composants impliquĂ©sâ| Composant | RĂŽle | Couche |
|---|---|---|
getSanityClient() |
Factory de client Sanity avec détection de mode | L2 (Astro) |
createClient() |
Client Sanity de base (@sanity/client) | L2 |
getAmn() |
Fonction utilitaire pour récupérer le document AMN | L2 (Astro) |
| Variables dâenvironnement | Configuration des tokens et IDs | Runtime |
3. Configuration
Section titled â3. Configurationâ3.1. Variables dâenvironnement requises
Section titled â3.1. Variables dâenvironnement requisesâ| Variable | Description | Obligatoire | Valeur par dĂ©faut |
|---|---|---|---|
SANITY_PROJECT_ID |
ID du projet Sanity | â | - |
SANITY_DATASET |
Nom du dataset (ex: development) |
â | development |
SANITY_API_READ_TOKEN |
Token de lecture (pour preview) | â (en preview) | - |
3.2. Configuration du client (L2 - Astro)
Section titled â3.2. Configuration du client (L2 - Astro)âimport { createClient } from '@sanity/client'
const projectId = import.meta.env.SANITY_PROJECT_ID || process.env.SANITY_PROJECT_ID || ''const dataset = import.meta.env.SANITY_DATASET || process.env.SANITY_DATASET || 'development'const readToken = import.meta.env.SANITY_API_READ_TOKEN || process.env.SANITY_API_READ_TOKEN
export function getSanityClient(isPreview: boolean = false) { return createClient({ projectId, dataset, apiVersion: '2026-09-06', useCdn: !isPreview, perspective: isPreview ? 'previewDrafts' : 'published', token: isPreview ? readToken : undefined, })}
export const client = getSanityClient(false)3.3. Configuration du client (L3 - Workers)
Section titled â3.3. Configuration du client (L3 - Workers)âNon implĂ©mentĂ© dans ce fichier - les Workers utilisent leur propre configuration.
4. Typage et génération automatique
Section titled â4. Typage et gĂ©nĂ©ration automatiqueâ4.1. Configuration de sanity-typegen
Section titled â4.1. Configuration de sanity-typegenâNon implĂ©mentĂ© - sanity-typegen nâest pas configurĂ© dans le projet actuel.
4.2. Commandes de génération
Section titled â4.2. Commandes de gĂ©nĂ©rationâNon applicable - sanity-typegen nâest pas utilisĂ©.
4.3. Types générés (exemple)
Section titled â4.3. Types gĂ©nĂ©rĂ©s (exemple)âTypes non gĂ©nĂ©rĂ©s automatiquement - dĂ©finitions manuelles Ă implĂ©menter si nĂ©cessaire.
5. RequĂȘtes GROQ
Section titled â5. RequĂȘtes GROQâ5.1. RequĂȘte typĂ©e (exemple)
Section titled â5.1. RequĂȘte typĂ©e (exemple)âexport async function getAmn(isPreview: boolean = false) { try { const sanityClient = getSanityClient(isPreview) const query = `*[_type == "amn" && status == "active"][0]` return await sanityClient.fetch(query) } catch (error) { console.error('Error fetching AMN document from Sanity:', error) return null }}5.2. Bonnes pratiques GROQ
Section titled â5.2. Bonnes pratiques GROQâ- â
Toujours typer les résultats avec
client.fetch<T>()(Ă implĂ©menter) - â
Utiliser des projections explicites (éviter
*non filtrĂ©) - â
Filtrer par
status == "active"pour le schĂ©ma AMN - â
Utiliser
order()pour trier les rĂ©sultats - â
Gérer les erreurs avec
try/catch
6. Sécurité
Section titled â6. SĂ©curitĂ©â6.1. Gestion des tokens
Section titled â6.1. Gestion des tokensâ| Token | Permissions | Stockage | Exposition |
|---|---|---|---|
SANITY_PROJECT_ID |
Lecture publique | .env | CĂŽtĂ© client â |
SANITY_DATASET |
Lecture publique | .env | CĂŽtĂ© client â |
SANITY_API_READ_TOKEN |
Lecture des drafts | .env (non versionnĂ©) | Runtime uniquement â |
6.2. RÚgles de sécurité
Section titled â6.2. RĂšgles de sĂ©curitĂ©â- â Les tokens publics peuvent ĂȘtre exposĂ©s cĂŽtĂ© client
- â Le token de lecture nâest transmis quâen mode preview
- â Utiliser des tokens avec les permissions minimales nĂ©cessaires
- â Rotation rĂ©guliĂšre des tokens (tous les 90 jours recommandĂ©)
6.3. Permissions Sanity
Section titled â6.3. Permissions SanityâConfiguration dans Sanity Studio :
- Settings â API â Tokens
- Créer des tokens avec des scopes spécifiques :
read: Lecture uniquement
7. Performance
Section titled â7. Performanceâ7.1. StratĂ©gie de cache
Section titled â7.1. StratĂ©gie de cacheâ| Mode | useCdn |
Rationale |
|---|---|---|
| Production (published) | true |
Contenu mis en cache par Sanity CDN |
| Preview (previewDrafts) | false |
Contenu draft non caché |
7.2. Optimisation des requĂȘtes
Section titled â7.2. Optimisation des requĂȘtesâ- â Utiliser des projections pour rĂ©duire la taille des rĂ©ponses
- â Filtrer cĂŽtĂ© serveur plutĂŽt que cĂŽtĂ© client
- â Activer le CDN en mode published
- â SĂ©lectionner uniquement les champs requis
7.3. Limites et quotas
Section titled â7.3. Limites et quotasâ| Limite | Valeur | Rationale |
|---|---|---|
| Taille max requĂȘte | 16 KB | Limite Sanity API |
| Taille max réponse | 100 MB | Limite Sanity API |
| RequĂȘtes par seconde | 100 (Free) / 1000 (Pro) | Quota Sanity |
| Temps de réponse | < 5s recommandé | UX optimale |
8. Débogage et troubleshooting
Section titled â8. DĂ©bogage et troubleshootingâ8.1. ProblĂšmes courants
Section titled â8.1. ProblĂšmes courantsâ| SymptĂŽme | Cause probable | Solution |
|---|---|---|
| Erreur 401 Unauthorized | Token manquant ou invalide | Vérifier SANITY_API_READ_TOKEN |
| Drafts non visibles | Perspective incorrecte | Vérifier isPreview parameter |
| Données obsolÚtes | CDN activé en mode preview | Vérifier useCdn: false |
| Erreur de connexion | Project ID ou dataset incorrect | VĂ©rifier variables dâenvironnement |
8.2. Logs et monitoring
Section titled â8.2. Logs et monitoringâ// Logs Ă vĂ©rifier en cas de problĂšmeconsole.error('Error fetching AMN document from Sanity:', error)
// VĂ©rifier les requĂȘtes dans l'onglet Network du navigateur// VĂ©rifier les logs Sanity Studio â Settings â API â Activity8.3. Tests manuels
Section titled â8.3. Tests manuelsâ# Test de requĂȘte GROQ via curlcurl "https://[project-id].api.sanity.io/v2026-09-06/data/query/production?query=*[_type=='post'][0...5]" \ -H "Authorization: Bearer [token]"9. Bonnes pratiques
Section titled â9. Bonnes pratiquesâ9.1. Architecture
Section titled â9.1. Architectureâ- â
Centraliser la configuration du client dans
apps/web/src/lib/sanity.ts - â SĂ©parer les requĂȘtes GROQ rĂ©currentes dans des fonctions utilitaires
- â Toujours typer les rĂ©sultats (Ă implĂ©menter avec sanity-typegen)
- â Utiliser des factory functions pour crĂ©er les clients (flexibilitĂ©)
9.2. Code
Section titled â9.2. Codeâ- â
Utiliser
async/awaitpour les requĂȘtes - â
Gérer les erreurs avec
try/catch - â Logger les erreurs de requĂȘte pour le debugging
- â Ne jamais hardcoder les IDs de projet ou datasets
9.3. Environnements
Section titled â9.3. Environnementsâ- â Utiliser des variables dâenvironnement diffĂ©rentes par environnement
- â Tester en local avant dĂ©ploiement
- â Documenter les diffĂ©rences de configuration entre environnements
10. Ăvolutions et roadmap
Section titled â10. Ăvolutions et roadmapâ10.1. AmĂ©liorations planifiĂ©es
Section titled â10.1. AmĂ©liorations planifiĂ©esâ- IntĂ©gration de sanity-typegen pour la gĂ©nĂ©ration de types
- Cache cÎté serveur avec invalidation intelligente
- RequĂȘtes rĂ©utilisables centralisĂ©es
- Monitoring des performances des requĂȘtes
10.2. Limitations connues
Section titled â10.2. Limitations connuesâ- â Le mode preview nĂ©cessite un token avec permissions de lecture
- â Les drafts ne sont pas accessibles via CDN
- â La configuration actuelle ne supporte pas les mutations (Ă©criture)
11. Ressources liées
Section titled â11. Ressources liĂ©esâ- Documentation Sanity : API Reference
- Documentation Sanity : Preview Content
- Client Sanity : @sanity/client
- Pages Astro :
apps/web/src/pages/api/preview.ts,apps/web/src/pages/api/exit-preview.ts - Configuration :
apps/web/astro.config.mjs
12. Historique des modifications
Section titled â12. Historique des modificationsâ| Date | Version | Description | Auteur |
|---|---|---|---|
| 2026-09-15 | 1.0 | Création initiale de la documentation | Devin |