0Pricing
Lua Academy · Урок

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 — локальная установка не требуется.

Все уроки этого курса

  1. Поиск и загрузка плагинов
  2. API плагинов и система хуков
  3. Изоляция выполнения плагинов
  4. Версионирование и управление зависимостями
← Назад к Lua Academy