Quiz 4 — API, temps réel, interop
1. Que génère #[ApiResource] sur une entité ?
Réponse
Une API REST complète (CRUD, pagination, validation, doc OpenAPI) — automatiquement.
2. À quoi servent les groupes de sérialisation ?
Réponse
Contrôler les champs exposés en sortie (normalizationContext) et acceptés en entrée (denormalizationContext).
3. Quel danger avec #[ApiResource] sans groupes ?
Réponse
Over-exposure : exposer/laisser modifier tous les champs (hash, rôles) → fuite + mass assignment.
4. Que renvoie l’API sur une entrée invalide, et selon quel standard ?
Réponse
Un 422 avec les violations, au format RFC 7807 (application/problem+json).
5. Comment sécuriser une opération API avec un voter ?
Réponse
security: "is_granted('X', object)" sur l’opération.
6. Comment un utilisateur ne voit-il que ses ressources en collection ?
Réponse
Une extension de collection Doctrine (filtre SQL), pas un voter par item.
7. Pourquoi le CORS est-il nécessaire entre Next.js et l’API ?
Réponse
Origines différentes → le navigateur bloque sauf autorisation explicite (NelmioCors).
8. Comment obtenir des types TS alignés sur l’API ?
Réponse
Les générer depuis la spec OpenAPI (openapi-typescript).
9. Comment lit-on l’API dans un Server Component Next.js ?
Réponse
Un fetch côté serveur (Bearer depuis le cookie) avec next: { revalidate, tags }.
10. Comment rafraîchir les données après une mutation (Next.js) ?
Réponse
revalidateTag(...) (ou revalidatePath) dans la Server Action.
11. Que transporte-t-on dans un message Messenger async ?
Réponse
Des ids (pas des entités) ; le handler recharge l’entité fraîche.
12. Comment traite-t-on les messages async ?
Réponse
Un worker (messenger:consume), supervisé en production.
13. Pourquoi un handler doit-il être idempotent ?
Réponse
Un message peut être rejoué ; sinon double effet (crucial pour les paiements).
14. Où le Scheduler planifie-t-il les tâches ?
Réponse
Dans l’application (versionné/testable), via Messenger — pas dans le cron de l’OS.
15. Quel protocole Mercure utilise-t-il, et via quoi côté client ?
Réponse
SSE ; côté client, l’API EventSource.
16. Qu’est-ce qui confirme réellement un paiement Stripe ?
Réponse
Le webhook signé (checkout.session.completed), pas la redirection de succès.
17. Vérification indispensable sur un webhook ?
Réponse
La signature (constructEvent + secret) — sinon on accepte de faux événements.
18. Pourquoi ne pas se fier au code HTTP avec Moodle Web Services ?
Réponse
Moodle renvoie souvent 200 même en cas d’échec ; l’erreur est dans le corps.
19. Sur quels standards repose LTI 1.3 ?
Réponse
OIDC + JWT signés (JWKS). On utilise une bibliothèque (pas de crypto maison).
20. Quel service LTI renvoie une note dans Moodle ?
Réponse
AGS (Assignment and Grade Services).
Quiz suivant : Quiz 5 — Expert & carrière.