API de plugins e sistema de hooks
Defina uma tabela de API de plugins e registre hooks para eventos do ciclo de vida.
API de plugins e sistema de hooks é uma aula grátis de Lua Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Lua Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Lua Academy inclui 4 aulas no total.
O que é um sistema de ganchos?
Um sistema de ganchos permite que extensões registrem funções de retorno para eventos específicos do ciclo de vida do aplicativo. O aplicativo chama todos os ganchos registrados no momento apropriado.
O objeto do aplicativo
O objeto do aplicativo é passado às extensões durante init. Ele expõe a API de registro de ganchos.
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
endRegistro de ganchos por extensões
A função init de uma extensão recebe o aplicativo e registra os ganchos.
-- 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 dos ganchos
Permita que as extensões especifiquem uma prioridade para que ganchos críticos (por exemplo, autenticação) sejam executados antes dos opcionais (por exemplo, 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
endValores de retorno dos ganchos
Alguns ganchos retornam valores que modificam o comportamento. O aplicativo pode interromper a execução no primeiro retorno diferente 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
endCancelamento do registro de ganchos
Forneça um método :off(event, fn) para remover um gancho específico por referência à função.
Organização de nomes de ganchos
Use nomes de eventos separados por pontos para organização: "request.before", "request.after", "db.query".
Comandos fornecidos por extensões
Além dos ganchos, as extensões podem registrar comandos nomeados que podem ser chamados pelo aplicativo ou por outras extensões.
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)
endPadrão de intermediação
As cadeias de ganchos podem formar uma pilha de intermediação na qual cada gancho chama o próximo, permitindo fluxos de transformação de requisições/respostas.
Testando extensões isoladamente
Crie um objeto simulado do aplicativo nos testes para verificar se os ganchos da extensão são registrados e chamados corretamente.
Convenção de documentação
Documente todos os nomes de ganchos disponíveis, seus argumentos e os valores de retorno esperados. Isso forma o contrato das extensões do qual os desenvolvedores de terceiros dependem.
Pergunta sobre o sistema de ganchos
Qual é a finalidade da prioridade em um sistema de ganchos?
Recapitulação: API de extensões e sistema de ganchos
Exponha uma API de registro :on(event, fn) no objeto do aplicativo. Dispare eventos com :emit(). Adicione prioridade para permitir a execução ordenada. Use nomes de eventos organizados por espaço de nomes e documente o contrato dos ganchos para os desenvolvedores de extensões.
Perguntas Frequentes
A aula “API de plugins e sistema de hooks” é grátis?
Sim — o texto completo de “API de plugins e sistema de hooks” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Lua Academy, atualize para CoddyKit PRO. O curso de Lua Academy inclui 4 aulas no total.
O que vou aprender em “API de plugins e sistema de hooks”?
Defina uma tabela de API de plugins e registre hooks para eventos do ciclo de vida. Você pratica Lua Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Lua Academy?
Nenhuma experiência prévia é necessária. Lua Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “API de plugins e sistema de hooks”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Lua Academy?
Sim. Cada aula de Lua Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Descoberta e carregamento de plugins
- API de plugins e sistema de hooks
- Execução isolada de plugins
- Versionamento e gerenciamento de dependências