API плагинов и система хуков
Определяйте таблицу API плагина и регистрируйте хуки для событий жизненного цикла.
«API плагинов и система хуков» — бесплатный урок Lua Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Lua Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Lua Academy содержит 4 уроков всего.
Что такое система перехватчиков?
Система перехватчиков позволяет плагинам регистрировать функции обратного вызова для определённых событий жизненного цикла приложения. Приложение вызывает все зарегистрированные перехватчики в подходящий момент.
Объект приложения
Объект приложения передаётся плагинам во время инициализации. Он предоставляет API регистрации перехватчиков.
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Регистрация перехватчиков плагином
Функция init плагина получает приложение и регистрирует перехватчики.
-- 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
}Приоритеты перехватчиков
Позвольте плагинам указывать приоритет, чтобы важные перехватчики (например, аутентификация) выполнялись раньше необязательных (например, ведения журнала).
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Возвращаемые значения перехватчиков
Некоторые перехватчики возвращают значения, изменяющие поведение. Приложение может остановить цепочку при первом возвращаемом значении, отличном от 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Отмена регистрации перехватчиков
Предоставьте метод :off(event, fn), чтобы удалять конкретный перехватчик по ссылке на функцию.
Пространства имён перехватчиков
Используйте разделённые точками имена событий для упорядочивания: "request.before", "request.after", "db.query".
Команды, предоставляемые плагинами
Помимо перехватчиков, плагины могут регистрировать именованные команды, вызываемые приложением или другими плагинами.
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Шаблон промежуточного слоя
Цепочки перехватчиков могут образовывать стек промежуточных слоёв, в котором каждый перехватчик вызывает следующий, что позволяет преобразовывать конвейеры запросов и ответов.
Изолированное тестирование плагинов
Создайте имитацию объекта приложения в тестах, чтобы проверить правильность регистрации и вызова перехватчиков плагина.
Соглашение по документации
Документируйте все доступные имена перехватчиков, их аргументы и ожидаемые возвращаемые значения. Это образует контракт плагина, на который полагаются сторонние разработчики.
Вопрос о системе перехватчиков
Для чего нужен приоритет в системе перехватчиков?
Повторение: API плагинов и система перехватчиков
Предоставьте API регистрации :on(event, fn) в объекте приложения. Вызывайте события с помощью :emit(). Добавьте приоритет для упорядоченного выполнения. Используйте имена событий с пространствами имён и документируйте контракт перехватчиков для разработчиков плагинов.
Часто задаваемые вопросы
Урок «API плагинов и система хуков» бесплатный?
Да — полный текст урока «API плагинов и система хуков» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Lua Academy, подпишись на CoddyKit PRO. Курс Lua Academy содержит 4 уроков всего.
Чему я научусь в уроке «API плагинов и система хуков»?
Определяйте таблицу API плагина и регистрируйте хуки для событий жизненного цикла. Ты практикуешь Lua Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Lua Academy?
Предыдущий опыт не требуется. Lua Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «API плагинов и система хуков»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Lua Academy?
Да. Каждый урок Lua Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Поиск и загрузка плагинов
- API плагинов и система хуков
- Изоляция выполнения плагинов
- Версионирование и управление зависимостями