Risolvere la precedenza dei valori di configurazione
Gli errori di configurazione spesso iniziano con una domanda semplice che si rivela sorprendentemente difficile: quale valore prevale davvero?
Esegui gratis nel browser
Funziona nel tuo browser: gratis, senza registrazione, i file non escono dal tuo dispositivo.
Questa capacità confronta i valori forniti dall’impostazione predefinita dell’applicazione, da un file di configurazione, da una variabile d’ambiente e da un’opzione della riga di comando, quindi applica l’ordine di precedenza definito da Lei. Restituisce sia il valore effettivo sia la fonte che lo ha fornito, rendendo la decisione facile da esaminare, verificare e documentare. Le fonti omesse restano distinte dalle stringhe vuote fornite intenzionalmente, rappresentando correttamente il normale comportamento delle sostituzioni.
Descriva i valori senza perdere il significato dell’assenza
Inserisca i valori delle fonti nell’oggetto values usando i nomi canonici default, config_file, environment_variable e cli_flag. Una proprietà assente significa che quella fonte non ha fornito l’impostazione. La distinzione è importante perché una stringa vuota può essere una sostituzione intenzionale: per esempio, un’opzione CLI potrebbe eliminare deliberatamente un prefisso presente in un file. Il risolutore considera quindi una stringa vuota presente come un valore reale e non la salta silenziosamente. Ogni valore fornito deve essere una stringa, rispecchiando il formato grezzo comune delle variabili d’ambiente e dei parser della riga di comando ed evitando conversioni inattese tra zero, falso e testo. Lei può anche indicare il nome dell’impostazione. Non modifica la selezione; viene riportato nel risultato affinché registri e casi di test restino comprensibili quando si valutano più impostazioni. I nomi di fonte sconosciuti vengono rifiutati per individuare gli errori di battitura. Se nessuna delle quattro proprietà è presente, la risoluzione non riesce, anche quando manca la proprietà predefinita, evitando che un’impostazione assente diventi un valore inventato.
Definisca e applichi esplicitamente la precedenza
L’array precedence elenca tutte e quattro le fonti dalla priorità più alta alla più bassa. Un ordine convenzionale è opzione CLI, variabile d’ambiente, file di configurazione e valore predefinito, ma il risolutore non presume questa convenzione perché applicazioni e sistemi di distribuzione possono differire. Esamina i nomi ordinati e seleziona la prima fonte la cui proprietà esiste nell’oggetto values. La fonte restituita spiega perché il valore ha prevalso, mentre l’array di precedenza restituito conserva la politica applicata. Richiedere ogni fonte supportata esattamente una volta rende la politica completa e verificabile. Un nome duplicato o sconosciuto, una fonte mancante o una voce aggiuntiva produce un errore di input invece di un risultato parziale ambiguo. Ciò è utile quando le regole provengono da documentazione, migrazioni di framework o matrici di test: l’ordine inviato costituisce l’intera regola, non un suggerimento abbinato a impostazioni implicite. La selezione è deterministica e non effettua conversioni di tipo, interpolazioni, accessi ai file, letture dell’ambiente o analisi dei comandi. La capacità valuta solo i valori inviati da Lei, quindi lo stesso input produce sempre lo stesso output nel browser, in CI o tramite API.
Usi il risultato in test, diagnostica e documentazione
La risposta contiene effective_value, source e l’ordine di precedenza valutato. Se Lei ha fornito il nome dell’impostazione, la risposta include anche quello. Questa struttura compatta è adatta ai casi di test unitari: raccolga i valori grezzi osservati dal caricatore, invii la politica prevista e verifichi che sia il valore vincente sia la sua origine corrispondano alle attese. È utile anche per la diagnostica operativa. Uno strumento di assistenza può mostrare che un timeout deriva da una variabile d’ambiente anziché da un file versionato, senza riprodurre l’intero avvio dell’applicazione. I team della documentazione possono trasformare esempi di impostazioni sovrapposte in dimostrazioni eseguibili. Il risolutore non legge l’ambiente del processo host, non apre file e non interpreta la sintassi CLI. Chi effettua la chiamata deve raccogliere gli input e decidere se inviare segreti; quando si prova solo la precedenza, è preferibile usare segnaposto innocui. Ogni richiesta risolve un’impostazione e costa $0.002 tramite API, mentre il percorso browser di livello A usa la stessa logica pura. Senza rete, casualità, orologio o stato mutabile, richieste identiche sono stabili e facili da confrontare o memorizzare nella cache.
Casi d'uso
Verificare una sostituzione di distribuzione
Confermi se un’opzione CLI o una variabile d’ambiente prevale sul valore salvato nel file di configurazione.
Creare test per il caricatore di configurazione
Generi casi chiari che verifichino sia il valore effettivo sia la fonte responsabile.
Spiegare un’impostazione inattesa in esecuzione
Riproduca una decisione di precedenza dagli input raccolti senza leggere file né accedere all’ambiente attivo.
Domande frequenti
Quale fonte ha la precedenza più alta?
La prima fonte nell’array di precedenza. Lei definisce l’ordine completo per ogni richiesta.
Una stringa vuota conta come valore?
Sì. Una proprietà presente con una stringa vuota è un valore fornito; una proprietà omessa indica che la fonte non ha fornito nulla.
L’array di precedenza deve includere tutte le fonti?
Sì. Deve contenere default, config_file, environment_variable e cli_flag esattamente una volta ciascuno.
Che cosa accade se nessuna fonte fornisce un valore?
La richiesta restituisce un errore di input non valido. Non viene inventato alcun ripiego quando manca la proprietà predefinita.
Questa capacità legge i miei file o l’ambiente del processo?
No. Valuta soltanto i valori inclusi nella richiesta e non accede alla rete o al sistema.
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo stack
curl -X POST https://api.kit.forhosting.com/dev/config-precedence-resolve \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"values":{"default":"development","config_file":"staging","environment_variable":"production"},"precedence":["cli_flag","environment_variable","config_file","default"]}'const res = await fetch("https://api.kit.forhosting.com/dev/config-precedence-resolve", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"values": {
"default": "development",
"config_file": "staging",
"environment_variable": "production"
},
"precedence": [
"cli_flag",
"environment_variable",
"config_file",
"default"
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/config-precedence-resolve",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"values": {
"default": "development",
"config_file": "staging",
"environment_variable": "production"
},
"precedence": [
"cli_flag",
"environment_variable",
"config_file",
"default"
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/config-precedence-resolve", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"values":{"default":"development","config_file":"staging","environment_variable":"production"},"precedence":["cli_flag","environment_variable","config_file","default"]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"values":{"default":"development","config_file":"staging","environment_variable":"production"},"precedence":["cli_flag","environment_variable","config_file","default"]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/config-precedence-resolve", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Esempio di richiesta
{
"values": {
"default": "development",
"config_file": "staging",
"environment_variable": "production"
},
"precedence": [
"cli_flag",
"environment_variable",
"config_file",
"default"
]
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.config_precedence_resolve",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |