0Pricing
Lua Academy · Lekcja

API pluginów i system hooków

Proszę definiować tabelę API pluginu i rejestrować hooki dla zdarzeń cyklu życia.

API pluginów i system hooków to bezpłatna lekcja Lua Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Lua Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Lua Academy zawiera 4 lekcji w sumie.

Czym jest system hooków?

System hooków umożliwia wtyczkom rejestrowanie funkcji zwrotnych dla określonych zdarzeń cyklu życia aplikacji. Aplikacja wywołuje wszystkie zarejestrowane hooki w odpowiednim momencie.

Obiekt aplikacji

Obiekt aplikacji jest przekazywany wtyczkom podczas inicjalizacji. Udostępnia interfejs API do rejestrowania hooków.

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

Rejestrowanie hooków przez wtyczkę

Funkcja init wtyczki otrzymuje aplikację i rejestruje hooki.

-- 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
}

Priorytety hooków

Należy umożliwić wtyczkom określanie priorytetu, aby krytyczne hooki, na przykład uwierzytelnianie, były wykonywane przed opcjonalnymi, na przykład rejestrowaniem.

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

Wartości zwracane przez hooki

Niektóre hooki zwracają wartości modyfikujące działanie. Aplikacja może przerwać dalsze przetwarzanie po pierwszej wartości różnej od 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

Wyrejestrowywanie hooków

Należy udostępnić metodę :off(event, fn) usuwającą konkretny hook na podstawie referencji do funkcji.

Przestrzenie nazw hooków

Do uporządkowania zdarzeń należy używać nazw rozdzielanych kropkami: "request.before", "request.after", "db.query".

Polecenia udostępniane przez wtyczki

Oprócz hooków wtyczki mogą rejestrować nazwane polecenia wywoływane przez aplikację lub inne wtyczki.

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

Wzorzec middleware

Łańcuchy hooków mogą tworzyć stos middleware, w którym każdy hook wywołuje następny, umożliwiając tworzenie potoków transformacji żądań i odpowiedzi.

Testowanie wtyczek w izolacji

W testach należy utworzyć obiekt aplikacji będący atrapą, aby sprawdzić, czy hooki wtyczki są prawidłowo rejestrowane i wywoływane.

Konwencja dokumentowania

Należy udokumentować wszystkie dostępne nazwy hooków, ich argumenty i oczekiwane wartości zwracane. Tworzy to kontrakt wtyczki, na którym polegają jej twórcy zewnętrzni.

Pytanie o system hooków

Jaki jest cel priorytetu w systemie hooków?

Podsumowanie: API wtyczek i system hooków

Należy udostępnić w obiekcie aplikacji interfejs API rejestracji :on(event, fn). Zdarzenia należy emitować za pomocą :emit(). Należy dodać priorytet, aby uporządkować wykonywanie. Należy używać nazw zdarzeń z przestrzeniami nazw i dokumentować kontrakt hooków dla twórców wtyczek.

Często zadawane pytania

Czy lekcja „API pluginów i system hooków” jest bezpłatna?

Tak — pełny tekst „API pluginów i system hooków” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Lua Academy, przejdź na CoddyKit PRO. Kurs Lua Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „API pluginów i system hooków”?

Proszę definiować tabelę API pluginu i rejestrować hooki dla zdarzeń cyklu życia. Ćwiczysz Lua Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Lua Academy?

Nie wymagamy żadnego doświadczenia. Lua Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „API pluginów i system hooków”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Lua Academy?

Tak. Każda lekcja Lua Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Wyszukiwanie i ładowanie pluginów
  2. API pluginów i system hooków
  3. Sandboxowanie wykonywania pluginów
  4. Wersjonowanie i zarządzanie zależnościami
← Powrót do Lua Academy