# Vérifier Apollo sans accès au graphe
> **En bref :**
> Ce contrôle génère le schéma GraphQL d'Apollo, l'API de lecture du graphe, et teste sa clé d'API, sans graphe ni donnée. Statut : **Confirmé** (exécution locale).

**Résultat :** code `0`, 10 contrôles sur 10, le 22 octobre 2026. Le schéma généré expose la création, la modification et la suppression de personnes et de publications, et **la clé d'API acceptée pour lire l'est aussi pour écrire**.

## Pourquoi ce contrôle

Apollo est la porte d'accès au graphe : un service tiers y lirait les données. La question décisive : **une clé donnée pour lire permet-elle aussi d'écrire ?** Les conséquences sont tenues dans [sécurité, droits et données personnelles](/03-crisalid/03-fonctionnement-transversal/securite-droits-donnees-personnelles).

## Avant de commencer

- Node, npm et un accès au registre npm ; la copie `crisalid-apollo` dans `official-crisalid`.
- **À ne pas faire :** charger `src/index.ts` (il démarre le serveur), lancer la suite de tests amont, ou viser un graphe existant.

## Étapes

### Étape 1 — Installer les dépendances et lancer le contrôle

**Pourquoi :** générer le schéma avec la vraie bibliothèque, dans un dossier isolé.

```bash
runtime=$(mktemp -d)
npm install --prefix "$runtime" --ignore-scripts --no-audit --no-fund --no-save \
  @neo4j/graphql@6.6.4 graphql@16.13.0 typescript@5.7.2 neo4j-driver@5.28.3
node scripts/check-crisalid-apollo-contract.mjs --runtime "$runtime"
```

### Étape 2 — Savoir ce qui est exécuté

**Pourquoi :** distinguer ce qui tourne réellement de ce qui reste hors périmètre.

- **Schéma** : la définition d'Apollo est générée par la vraie bibliothèque, sans connexion au graphe.
- **Opérations** : une lecture et une création sont validées contre ce schéma, sans être exécutées.
- **Clé** : la fonction de contrôle d'accès d'Apollo est extraite et exécutée sur des requêtes fictives.

### Étape 3 — Lire le rapport

**Pourquoi :** le code `0` confirme des comportements, pas une API sûre.

Le rapport donne les dix contrôles, les versions et l'empreinte du schéma. Un avertissement de dépréciation de la bibliothèque n'est pas un échec.

## Ce que le contrôle établit

- Sans clé, ou avec une mauvaise clé, la requête est refusée ; sans clé configurée, tout est refusé.
- Avec une clé valide, lecture et écriture passent de la même façon : il n'existe pas de clé « lecture seule ».
- Un réglage de configuration permet de désactiver tout contrôle de clé ; il faut donc le vérifier sur chaque déploiement.

## Limites

- Aucun serveur ni graphe : ni HTTP, ni droits du compte Neo4j, ni limites de requête.
- La suite de tests amont efface tout le graphe : uniquement sur un graphe jetable.
- Pour interroger Apollo dans une pile isolée : [vérifier le graphe et l'API](/03-crisalid/04-tutoriels/01-parcours/verifier-le-graphe-et-api).

## Et ensuite

C'était le dernier contrôle. Retour à la [synthèse des résultats](/03-crisalid/04-tutoriels/00-par-ou-commencer#les-huit-contrôles-et-leurs-résultats).

Révision lue : `crisalid-apollo` `d377579a`.
