0Pricing
Lua Academy · Lezione

API dei plugin e sistema degli hook

Definisca una tabella API per i plugin e registri hook per gli eventi del ciclo di vita.

API dei plugin e sistema degli hook è una lezione Lua Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Lua Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Lua Academy include 4 lezioni in totale.

Che cos'è un sistema di hook?

Un sistema di hook consente ai plugin di registrare callback per specifici eventi del ciclo di vita dell'applicazione. L'applicazione chiama tutti gli hook registrati nel momento appropriato.

L'oggetto applicazione

L'oggetto app viene passato ai plugin durante l'inizializzazione. Espone l'API per la registrazione degli hook.

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

Registrazione degli hook da parte dei plugin

La funzione init di un plugin riceve l'app e registra gli hook.

-- 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à degli hook

Consenta ai plugin di specificare una priorità, così che gli hook critici (ad esempio, l'autenticazione) vengano eseguiti prima di quelli facoltativi (ad esempio, il 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

Valori restituiti dagli hook

Alcuni hook restituiscono valori che modificano il comportamento. L'app può interrompere la catena al primo valore non 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

Rimozione della registrazione degli hook

Fornisca un metodo :off(event, fn) per rimuovere un hook specifico tramite il riferimento alla funzione.

Namespace degli hook

Utilizzi nomi di eventi separati da punti per organizzarli: "request.before", "request.after", "db.query".

Comandi forniti dai plugin

Oltre agli hook, i plugin possono registrare comandi denominati che l'app o altri plugin possono chiamare.

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

Pattern middleware

Le catene di hook possono formare uno stack middleware in cui ogni hook chiama quello successivo, consentendo pipeline di trasformazione di richieste e risposte.

Test dei plugin in isolamento

Crei un oggetto app simulato nei test per verificare che gli hook del plugin siano registrati e chiamati correttamente.

Convenzione per la documentazione

Documenti tutti i nomi degli hook disponibili, i relativi argomenti e i valori restituiti previsti. In questo modo si definisce il contratto del plugin su cui fanno affidamento gli sviluppatori di terze parti.

Domanda sul sistema di hook

Qual è lo scopo della priorità in un sistema di hook?

Riepilogo: API dei plugin e sistema di hook

Esponga un'API di registrazione :on(event, fn) sull'oggetto app. Generi gli eventi con :emit(). Aggiunga una priorità per ordinare l'esecuzione. Utilizzi nomi di eventi con namespace e documenti il contratto degli hook per gli sviluppatori di plugin.

Domande Frequenti

La lezione «API dei plugin e sistema degli hook» è gratuita?

Sì — il testo completo di «API dei plugin e sistema degli hook» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Lua Academy, passa a CoddyKit PRO. Il corso Lua Academy include 4 lezioni in totale.

Cosa imparerò in «API dei plugin e sistema degli hook»?

Definisca una tabella API per i plugin e registri hook per gli eventi del ciclo di vita. Eserciti Lua Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Lua Academy?

Non è richiesta alcuna esperienza precedente. Lua Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «API dei plugin e sistema degli hook»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Lua Academy?

Sì. Ogni lezione Lua Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Individuazione e caricamento dei plugin
  2. API dei plugin e sistema degli hook
  3. Sandbox per l'esecuzione dei plugin
  4. Versionamento e gestione delle dipendenze
← Torna a Lua Academy