0Pricing
Lua Academy · Aula

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
end

Registro 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
end

Valores 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
end

Cancelamento 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)
end

Padrã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

  1. Descoberta e carregamento de plugins
  2. API de plugins e sistema de hooks
  3. Execução isolada de plugins
  4. Versionamento e gerenciamento de dependências
← Voltar para Lua Academy