Lua Academy · leksjon

API og hook-system for programtillegg

Definer en API-tabell for programtillegg, og registrer hooks for livssyklushendelser.

Leksjon 2 av 413 trinn

API og hook-system for programtillegg er en gratis leksjon i Lua Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Lua Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Lua Academy inneholder totalt 4 leksjoner.

Hva er et hook-system?

Et hook-system gjør det mulig for plugins å registrere tilbakekallingsfunksjoner for bestemte hendelser i applikasjonens livssyklus. Appen kaller alle registrerte hooks på riktig tidspunkt.

Applikasjonsobjektet

Appobjektet sendes til plugins under initialiseringen. Det eksponerer API-et for hook-registrering.

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

Pluginen registrerer hooks

En plugins init-funksjon mottar appen og registrerer 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-prioriteter

La plugins angi en prioritet, slik at kritiske hooks (for eksempel autentisering) kjøres før valgfrie hooks (for eksempel logging).

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

Returverdier fra hooks

Noen hooks returnerer verdier som endrer oppførselen. Appen kan stoppe kjøringen ved den første returverdien som ikke er 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
end

Avregistrere hooks

Tilby en :off(event, fn)-metode for å fjerne en bestemt hook ved hjelp av en funksjonsreferanse.

Navneområder for hooks

Bruk punktseparerte hendelsesnavn for organisering: "request.before", "request.after", "db.query".

Kommandoer levert av plugins

I tillegg til hooks kan plugins registrere navngitte kommandoer som appen eller andre plugins kan kalle.

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-mønsteret

Hook-kjeder kan danne en middleware-stakk der hver hook kaller den neste, slik at det blir mulig å lage behandlingskjeder for transformering av forespørsler og svar.

Teste plugins isolert

Opprett et simulert appobjekt i testene for å kontrollere at plugin-hookene registreres og kalles riktig.

Dokumentasjonskonvensjon

Dokumenter alle tilgjengelige hook-navn, argumentene deres og forventede returverdier. Dette utgjør plugin-kontrakten som tredjepartsutviklere er avhengige av.

Spørsmål om hook-systemer

Hva er formålet med prioritet i et hook-system?

Oppsummering: Plugin-API og hook-system

Eksponer et :on(event, fn)-registrerings-API på appobjektet. Send ut hendelser med :emit(). Legg til prioritet for ordnet kjøring. Bruk hendelsesnavn med navneområder, og dokumenter hook-kontrakten for pluginutviklere.

Gratis å komme i gang

Lær deg Lua med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
40
Leksjoner
159

Ofte stilte spørsmål

Er leksjonen «API og hook-system for programtillegg» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Lua Academy, inkludert «API og hook-system for programtillegg», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Lua Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «API og hook-system for programtillegg»?

Definer en API-tabell for programtillegg, og registrer hooks for livssyklushendelser. Du øver på Lua Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Lua Academy?

Ingen tidligere erfaring er nødvendig. Lua Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.

Hvor lang tid tar leksjonen «API og hook-system for programtillegg»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Lua Academy-leksjonen?

Ja. Alle Lua Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Oppdage og laste inn programtillegg
  2. API og hook-system for programtillegg
  3. Sandkassekjøring av programtillegg
  4. Versjonering og avhengighetshåndtering
← Tilbake til Lua Academy