Provedores de Serviço
Esta página foi traduzida automaticamente do inglês. Ler o original
Provedores de Serviço são uma forma de portar sua aplicação Sisk para diferentes ambientes com um arquivo de configuração portátil. Esse recurso permite alterar a porta do servidor, parâmetros e outras opções sem precisar modificar o código da aplicação para cada ambiente. Este módulo depende da sintaxe de construção do Sisk e pode ser configurado através do método UsePortableConfiguration.
Um provedor de configuração é implementado com IConfigurationProvider, que fornece um leitor de configuração e pode receber qualquer implementação. Por padrão, o Sisk fornece um leitor de configuração JSON, mas também há um pacote para arquivos INI. Você também pode criar seu próprio provedor de configuração e registrá-lo com:
using var app = HttpServer.CreateBuilder()
.UsePortableConfiguration(config =>
{
config.WithConfigReader<MyConfigurationReader>();
})
.Build();Como mencionado anteriormente, o provedor padrão é um arquivo JSON. Por padrão, o nome de arquivo procurado é service-config.json, e ele é buscado no diretório atual do processo em execução, não no diretório do executável.
Você pode escolher alterar o nome do arquivo, bem como onde o Sisk deve procurar o arquivo de configuração, com:
using Sisk.Core.Http;
using Sisk.Core.Http.Hosting;
using var app = HttpServer.CreateBuilder()
.UsePortableConfiguration(config =>
{
config.WithConfigFile("config.toml",
createIfDontExists: true,
lookupDirectories:
ConfigurationFileLookupDirectory.CurrentDirectory |
ConfigurationFileLookupDirectory.AppDirectory);
})
.Build();O código acima procurará o arquivo config.toml no diretório atual do processo em execução. Se não for encontrado, ele buscará então no diretório onde o executável está localizado. Se o arquivo não existir, o parâmetro createIfDontExists será respeitado, criando o arquivo, sem conteúdo, no último caminho testado (com base em lookupDirectories), e um erro será lançado no console, impedindo a inicialização da aplicação.
Dica
Você pode olhar o código-fonte do leitor de configuração INI e do leitor de configuração JSON para entender como um IConfigurationProvider é implementado.
Lendo configurações de um arquivo JSON #
Por padrão, o Sisk fornece um provedor de configuração que lê configurações de um arquivo JSON. Este arquivo segue uma estrutura fixa e é composto pelos seguintes parâmetros:
{
"Server": {
"DefaultEncoding": "UTF-8",
"ThrowExceptions": true,
"IncludeRequestIdHeader": true
},
"ListeningHost": {
"Label": "My sisk application",
"Ports": [
"http://localhost:80/",
"https://localhost:443/", // Arquivos de configuração também suportam comentários
],
"CrossOriginResourceSharingPolicy": {
"AllowOrigin": "*",
"AllowOrigins": [ "*" ], // new on 0.14
"AllowMethods": [ "*" ],
"AllowHeaders": [ "*" ],
"MaxAge": 3600
},
"Parameters": {
"MySqlConnection": "server=localhost;user=root;"
}
}
}Os parâmetros criados a partir de um arquivo de configuração podem ser acessados no construtor do servidor:
using var app = HttpServer.CreateBuilder()
.UsePortableConfiguration(config =>
{
config.WithParameters(paramCollection =>
{
string databaseConnection = paramCollection.GetValueOrThrow("MySqlConnection");
});
})
.Build();Cada leitor de configuração fornece uma forma de ler os parâmetros de inicialização do servidor. Algumas propriedades são indicadas para estar no ambiente do processo em vez de serem definidas no arquivo de configuração, como dados sensíveis de API, chaves de API, etc.
Estrutura do arquivo de configuração #
| Propriedade | Obrigatório | Descrição |
|---|---|---|
| Server | Obrigatório | Representa o próprio servidor com suas configurações. |
| Server.AccessLogsStream | Opcional | Por padrão console. Especifica o fluxo de saída do log de acesso. Pode ser um nome de arquivo, null ou console. |
| Server.ErrorsLogsStream | Opcional | Por padrão null. Especifica o fluxo de saída do log de erros. Pode ser um nome de arquivo, null ou console. |
| Server.MaximumContentLength | Opcional | Especifica o comprimento máximo do conteúdo em bytes. Zero significa infinito. Quando o objeto Server está presente e esta propriedade é omitida, o valor é 0 (infinito), o que sobrescreve o padrão de 100 MB de HttpServerConfiguration.MaximumContentLength. |
| Server.IncludeRequestIdHeader | Opcional | Por padrão false. Especifica se o servidor HTTP deve enviar o cabeçalho X-Request-Id. |
| Server.ThrowExceptions | Opcional | Por padrão true. Especifica se exceções não tratadas devem ser lançadas. Defina como false em produção e true ao depurar. |
| ListeningHost | Obrigatório | Representa o host de escuta do servidor. |
| ListeningHost.Label | Opcional | Representa o rótulo da aplicação. |
| ListeningHost.Ports | Obrigatório | Representa um array de strings, correspondendo à sintaxe de ListeningPort. |
| ListeningHost.CrossOriginResourceSharingPolicy | Opcional | Configura os cabeçalhos CORS para a aplicação. |
| ListeningHost.CrossOriginResourceSharingPolicy.AllowCredentials | Opcional | Por padrão false. Especifica o cabeçalho Allow-Credentials. |
| ListeningHost.CrossOriginResourceSharingPolicy.ExposeHeaders | Opcional | Por padrão null. Esta propriedade espera um array de strings. Especifica o cabeçalho Expose-Headers. |
| ListeningHost.CrossOriginResourceSharingPolicy.AllowOrigin | Opcional | Por padrão null. Esta propriedade espera uma string. Especifica o cabeçalho Allow-Origin. |
| ListeningHost.CrossOriginResourceSharingPolicy.AllowOrigins | Opcional | Por padrão null. Esta propriedade espera um array de strings. Especifica múltiplos cabeçalhos Allow-Origin. Veja AllowOrigins para mais informações. |
| ListeningHost.CrossOriginResourceSharingPolicy.AllowMethods | Opcional | Por padrão null. Esta propriedade espera um array de strings. Especifica o cabeçalho Allow-Methods. |
| ListeningHost.CrossOriginResourceSharingPolicy.AllowHeaders | Opcional | Por padrão null. Esta propriedade espera um array de strings. Especifica o cabeçalho Allow-Headers. |
| ListeningHost.CrossOriginResourceSharingPolicy.MaxAge | Opcional | Por padrão null. Esta propriedade espera um inteiro. Especifica o cabeçalho Max-Age em segundos. |
| ListeningHost.Parameters | Opcional | Especifica as propriedades fornecidas ao método de configuração da aplicação. |