API de modules d’extension et système de hooks
Définissez une table d’API pour les modules d’extension et enregistrez des hooks pour les événements du cycle de vie.
API de modules d’extension et système de hooks est une leçon Lua Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Lua Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Lua Academy comprend 4 leçons au total.
Qu’est-ce qu’un système de points d’accroche ?
Un système de points d’accroche permet aux plug-ins d’enregistrer des fonctions de rappel pour des événements précis du cycle de vie de l’application. L’application appelle tous les points d’accroche enregistrés au moment approprié.
L’objet application
L’objet application est transmis aux plug-ins lors de l’initialisation. Il expose l’API d’enregistrement des points d’accroche.
local App = {}
App.__index = App
App._hooks = {}
function App:on(event, fn)
self._hooks[event] = self._hooks[event] or {}
table.insert(self._hooks[event], fn)
end
function App:emit(event, ...)
for _, fn in ipairs(self._hooks[event] or {}) do
fn(...)
end
endEnregistrement de points d’accroche par les plug-ins
La fonction init d’un plug-in reçoit l’application et enregistre des points d’accroche.
-- plugins/auth.lua
return {
name = "auth",
init = function(app)
app:on("request", function(req)
if not req.headers.token then
error("Unauthorized")
end
end)
end
}Priorités des points d’accroche
Permettez aux plug-ins de spécifier une priorité afin que les points d’accroche critiques (par exemple, l’authentification) s’exécutent avant les points d’accroche facultatifs (par exemple, la journalisation).
function App:on(event, fn, priority)
priority = priority or 50
local hooks = self._hooks[event] or {}
hooks[#hooks+1] = {fn=fn, priority=priority}
table.sort(hooks, function(a,b) return a.priority < b.priority end)
self._hooks[event] = hooks
endValeurs de retour des points d’accroche
Certains points d’accroche renvoient des valeurs qui modifient le comportement. L’application peut s’arrêter dès la première valeur de retour différente de nil.
function App:filter(event, data)
for _, fn in ipairs(self._hooks[event] or {}) do
local result = fn(data)
if result ~= nil then return result end
end
return data
endDésenregistrement des points d’accroche
Fournissez une méthode :off(event, fn) pour supprimer un point d’accroche précis à partir de sa référence de fonction.
Espaces de noms des points d’accroche
Utilisez des noms d’événements séparés par des points pour organiser les événements : "request.before", "request.after", "db.query".
Commandes fournies par les plug-ins
En plus des points d’accroche, les plug-ins peuvent enregistrer des commandes nommées appelables par l’application ou par d’autres plug-ins.
function App:registerCommand(name, fn)
self._commands = self._commands or {}
self._commands[name] = fn
end
function App:run(name, ...)
local cmd = self._commands[name]
if cmd then return cmd(...) end
error("Unknown command: " .. name)
endModèle intergiciel
Les chaînes de points d’accroche peuvent former une pile intergicielle dans laquelle chaque point d’accroche appelle le suivant, ce qui permet de transformer les requêtes et les réponses au moyen de chaînes de traitement.
Tester les plug-ins isolément
Créez un objet application simulé dans les tests afin de vérifier que les points d’accroche des plug-ins sont correctement enregistrés et appelés.
Convention de documentation
Documentez tous les noms de points d’accroche disponibles, leurs arguments et leurs valeurs de retour attendues. Cela constitue le contrat du plug-in sur lequel comptent les développeurs tiers.
Question sur le système de points d’accroche
Quel est le rôle de la priorité dans un système de points d’accroche ?
Récapitulatif : API des plug-ins et système de points d’accroche
Exposez une API d’enregistrement :on(event, fn) sur l’objet application. Émettez des événements avec :emit(). Ajoutez une priorité pour exécuter les points d’accroche dans un ordre déterminé. Utilisez des noms d’événements avec espaces de noms et documentez le contrat des points d’accroche pour les développeurs de plug-ins.
Questions Fréquemment Posées
La leçon « API de modules d’extension et système de hooks » est-elle gratuite ?
Oui — le texte complet de « API de modules d’extension et système de hooks » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Lua Academy, passe à CoddyKit PRO. Le cours Lua Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « API de modules d’extension et système de hooks » ?
Définissez une table d’API pour les modules d’extension et enregistrez des hooks pour les événements du cycle de vie. Tu pratiques Lua Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Lua Academy ?
Aucune expérience préalable n'est requise. Lua Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.
Combien de temps prend la leçon « API de modules d’extension et système de hooks » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Lua Academy ?
Oui. Chaque leçon Lua Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Découverte et chargement de modules d’extension
- API de modules d’extension et système de hooks
- Mettre les modules d’extension en bac à sable
- Gestion des versions et des dépendances