Quiz 4 — Web services & LTI
⏱️ TL;DR — 20 questions sur l’API externe et l’intégration LTI (Parties 9–10). Réponds de tête, puis déplie.
1. Quelles sont les 3 méthodes d’une external function ?
Réponse
execute_parameters() (types d’entrée), execute() (logique), execute_returns() (type de sortie). Le contrat typé de l’endpoint, dans classes/external/.
2. À quoi sert execute_parameters() ?
Réponse
À typer et valider les entrées avant ton code (external_value(PARAM_INT, …)). Comme un schéma zod : entrée invalide → rejet automatique.
3. Pourquoi validate_context + require_capability dans execute() ?
Réponse
Parce que les web services contournent l’UI mais pas les permissions. On reproduit les vérifications de contexte et de capability, sinon fuite de données. Point critique.
4. Que fait db/services.php ?
Réponse
Il déclare la fonction (nom public frankenstyle, classe/méthode, type read/write, capability requise). Sans cette déclaration, la fonction n’existe pas pour l’API.
5. Qu’est-ce qu’un token et où doit-il vivre ?
Réponse
Une clé d’authentification portant les droits d’un compte de service. Il doit rester côté serveur (jamais dans le navigateur) et suivre le moindre privilège.
6. Comment active-t-on l’accès REST ?
Réponse
Administration → Serveur → Web services : activer le protocole REST, créer un service externe, y ajouter des fonctions, créer un token. L’assistant « Vue d’ensemble » déroule tout.
7. À quoi sert moodlewsrestformat=json ?
Réponse
À demander une réponse JSON (plutôt que XML) sur webservice/rest/server.php. Avec wstoken et wsfunction, c’est le trio minimal d’un appel REST.
8. Que représente external_multiple_structure ?
Réponse
Une liste typée (souvent d’objets external_single_structure). Le cas le plus courant : renvoyer une liste de cours, de participants… Moodle valide chaque élément.
9. Qu’utilise l’application mobile Moodle pour communiquer ?
Réponse
Les web services (un service prédéfini). C’est la même porte d’intégration que ton front Next.js headless — d’où l’importance de bien concevoir ses external functions.
10. Ajax interne vs web service externe : quel point commun ?
Réponse
Les mêmes external functions servent l’Ajax interne (via core/ajax, avec la session) et les WS externes (avec token). Une fonction bien faite sert les deux mondes.
11. En LTI, qui est la « plateforme » et qui est l’« outil » ?
Réponse
La plateforme (le LMS, ici Moodle) lance un outil externe (ex. QuizLab). L’outil s’affiche intégré, connaît le contexte et peut renvoyer une note.
12. Différence entre mod_lti et enrol/lti ?
Réponse
mod_lti = Moodle consomme un outil externe (plateforme). enrol/lti = Moodle publie une activité comme outil pour un autre LMS (Moodle = outil). Le protocole est symétrique.
13. Sur quel protocole repose un launch LTI 1.3 ?
Réponse
Sur OIDC + JWT (OAuth2). Le launch envoie un id_token (JWT signé) portant identité et contexte, que l’outil doit valider.
14. Que doit vérifier l’outil sur le JWT de launch ?
Réponse
La signature (via JWKS de la plateforme), iss, aud, exp, le nonce (anti-rejeu) et le deployment_id. Sauter une vérification = faille exploitable.
15. À quoi sert AGS ?
Réponse
Assignment & Grade Services : l’outil crée une line item et renvoie le score dans le carnet de notes du LMS (grade passback), via un appel REST authentifié.
16. Qu’est-ce que le Deep Linking ?
Réponse
Un flux où l’enseignant, depuis le LMS, ouvre l’outil pour choisir/configurer un contenu (ex. un quiz précis) qui revient s’insérer comme activité.
17. À quoi sert NRPS ?
Réponse
Names and Role Provisioning Services : l’outil récupère la liste des inscrits et leurs rôles — pour un tableau de bord enseignant. Le 3e service de LTI Advantage.
18. Que sont JWKS, client id et deployment id ?
Réponse
JWKS = les clés publiques pour vérifier les signatures ; client id identifie l’outil auprès de la plateforme ; deployment id identifie un déploiement précis. Socle de confiance du launch.
19. Pourquoi le token/secret doit-il rester côté serveur ?
Réponse
Parce qu’il porte des droits : exposé au navigateur, il serait volé. Tous les appels (WS ou AGS) passent par le serveur (Next.js), jamais depuis le bundle client.
20. Pourquoi un outil LTI multi-tenant est-il un « produit » ?
Réponse
Parce que le même outil (config par plateforme) sert N LMS compatibles (Moodle A, B, Canvas…) : 1 outil, N clients. C’est la portabilité qui en fait un micro-SaaS revendable (Partie 13).
Quiz suivant : Quiz 5 — Expert & carrière.