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
endRejestrowanie 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
endWartoś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
endWyrejestrowywanie 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)
endWzorzec 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
- Wyszukiwanie i ładowanie pluginów
- API pluginów i system hooków
- Sandboxowanie wykonywania pluginów
- Wersjonowanie i zarządzanie zależnościami