0Pricing
Lua Academy · Lekcja

Tworzenie DSL konfiguracji

Proszę utworzyć deklaratywny język konfiguracji ładowany za pomocą dofile() w sandboxie.

Tworzenie DSL konfiguracji to bezpłatna lekcja Lua Academy na CoddyKit. To lekcja 3 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.

Cel: deklaratywna konfiguracja

DSL konfiguracji pozwala użytkownikom wyrażać konfigurację w czytelnym, deklaratywnym stylu, jednocześnie korzystając w tle z pełnych możliwości Lua, takich jak instrukcje warunkowe, pętle i funkcje.

Wzorzec funkcji konfiguracji

Należy udostępnić funkcję config(tbl), która weryfikuje i przechowuje konfigurację. Należy wywoływać ją z literałem tabeli, aby uzyskać przejrzystą składnię.

local function config(tbl)
  -- validate and store
  return tbl
end
-- config.lua:
return config {
  host = "localhost",
  port = 8080,
  debug = os.getenv("DEBUG") == "1",
}

Zagnieżdżona konfiguracja z sekcjami

Należy obsługiwać zagnieżdżone sekcje, aby uporządkować konfigurację.

return config {
  database = { host="db.local", port=5432 },
  cache    = { host="cache.local", ttl=300 },
  logging  = { level="INFO", file="/var/log/app.log" },
}

Funkcje pomocnicze w konfiguracji

Należy zezwolić na wywoływanie funkcji pomocniczych w konfiguracji w celu obliczania wartości.

local function env(name, default)
  return os.getenv(name) or default
end
return config {
  host  = env("DB_HOST", "localhost"),
  port  = tonumber(env("DB_PORT", "5432")),
}

Ładowanie konfiguracji w piaskownicy

Ze względów bezpieczeństwa konfigurację należy ładować w ograniczonym środowisku, które udostępnia tylko bezpieczne funkcje pomocnicze.

local function loadConfig(path)
  local safeEnv = {
    config = config,
    env    = env,
    math   = math,
    table  = table,
  }
  local fn, err = loadfile(path, "t", safeEnv)
  if not fn then error(err) end
  return fn()
end

Walidacja schematu

Po załadowaniu należy zweryfikować wymagane pola i ich typy.

local function validate(cfg)
  assert(type(cfg.host) == "string", "host must be string")
  assert(type(cfg.port) == "number", "port must be number")
  assert(cfg.port > 0 and cfg.port < 65536, "port out of range")
end
validate(loadConfig("config.lua"))

Wartości domyślne

Załadowaną konfigurację należy połączyć z wartościami domyślnymi, aby zapewnić wartości dla wszystkich wymaganych kluczy.

local defaults = {host="localhost", port=8080, debug=false}
local function loadWithDefaults(path)
  local cfg = loadConfig(path)
  for k, v in pairs(defaults) do
    if cfg[k] == nil then cfg[k] = v end
  end
  return cfg
end

Nadpisywanie przez środowisko

Należy zezwolić zmiennym środowiskowym na nadpisywanie wartości z pliku konfiguracji — jest to niezbędne przy projektowaniu aplikacji zgodnie z zasadami 12-factor.

Dziedziczenie konfiguracji

Należy załadować konfigurację bazową, a następnie nałożyć na nią konfigurację właściwą dla środowiska, takiego jak development, staging lub production.

Niezmienna konfiguracja

Po załadowaniu należy zamrozić tabelę konfiguracji za pomocą __newindex, które zgłasza błąd i zapobiega przypadkowym zmianom w czasie działania programu.

Dokumentacja w konfiguracji

Należy używać komentarzy i uporządkowanych nazw kluczy, aby konfiguracja dokumentowała się sama. Dobrze zaprojektowany DSL konfiguracji jest zrozumiały bez dodatkowych wyjaśnień dla zespołów DevOps.

Pytanie o DSL konfiguracji

Dlaczego plik konfiguracji należy ładować z użyciem izolowanego _ENV?

Podsumowanie: budowanie DSL konfiguracji

Należy udostępnić funkcję config(tbl). Należy obsługiwać zagnieżdżone sekcje i funkcje pomocnicze. Konfigurację należy ładować w izolowanym środowisku. Należy weryfikować wymagane pola i typy. Należy udostępniać wartości domyślne i zezwalać zmiennym środowiskowym na nadpisywanie wartości, aby zachować zgodność z zasadami 12-factor.

Często zadawane pytania

Czy lekcja „Tworzenie DSL konfiguracji” jest bezpłatna?

Tak — pełny tekst „Tworzenie DSL konfiguracji” 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 „Tworzenie DSL konfiguracji”?

Proszę utworzyć deklaratywny język konfiguracji ładowany za pomocą dofile() w sandboxie. Ć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 3 z 4.

Ile czasu zajmuje lekcja „Tworzenie DSL konfiguracji”?

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. Zasady projektowania DSL w Lua
  2. Przeciążanie operatorów na potrzeby płynnego DSL
  3. Tworzenie DSL konfiguracji
  4. Prosty parser wyrażeń
← Powrót do Lua Academy