Resolver precedência de valores de configuração
Erros de configuração costumam começar com uma pergunta simples que se torna surpreendentemente difícil: qual valor realmente prevalece?
Executar grátis
Roda direto no seu navegador. Grátis, sem cadastro — seus dados não são enviados para lugar nenhum.
Esta capacidade compara valores fornecidos pelo padrão do aplicativo, por um arquivo de configuração, por uma variável de ambiente e por uma opção de linha de comando, aplicando a ordem de precedência definida por você. Ela retorna o valor efetivo e a fonte que o forneceu, tornando a decisão fácil de inspecionar, testar e documentar. Fontes omitidas continuam diferentes de strings vazias fornecidas de propósito, representando corretamente o comportamento comum de substituição.
Descreva os valores sem perder a semântica de ausência
Informe os valores de origem no objeto values com os nomes canônicos default, config_file, environment_variable e cli_flag. Uma propriedade ausente significa que essa fonte não forneceu a configuração. Essa diferença é importante porque uma string vazia pode ser uma substituição intencional: por exemplo, uma opção de CLI pode apagar de propósito um prefixo existente em um arquivo. Portanto, o resolvedor trata uma string vazia presente como valor real e não a ignora silenciosamente. Todo valor fornecido deve ser uma string, refletindo a forma bruta comum de variáveis de ambiente e analisadores de linha de comando e evitando conversões inesperadas entre zero, falso e texto. Você também pode fornecer o nome da configuração. Ele não altera a seleção; é repetido no resultado para manter logs e casos de teste compreensíveis quando várias configurações são avaliadas. Nomes de fonte desconhecidos são rejeitados para revelar erros de digitação. Se nenhuma das quatro propriedades estiver presente, a resolução falhará, inclusive quando não houver a propriedade padrão, impedindo que uma configuração ausente vire silenciosamente um valor inventado.
Defina e aplique a precedência explicitamente
A matriz precedence lista as quatro fontes da prioridade mais alta para a mais baixa. Uma ordem convencional é opção de CLI, variável de ambiente, arquivo de configuração e padrão, mas o resolvedor não presume essa convenção, pois aplicativos e sistemas de implantação variam. Ele examina os nomes ordenados e escolhe a primeira fonte cuja propriedade existe no objeto values. A fonte retornada explica por que o valor venceu, enquanto a matriz de precedência retornada preserva a política usada. Exigir cada fonte compatível exatamente uma vez torna a política completa e auditável. Nome duplicado ou desconhecido, fonte ausente ou entrada extra gera erro de entrada em vez de resultado parcial ambíguo. Isso é útil quando as regras vêm de documentação, migração de framework ou matriz de testes: a ordem enviada é a regra inteira, e não uma sugestão combinada com padrões ocultos. A seleção é determinística e não converte tipos, interpola, acessa arquivos, consulta o ambiente nem analisa comandos. A capacidade avalia apenas os valores enviados por você; assim, a mesma entrada sempre produz a mesma saída no navegador, em CI ou via API.
Use o resultado em testes, diagnósticos e documentação
A resposta contém effective_value, source e a ordem de precedência avaliada. Se você informou um nome de configuração, a resposta também o inclui. Essa estrutura compacta funciona bem em casos de teste unitário: reúna os valores brutos observados pelo carregador, envie a política desejada e confirme se o valor vencedor e sua origem correspondem ao esperado. Ela também ajuda no diagnóstico operacional. Uma ferramenta de suporte pode mostrar que um tempo limite veio de uma variável de ambiente, e não de um arquivo versionado, sem reproduzir toda a inicialização do aplicativo. Equipes de documentação podem transformar exemplos de configurações em camadas em demonstrações executáveis. O resolvedor não lê o ambiente do processo anfitrião, não abre arquivos nem interpreta sintaxe de CLI. Quem chama continua responsável por coletar as entradas e decidir se segredos devem ser enviados; normalmente, use marcadores inofensivos ao testar apenas a precedência. Cada solicitação resolve uma configuração e custa US$ 0,002 pela API, enquanto o navegador de nível A usa a mesma lógica pura. Sem rede, aleatoriedade, relógio ou estado mutável, entradas idênticas são estáveis e fáceis de comparar ou armazenar em cache.
Casos de uso
Verificar uma substituição de implantação
Confirme se uma opção de CLI ou variável de ambiente prevalece sobre o valor salvo no arquivo de configuração.
Criar testes do carregador de configuração
Gere casos claros que validem o valor efetivo e a fonte responsável por ele.
Explicar uma configuração inesperada em execução
Reproduza uma decisão de precedência com entradas coletadas sem ler arquivos nem acessar o ambiente ativo.
Perguntas frequentes
Qual fonte tem a precedência mais alta?
A primeira fonte na matriz de precedência. Você define a ordem completa em cada solicitação.
Uma string vazia conta como valor?
Sim. Uma propriedade presente com string vazia é um valor fornecido; uma propriedade omitida significa que a fonte não forneceu nada.
A matriz de precedência deve incluir todas as fontes?
Sim. Ela deve conter default, config_file, environment_variable e cli_flag exatamente uma vez cada.
O que acontece quando nenhuma fonte fornece um valor?
A solicitação retorna um erro de entrada inválida. Nenhum valor alternativo é inventado quando a propriedade padrão está ausente.
Esta capacidade lê meus arquivos ou o ambiente do processo?
Não. Ela apenas avalia os valores incluídos na solicitação, sem acessar a rede ou o sistema.
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
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)Exemplo de requisição
{
"values": {
"default": "development",
"config_file": "staging",
"environment_variable": "production"
},
"precedence": [
"cli_flag",
"environment_variable",
"config_file",
"default"
]
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.config_precedence_resolve",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |