Resolver la precedencia de valores de configuración
Los errores de configuración suelen empezar con una pregunta sencilla que resulta difícil: ¿qué valor prevalece realmente?
Ejecutar — gratis
Corre en su navegador. Gratis y sin límite: sus datos no salen de esta página.
Esta capacidad compara los valores aportados por el valor predeterminado de una aplicación, un archivo de configuración, una variable de entorno y una opción de línea de comandos, y aplica el orden de precedencia que usted defina. Devuelve tanto el valor efectivo como la fuente que lo proporcionó, para que la decisión sea fácil de revisar, probar y documentar. Las fuentes omitidas se distinguen de las cadenas vacías proporcionadas deliberadamente, por lo que el comportamiento habitual de las sobrescrituras se representa con precisión.
Describa los valores sin perder la semántica de ausencia
Introduzca los valores de origen en el objeto values con los nombres canónicos default, config_file, environment_variable y cli_flag. Una propiedad ausente indica que esa fuente no proporcionó el ajuste. Esta distinción es importante porque una cadena vacía puede ser una sobrescritura intencionada: por ejemplo, una opción de CLI podría borrar deliberadamente un prefijo existente en un archivo. Por ello, el solucionador trata una cadena vacía presente como un valor real y no la omite silenciosamente. Cada valor debe ser una cadena, como ocurre normalmente con las variables de entorno y los analizadores de línea de comandos, y así se evitan conversiones inesperadas entre cero, falso y valores textuales. También puede indicar el nombre del ajuste. No modifica la selección; se reproduce en el resultado para que los registros y casos de prueba sean comprensibles al evaluar varios ajustes. Los nombres de fuente desconocidos se rechazan para detectar errores ortográficos. Si ninguna de las cuatro propiedades está presente, la resolución falla, también cuando falta la propiedad predeterminada.
Defina y aplique la precedencia de forma explícita
La matriz precedence enumera las cuatro fuentes desde la prioridad más alta hasta la más baja. Un orden convencional es opción de CLI, variable de entorno, archivo de configuración y valor predeterminado, pero el solucionador no presupone esa convención porque las aplicaciones y los sistemas de despliegue difieren. Examina los nombres ordenados y selecciona la primera fuente cuya propiedad existe en el objeto values. La fuente devuelta explica por qué ganó ese valor, mientras que la matriz de precedencia devuelta conserva la política aplicada. Exigir cada fuente compatible exactamente una vez hace que la política sea completa y auditable. Un nombre duplicado o desconocido, una fuente ausente o una entrada adicional generan un error de entrada en lugar de un resultado parcial ambiguo. Esto resulta útil cuando las reglas proceden de documentación, migraciones de marcos o matrices de pruebas: el orden enviado constituye toda la regla, no una sugerencia combinada con valores implícitos. La selección es determinista y no convierte tipos, interpola, accede a archivos, consulta el entorno ni analiza comandos. Solo evalúa los valores que usted envía, por lo que una misma entrada siempre genera la misma salida en el navegador, CI o API.
Use el resultado en pruebas, diagnósticos y documentación
La respuesta contiene effective_value, source y el orden de precedencia evaluado. Si usted proporcionó un nombre de ajuste, la respuesta también lo incluye. Esta estructura compacta funciona bien en casos de pruebas unitarias: reúna los valores sin procesar observados por su cargador, envíe la política prevista y compruebe que tanto el valor ganador como su origen coincidan con lo esperado. También facilita los diagnósticos operativos. Una herramienta de soporte puede mostrar que un tiempo de espera procede de una variable de entorno y no de un archivo versionado, sin reproducir todo el inicio de la aplicación. Los equipos de documentación pueden convertir ejemplos de ajustes por capas en demostraciones ejecutables. El solucionador no lee el entorno del proceso anfitrión, no abre archivos ni interpreta la sintaxis de CLI. Quien llama debe recopilar las entradas y decidir si conviene enviar secretos; use normalmente marcadores inocuos para probar solo la precedencia. Cada solicitud resuelve un ajuste y cuesta $0.002 mediante la API, mientras que la ruta de navegador de nivel A utiliza la misma lógica pura. Sin red, azar, reloj ni estado mutable, las solicitudes idénticas son estables y fáciles de comparar o almacenar en caché.
Qué puede hacer con ella
Verificar una sobrescritura de despliegue
Confirme si una opción de CLI o una variable de entorno prevalece sobre el valor guardado en un archivo de configuración.
Crear pruebas del cargador de configuración
Genere casos claros que comprueben tanto el valor efectivo como la fuente responsable.
Explicar un ajuste inesperado en ejecución
Reproduzca una decisión de precedencia con entradas recopiladas sin leer archivos ni acceder al entorno activo.
Preguntas frecuentes
¿Qué fuente tiene la precedencia más alta?
La primera fuente de la matriz de precedencia. Usted define el orden completo en cada solicitud.
¿Una cadena vacía cuenta como valor?
Sí. Una propiedad presente con una cadena vacía es un valor aportado; una propiedad omitida indica que la fuente no aportó nada.
¿La matriz de precedencia debe incluir todas las fuentes?
Sí. Debe contener default, config_file, environment_variable y cli_flag exactamente una vez cada una.
¿Qué ocurre si ninguna fuente proporciona un valor?
La solicitud devuelve un error de entrada no válida. No se inventa ningún valor alternativo cuando falta la propiedad predeterminada.
¿Esta capacidad lee mis archivos o el entorno del proceso?
No. Solo evalúa los valores incluidos en la solicitud y no accede a la red ni al sistema.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su 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)Ejemplo de solicitud
{
"values": {
"default": "development",
"config_file": "staging",
"environment_variable": "production"
},
"precedence": [
"cli_flag",
"environment_variable",
"config_file",
"default"
]
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.config_precedence_resolve",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |