Realmente não há uma biblioteca de analisadores de configuração 'padrão'. Se você examinar através de /etc
, você encontrará uma combinação de:
- configuração XML
- configuração de estilo do Windows INI
- Basic KEY = VALUE config
- JSON (visto principalmente com aplicativos da web).
- YAML (principalmente visto com material mais novo, especialmente se escrito em Python).
- Coisas que parecem JSON ou YAML ou XML, mas não são (veja, por exemplo, configuração para Nginx (parece com JSON, mas não é), Apache (parece com XML, mas não é) e Unbound ( parece YAML, mas não é).
- Várias linguagens de shell.
- Várias coisas que parecem com linguagens de shell, mas tecnicamente não são.
- Snippets de origem em várias linguagens de script.
- Possivelmente outras coisas em que não pensei.
Em relação ao que usar com seu aplicativo:
- Por favor, o amor de todas as coisas santas evita XML. É desnecessariamente verboso, muito complicado de analisar (e, portanto, leva muito tempo e muita memória), e traz uma série de problemas de segurança. Também não é trivial obter o equilíbrio adequado entre elementos e atributos, e você geralmente acabará se arrependendo das escolhas feitas em relação a isso em algum momento posterior. A única vantagem real aqui é que você tem praticamente a garantia de ter um analisador XML em funcionamento em qualquer sistema que encontrar.
- Arquivos INI do estilo do Windows geralmente são uma aposta segura, embora eles limitem a complexidade de suas estruturas de configuração. Muitas bibliotecas existem para isso, e seu sistema provavelmente já tem pelo menos um. Eles não são tão comuns no Linux (os arquivos de configuração clássicos são tradicionalmente pares KEY = VALUE sem cabeçalhos de seção), mas ainda são amplamente usados e fáceis de entender.
- Basic KEY = VALUE pares (um por linha ideal) são tão triviais para analisar que você nem precisa de uma biblioteca para isso, mas são muito limitados no que eles podem fazer. O
- JSON é seguro e fácil de analisar, é amplamente suportado (praticamente todas as principais linguagens têm pelo menos um analisador atualmente) e suporta o aninhamento arbitrário de estruturas de configuração. No entanto, ele não suporta comentários (alguns analisadores podem, mas os resultados não serão interoperáveis), o que não é ótimo para arquivos projetados para serem editados com um editor de texto.
- O YAML é o meu favorito, é razoavelmente seguro e fácil de analisar, parece muito natural para a maioria das pessoas, suporta comentários e tem uma sobrecarga mínima. A única grande coisa aqui é que a indentação realmente é importante, pois é responsável por cerca de 80% da sintaxe, que combinada com o fato de que o YAML requer espaços para recuo (sem guias) pode torná-lo um pouco de um trabalho para trabalhar se você não tiver um bom editor.
- Se você estiver usando uma linguagem de script, considere usar snippets de origem para configuração, mas seja muito cuidadoso ao fazer isso. A menos que você seja muito cuidadoso sobre como você as analisa, você está deixando os usuários fazerem coisas arbitrárias na sua lógica interna, se quiserem, o que é um pesadelo de suporte ao cliente (você irá eventualmente levar as pessoas reclamando que você quebrou sua configuração, o que aconteceu para incluir coisas cutucando internals principais do programa que você mudou).