Skip to content

Type de ressource : Configuration API Sanity (Client / Token / RequĂȘte)
Fichier source : apps/web/src/lib/sanity.ts
Statut : Actif

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.

  • 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
  • Environnements : Development, Production
  • Couches utilisatrices : L2 (Astro)
  • Types de requĂȘtes : CDN (published), Preview (previewDrafts)
[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]
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
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) -
apps/web/src/lib/sanity.ts
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)

Non implémenté dans ce fichier - les Workers utilisent leur propre configuration.

Non implĂ©mentĂ© - sanity-typegen n’est pas configurĂ© dans le projet actuel.

Non applicable - sanity-typegen n’est pas utilisĂ©.

Types non générés automatiquement - définitions manuelles à implémenter si nécessaire.

apps/web/src/lib/sanity.ts
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
}
}
  • ✅ 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
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 ❌
  • ✅ 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Ă©)

Configuration dans Sanity Studio :

  • Settings → API → Tokens
  • CrĂ©er des tokens avec des scopes spĂ©cifiques :
    • read : Lecture uniquement
Mode useCdn Rationale
Production (published) true Contenu mis en cache par Sanity CDN
Preview (previewDrafts) false Contenu draft non caché
  • ✅ 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
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
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
// Logs à vérifier en cas de problÚme
console.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 → Activity
Terminal window
# Test de requĂȘte GROQ via curl
curl "https://[project-id].api.sanity.io/v2026-09-06/data/query/production?query=*[_type=='post'][0...5]" \
-H "Authorization: Bearer [token]"
  • ✅ 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Ă©)
  • ✅ Utiliser async/await pour 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
  • ✅ Utiliser des variables d’environnement diffĂ©rentes par environnement
  • ✅ Tester en local avant dĂ©ploiement
  • ✅ Documenter les diffĂ©rences de configuration entre environnements
  • 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
  • ❌ 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)
  • 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
Date Version Description Auteur
2026-09-15 1.0 Création initiale de la documentation Devin
Edit page

Last updated: