0Pricing
Lua Academy · Lección

API de plugins y sistema de hooks

Defina una tabla de API de plugins y registre hooks para eventos del ciclo de vida.

API de plugins y sistema de hooks es una lección gratuita de Lua Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Lua Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Lua Academy incluye 4 lecciones en total.

¿Qué es un sistema de hooks?

Un sistema de hooks permite que los plugins registren callbacks para eventos específicos del ciclo de vida de la aplicación. La aplicación llama a todos los hooks registrados en el momento adecuado.

El objeto de la aplicación

El objeto de la aplicación se pasa a los plugins durante la inicialización. Expone la API de registro de hooks.

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

Registro de hooks por plugins

La función init de un plugin recibe la aplicación y registra los 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
}

Prioridades de los hooks

Permita que los plugins especifiquen una prioridad para que los hooks críticos (por ejemplo, autenticación) se ejecuten antes que los opcionales (por ejemplo, registro).

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

Valores devueltos por los hooks

Algunos hooks devuelven valores que modifican el comportamiento. La aplicación puede detener el procesamiento en el primer valor distinto 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
end

Anulación del registro de hooks

Proporcione un método :off(event, fn) para eliminar un hook específico mediante la referencia a su función.

Espacios de nombres para hooks

Utilice nombres de eventos separados por puntos para organizarlos: "request.before", "request.after" y "db.query".

Comandos proporcionados por plugins

Además de hooks, los plugins pueden registrar comandos con nombre que la aplicación u otros plugins pueden invocar.

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

Patrón de middleware

Las cadenas de hooks pueden formar una pila de middleware en la que cada hook llama al siguiente, lo que permite crear canalizaciones de transformación de solicitudes y respuestas.

Pruebas aisladas de plugins

Cree un objeto de aplicación simulado en las pruebas para verificar que los hooks del plugin se registren y se llamen correctamente.

Convención de documentación

Documente todos los nombres de hooks disponibles, sus argumentos y los valores devueltos esperados. Esto constituye el contrato del plugin en el que confían los desarrolladores de terceros.

Pregunta sobre el sistema de hooks

¿Cuál es el propósito de la prioridad en un sistema de hooks?

Repaso: API de plugins y sistema de hooks

Exponga una API de registro :on(event, fn) en el objeto de la aplicación. Emita eventos con :emit(). Añada prioridades para ordenar la ejecución. Utilice nombres de eventos con espacios de nombres y documente el contrato de los hooks para los desarrolladores de plugins.

Preguntas frecuentes

¿La lección «API de plugins y sistema de hooks» es gratis?

Sí — el texto completo de «API de plugins y sistema de hooks» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Lua Academy, actualiza a CoddyKit PRO. El curso de Lua Academy incluye 4 lecciones en total.

¿Qué aprenderé en «API de plugins y sistema de hooks»?

Defina una tabla de API de plugins y registre hooks para eventos del ciclo de vida. Practicas Lua Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Lua Academy?

No se requiere experiencia previa. Lua Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «API de plugins y sistema de hooks»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Lua Academy?

Sí. Cada lección de Lua Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Detección y carga de plugins
  2. API de plugins y sistema de hooks
  3. Ejecución de plugins en sandbox
  4. Versionado y gestión de dependencias
← Volver a Lua Academy