[Nom de la Route]
[Nom de la Route]
Documentation technique
Type de ressource : Route Astro (Page SSG / Page SSR / Endpoint API)
Fichier source :src/pages/[chemin].astroousrc/pages/api/[endpoint].ts
Statut : [Actif / Déprécié / En développement]
Slice : [Numéro de la tranche verticale]
Version : 1.0
1. Vue d’ensemble (DOC)
1.1. Description
[Description concise du rôle de cette route dans l’architecture du site]
1.2. Objectif
- [Objectif principal : ex. afficher la liste des articles de blog]
- [Bénéfice pour l’utilisateur final]
1.3. Caractéristiques
| Propriété | Valeur |
|---|---|
| URL publique | /[chemin] |
| Mode de rendu | [SSG / SSR / Hybride] |
| Type | [Page HTML / Endpoint JSON / Redirect] |
| Méthode HTTP | [GET / POST / Les deux] |
| Authentification requise | [Oui / Non / Preview uniquement] |
| Cache | [Voir §6] |
2. Architecture et flux (DOC)
2.1. Diagramme de flux
[Requête utilisateur] │ ▼[Cloudflare Pages / Edge] │ • Middleware global (CSP, cookies) │ • Routage vers Astro ▼[Astro Route] │ • getStaticPaths (si SSG dynamique) │ • Récupération des données (Sanity / local) │ • Rendu du composant ▼[Réponse HTML / JSON]2.2. Composants impliqués
| Composant | Rôle | Couche |
|---|---|---|
Fichier .astro ou .ts |
Définition de la route | L2 (Astro) |
getSanityClient() |
Récupération des données CMS | L2 (Astro) |
| Composants UI | Rendu visuel | L2 (Astro) |
| Layout | Structure HTML globale | L2 (Astro) |
| Middleware Cloudflare | Sécurité + Preview cookie | L3 (Cloudflare) |
3. Implémentation (CODE)
3.1. Code de la route1/2
3.1. Code de la route2/2
---import BaseLayout from '../layouts/BaseLayout.astro';import { getSanityClient } from '../lib/sanity';import type { [TypeName] } from '../types/sanity';
// Configuration du renduexport const prerender = true; // ou false pour SSR
// Génération des chemins statiques (si SSG dynamique)export async function getStaticPaths() { const client = getSanityClient(/* ... */); const items = await client.fetch(`*[_type == "[type]" && status == "published"]{ slug }`);
return items.map(item => ({ params: { slug: item.slug.current }, }));}
// Récupération des donnéesconst { slug } = Astro.params;const client = getSanityClient(Astro);const data = await client.fetch<[TypeName]>(`*[_type == "[type]" && slug.current == $slug][0]{ ..., author->{name, image}, categories[]->{title, slug}}`, { slug });
// Gestion du 404if (!data) { return Astro.redirect('/404');}---
<BaseLayout title={data.title} description={data.seo?.metaDescription}> <!-- Contenu de la page --></BaseLayout>3.2. Requêtes GROQ (si applicable)
*[_type == "[type]" && slug.current == $slug][0]{ ..., author->{name, image}, categories[]->{title, slug}}4. Contrats d’Entrée/Sortie (SPEC)
4.1. Inputs (URL / Query / Body)
| Paramètre | Type | Source | Validation |
|---|---|---|---|
slug |
string |
URL params | Format valide |
query |
string |
Query string | Validation Zod |
4.2. Outputs (HTML / JSON)
| Élément | Type | Description |
|---|---|---|
title |
string |
Titre de la page |
description |
string |
Meta description |
content |
object |
Données du contenu |
4.3. Codes de réponse
| Code | Condition | Description |
|---|---|---|
| 200 | Succès | Page rendue correctement |
| 404 | Non trouvé | Redirection vers /404 |
| 500 | Erreur serveur | Erreur interne |
5. Tests attendus (TEST)
5.1. Tests unitaires
| Scénario | Description | Résultat attendu |
|---|---|---|
| getStaticPaths | Génération des chemins | Liste de params valide |
| Récupération données | Requête GROQ | Données typées correctement |
| Gestion 404 | Données manquantes | Redirection vers 404 |
5.2. Tests d’intégration
| Scénario | Dépendances | Description | Résultat attendu |
|---|---|---|---|
| Flux SSG | Sanity + Astro | Build complet | Pages générées |
| Mode preview | Middleware + Cookie | Draft affiché | Contenu draft visible |
5.3. Tests E2E
| Scénario | Parcours utilisateur | Description | Résultat attendu |
|---|---|---|---|
| Navigation | Utilisateur → Route | Accès à la page | Page affichée correctement |
6. Intégration (INTÉG)
6.1. Intégration avec les composants
| Composant | Type | Rôle | Méthode d’intégration |
|---|---|---|---|
| Layout | L2 | Structure HTML | Import et wrapper |
| Composants UI | L2 | Rendu visuel | Import et utilisation |
| getSanityClient | L2 | Données CMS | Import et appel |
| Middleware | L3 | Sécurité | Cookie/header |
6.2. Points d’attention
- Le mode de rendu (SSG/SSR) doit être configuré correctement
- Les requêtes GROQ doivent utiliser les projections explicites
- Le 404 doit être géré correctement
6.3. Vérification de cohérence
- La route fonctionne en développement et production
- Les données sont récupérées correctement
- Le mode preview fonctionne (si applicable)
- Les tests E2E passent
7. Sécurité
7.1. Mécanismes de sécurité
- ✅ Middleware Cloudflare applique les CSP
- ✅ Validation des paramètres d’URL
- ✅ Protection contre les injections XSS
7.2. Règles de sécurité
- ✅ Ne jamais exposer de données sensibles dans le HTML
- ✅ Valider tous les paramètres d’entrée
- ✅ Utiliser les en-têtes de sécurité appropriés
8. Performance et limites
8.1. Stratégie de cache
| Mode | Cache | Description |
|---|---|---|
| SSG | Statique | Généré au build, servi par CDN |
| SSR | Edge | Mis en cache par Cloudflare Edge |
| Preview | Désactivé | Contenu draft non caché |
8.2. Limitations
- ❌ SSG : régénération requise pour mise à jour
- ❌ SSR : plus lent que SSG
9. Débogage et troubleshooting
9.1. Problèmes courants
| Symptôme | Cause probable | Solution |
|---|---|---|
| Page blanche | Erreur de récupération des données | Vérifier les logs et la requête GROQ |
| 404 en production | getStaticPaths incorrect | Vérifier la génération des chemins |
| Contenu draft non visible | Cookie preview absent | Vérifier le middleware |
9.2. Commandes de debug
# Build localnpm run build
# Preview du buildnpm run preview10. Bonnes pratiques
10.1. Architecture
- ✅ Utiliser des layouts pour la cohérence
- ✅ Séparer la logique de données du rendu
- ✅ Typer toutes les données avec TypeScript
10.2. Code
- ✅ Gérer les erreurs avec try/catch
- ✅ Utiliser des composants réutilisables
- ✅ Optimiser les images et les assets
10.3. Maintenance
- ✅ Documenter les changements dans ce fichier
- ✅ Tester les modifications en local avant déploiement
11. Évolutions et roadmap
11.1. Améliorations planifiées
- [Évolution 1]
- [Évolution 2]
11.2. Limitations connues
- ❌ [Limitation 1]
- ❌ [Limitation 2]
12. Ressources liées
- Documentation Astro : Routing
- DAT L2 : §5 - Architecture et Structure du Projet
- Layouts concernés : [Liste]
- Composants utilisés : [Liste]
13. Historique des modifications
| Date | Version | Description | Auteur |
|---|---|---|---|
| YYYY-MM-DD | 1.0 | Création initiale | [Nom] |