0Pricing
Lua Academy · Lektion

Plugin-API und Hook-System

Definieren Sie eine Plugin-API-Tabelle und registrieren Sie Hooks für Lebenszyklusereignisse

Plugin-API und Hook-System ist eine kostenlose Lua Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Lua Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.

Was ist ein Hook-System?

Ein Hook-System ermöglicht es Plugins, Callbacks für bestimmte Ereignisse im Lebenszyklus der Anwendung zu registrieren. Die Anwendung ruft alle registrierten Hooks zum passenden Zeitpunkt auf.

Das Anwendungsobjekt

Das App-Objekt wird Plugins während der Initialisierung übergeben. Es stellt die API zur Registrierung von Hooks bereit.

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

Registrieren von Hooks durch Plugins

Die init-Funktion eines Plugins empfängt die App und registriert 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
}

Hook-Prioritäten

Ermöglichen Sie Plugins, eine Priorität anzugeben, damit kritische Hooks (z. B. für die Authentifizierung) vor optionalen Hooks (z. B. für die Protokollierung) ausgeführt werden.

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

Rückgabewerte von Hooks

Einige Hooks geben Werte zurück, die das Verhalten verändern. Die App kann beim ersten Rückgabewert ungleich nil die weitere Verarbeitung abbrechen.

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

Aufheben der Hook-Registrierung

Stellen Sie eine :off(event, fn)-Methode bereit, um einen bestimmten Hook anhand seiner Funktionsreferenz zu entfernen.

Namensräume für Hooks

Verwenden Sie durch Punkte getrennte Ereignisnamen zur Organisation: "request.before", "request.after", "db.query".

Von Plugins bereitgestellte Befehle

Über Hooks hinaus können Plugins benannte Befehle registrieren, die von der App oder anderen Plugins aufgerufen werden können.

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

Middleware-Muster

Hook-Ketten können einen Middleware-Stack bilden, in dem jeder Hook den nächsten aufruft. Dadurch werden Pipelines zur Transformation von Anfragen und Antworten ermöglicht.

Plugins isoliert testen

Erstellen Sie in Tests ein simuliertes App-Objekt, um zu überprüfen, ob die Hooks eines Plugins korrekt registriert und aufgerufen werden.

Dokumentationskonvention

Dokumentieren Sie alle verfügbaren Hook-Namen, ihre Argumente und die erwarteten Rückgabewerte. Dies bildet den Plugin-Vertrag, auf den Entwickler von Drittanbieter-Plugins angewiesen sind.

Frage zum Hook-System

Welchen Zweck hat die Priorität in einem Hook-System?

Zusammenfassung: Plugin-API und Hook-System

Stellen Sie eine Registrierungs-API :on(event, fn) am App-Objekt bereit. Lösen Sie Ereignisse mit :emit() aus. Fügen Sie Prioritäten für eine geordnete Ausführung hinzu. Verwenden Sie Ereignisnamen mit Namensräumen und dokumentieren Sie den Hook-Vertrag für Plugin-Entwickler.

Häufig gestellte Fragen

Ist die Lektion „Plugin-API und Hook-System“ kostenlos?

Ja — der vollständige Text von „Plugin-API und Hook-System“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Lua Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Plugin-API und Hook-System“?

Definieren Sie eine Plugin-API-Tabelle und registrieren Sie Hooks für Lebenszyklusereignisse Du übst Lua Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Lua Academy zu starten?

Keine Vorkenntnisse erforderlich. Lua Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Plugin-API und Hook-System“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Lua Academy-Lektion Code schreiben und ausführen?

Ja. Jede Lua Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Plugins erkennen und laden
  2. Plugin-API und Hook-System
  3. Plugin-Ausführung in einer Sandbox
  4. Versions- und Abhängigkeitsverwaltung
← Zurück zu Lua Academy