Lua Academy · Oppitunti

Liitännäis-API ja hook-järjestelmä

Määrittäkää liitännäis-API-taulukko ja rekisteröikää hookit elinkaaritapahtumia varten.

Oppitunti 2/413 vaihetta

Liitännäis-API ja hook-järjestelmä on ilmainen Lua Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Lua Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Lua Academy-kurssilla on yhteensä 4 oppituntia.

Mikä on hook-järjestelmä?

Hook-järjestelmän avulla pluginit voivat rekisteröidä takaisinsoittajia tiettyihin sovelluksen elinkaaren tapahtumiin. Sovellus kutsuu kaikkia rekisteröityjä hookeja oikeaan aikaan.

Sovellusobjekti

Sovellusobjekti välitetään plugineille alustuksen aikana. Se tarjoaa hookien rekisteröinnin ohjelmointirajapinnan.

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

Plugin rekisteröi hookeja

Pluginin init-funktio vastaanottaa sovelluksen ja rekisteröi hookit.

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

Hookien prioriteetit

Sallikaa pluginien määrittää prioriteetti, jotta kriittiset hookit, kuten todennus, suoritetaan ennen valinnaisia hookeja, kuten lokitusta.

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

Hookien palautusarvot

Jotkin hookit palauttavat arvoja, jotka muuttavat toimintaa. Sovellus voi lopettaa käsittelyn ensimmäiseen palautusarvoon, joka ei ole 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

Hookien rekisteröinnin poistaminen

Tarjotkaa :off(event, fn)-metodi, jolla tietty hook voidaan poistaa funktioviitteen perusteella.

Hookien nimeämisalueet

Käyttäkää pisteillä eroteltuja tapahtumanimiä järjestämiseen: "request.before", "request.after", "db.query".

Pluginien tarjoamat komennot

Hookien lisäksi pluginit voivat rekisteröidä nimettyjä komentoja, joita sovellus tai muut pluginit voivat kutsua.

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

Middleware-malli

Hook-ketjut voivat muodostaa middleware-pinon, jossa kukin hook kutsuu seuraavaa. Näin voidaan toteuttaa pyyntöjen ja vastausten muunnosputkia.

Pluginien testaaminen erillään

Luokaa testeissä mock-sovellusobjekti ja varmistakaa, että pluginien hookit rekisteröidään ja niitä kutsutaan oikein.

Dokumentointikäytäntö

Dokumentoikaa kaikki käytettävissä olevat hookien nimet, niiden argumentit ja odotetut palautusarvot. Näin muodostuu plugin-sopimus, johon kolmannen osapuolen kehittäjät voivat luottaa.

Hook-järjestelmää koskeva kysymys

Mikä on prioriteetin tarkoitus hook-järjestelmässä?

Kertaus: pluginien ohjelmointirajapinta ja hook-järjestelmä

Tarjotkaa sovellusobjektissa rekisteröintiohjelmointirajapinta :on(event, fn). Lähettäkää tapahtumia komennolla :emit(). Lisätkää prioriteetti järjestettyä suoritusta varten. Käyttäkää nimiavaruudellisia tapahtumanimiä ja dokumentoikaa hook-sopimus pluginien kehittäjille.

Aloita maksutta

Opi Lua tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
40
Oppitunnit
159

Usein kysytyt kysymykset

Onko oppitunti ”Liitännäis-API ja hook-järjestelmä” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Lua Academy-oppimispolun 3 oppituntia, myös oppitunnin “Liitännäis-API ja hook-järjestelmä”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Lua Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Liitännäis-API ja hook-järjestelmä”?

Määrittäkää liitännäis-API-taulukko ja rekisteröikää hookit elinkaaritapahtumia varten. Harjoittelet Lua Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Lua Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Lua Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”Liitännäis-API ja hook-järjestelmä”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Lua Academy-oppitunnilla?

Kyllä. Jokainen Lua Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Liitännäisten etsiminen ja lataaminen
  2. Liitännäis-API ja hook-järjestelmä
  3. Liitännäisten suorittamisen hiekkalaatikointi
  4. Versiointi ja riippuvuuksien hallinta
← Takaisin: Lua Academy