Lua Academy · Les

Plugin-API en hooksysteem

Definieer een plugin-API-table en registreer hooks voor levenscyclusgebeurtenissen

Les 2 van 413 stappen

Plugin-API en hooksysteem is een gratis Lua Academy-les op CoddyKit. Dit is les 2 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Lua Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Lua Academy bevat in totaal 4 lessen.

Wat is een hooksysteem?

Met een hooksysteem kunnen plug-ins terugbelfuncties registreren voor specifieke gebeurtenissen in de levenscyclus van de toepassing. De app roept alle geregistreerde hooks op het juiste moment aan.

Het app-object

Het app-object wordt tijdens init aan plug-ins doorgegeven. Het biedt de API voor hookregistratie.

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
end

Hooks registreren vanuit plug-ins

De functie init van een plug-in ontvangt de app en registreert hooks.

-- 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
}

Prioriteiten van hooks

Laat plug-ins een prioriteit opgeven, zodat kritieke hooks (bijvoorbeeld voor authenticatie) vóór optionele hooks (bijvoorbeeld voor logboekregistratie) worden uitgevoerd.

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
end

Retourwaarden van hooks

Sommige hooks retourneren waarden die het gedrag wijzigen. De app kan stoppen bij de eerste retourwaarde die niet nil is.

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
end

Hooks uitschrijven

Bied een methode :off(event, fn) aan om een specifieke hook op basis van een functieverwijzing te verwijderen.

Naamruimten voor hooks

Gebruik gebeurtenisnamen met punten voor structuur: "request.before", "request.after", "db.query".

Opdrachten van plug-ins

Naast hooks kunnen plug-ins opdrachten met een naam registreren die door de app of andere plug-ins kunnen worden aangeroepen.

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)
end

Middlewarepatroon

Hookketens kunnen een middlewarestapel vormen waarin elke hook de volgende aanroept. Zo zijn transformatiepijplijnen voor verzoeken en antwoorden mogelijk.

Plug-ins geïsoleerd testen

Maak in tests een nagebootst app-object om te controleren of plug-inhooks correct worden geregistreerd en aangeroepen.

Documentatieconventie

Documenteer alle beschikbare hooknamen, hun argumenten en hun verwachte retourwaarden. Zo ontstaat het plug-incontract waarop ontwikkelaars van derden vertrouwen.

Vraag over het hooksysteem

Wat is het doel van prioriteit in een hooksysteem?

Samenvatting: plug-in-API en hooksysteem

Bied een registratie-API :on(event, fn) aan op het app-object. Verzend gebeurtenissen met :emit(). Voeg prioriteiten toe voor uitvoering in een vaste volgorde. Gebruik gebeurtenisnamen met naamruimten en documenteer het hookcontract voor ontwikkelaars van plug-ins.

Gratis beginnen

Leer Lua met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
40
Lessen
159

Veelgestelde vragen

Is de les “Plugin-API en hooksysteem” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad Lua Academy, waaronder “Plugin-API en hooksysteem”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Lua Academy bevat in totaal 4 lessen.

Wat leer ik in “Plugin-API en hooksysteem”?

Definieer een plugin-API-table en registreer hooks voor levenscyclusgebeurtenissen Je oefent met Lua Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Lua Academy te beginnen?

Ervaring vooraf is niet nodig. Lua Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.

Hoe lang duurt de les “Plugin-API en hooksysteem”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Lua Academy?

Ja. Elke les over Lua Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Plugins ontdekken en laden
  2. Plugin-API en hooksysteem
  3. Pluginuitvoering sandboxen
  4. Versiebeheer en afhankelijkheidsbeheer
← Terug naar Lua Academy