Construire un DSL de configuration
Créez un langage de configuration déclaratif chargé par dofile() dans un bac à sable.
Construire un DSL de configuration est une leçon Lua Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Lua Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Lua Academy comprend 4 leçons au total.
Objectif : configuration déclarative
Un DSL de configuration permet aux utilisateurs d'exprimer la configuration dans un style lisible et déclaratif, tout en utilisant en arrière-plan toute la puissance de Lua (conditionnelles, boucles, fonctions).
Patron de fonction de configuration
Exposez une fonction config(tbl) qui valide et stocke la configuration. Appelez-la avec une table littérale pour obtenir une syntaxe claire.
local function config(tbl)
-- validate and store
return tbl
end
-- config.lua:
return config {
host = "localhost",
port = 8080,
debug = os.getenv("DEBUG") == "1",
}Configuration imbriquée avec des sections
Gérez des sections imbriquées pour organiser la configuration.
return config {
database = { host="db.local", port=5432 },
cache = { host="cache.local", ttl=300 },
logging = { level="INFO", file="/var/log/app.log" },
}Fonctions utilitaires dans la configuration
Autorisez l'appel de fonctions utilitaires dans la configuration pour calculer des valeurs.
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")),
}Chargement de configuration dans un bac à sable
Pour des raisons de sécurité, chargez la configuration dans un environnement restreint qui n'autorise que des fonctions utilitaires sûres.
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()
endValidation du schéma
Validez les champs obligatoires et les types après le chargement.
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"))Valeurs par défaut
Fusionnez la configuration chargée avec les valeurs par défaut afin de garantir que toutes les clés obligatoires possèdent une valeur.
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
endRemplacement par l'environnement
Autorisez les variables d'environnement à remplacer les valeurs du fichier de configuration — une fonctionnalité essentielle à la conception d'une application à douze facteurs.
Héritage de configuration
Chargez une configuration de base, puis superposez la configuration propre à l'environnement (développement, préproduction, production).
Configuration immuable
Après le chargement, figez la table de configuration avec un __newindex qui lève une erreur, afin d'empêcher toute modification accidentelle à l'exécution.
Documentation de la configuration
Utilisez des commentaires et des noms de clés structurés comme auto-documentation. Un DSL de configuration bien conçu est explicite pour les équipes DevOps.
Question sur le DSL de configuration
Pourquoi charger un fichier de configuration avec un _ENV isolé dans un bac à sable ?
Récapitulatif : créer un DSL de configuration
Exposez une fonction config(tbl). Gérez les sections imbriquées et les fonctions utilitaires. Chargez la configuration dans un environnement isolé dans un bac à sable. Validez les champs obligatoires et les types. Fournissez des valeurs par défaut et autorisez les remplacements par les variables d'environnement pour respecter les douze facteurs.
Questions Fréquemment Posées
La leçon « Construire un DSL de configuration » est-elle gratuite ?
Oui — le texte complet de « Construire un DSL de configuration » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Lua Academy, passe à CoddyKit PRO. Le cours Lua Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Construire un DSL de configuration » ?
Créez un langage de configuration déclaratif chargé par dofile() dans un bac à sable. Tu pratiques Lua Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Lua Academy ?
Aucune expérience préalable n'est requise. Lua Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « Construire un DSL de configuration » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Lua Academy ?
Oui. Chaque leçon Lua Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Principes de conception des DSL en Lua
- Surcharge des opérateurs pour maîtriser les DSL
- Construire un DSL de configuration
- Analyseur d’expressions simple