Sisk

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:

C#
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:

C#
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:

JSON
{
    "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:

C#
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 #

PropriedadeObrigatórioDescrição
ServerObrigatórioRepresenta o próprio servidor com suas configurações.
Server.AccessLogsStreamOpcionalPor padrão console. Especifica o fluxo de saída do log de acesso. Pode ser um nome de arquivo, null ou console.
Server.ErrorsLogsStreamOpcionalPor padrão null. Especifica o fluxo de saída do log de erros. Pode ser um nome de arquivo, null ou console.
Server.MaximumContentLengthOpcionalEspecifica 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.IncludeRequestIdHeaderOpcionalPor padrão false. Especifica se o servidor HTTP deve enviar o cabeçalho X-Request-Id.
Server.ThrowExceptionsOpcionalPor padrão true. Especifica se exceções não tratadas devem ser lançadas. Defina como false em produção e true ao depurar.
ListeningHostObrigatórioRepresenta o host de escuta do servidor.
ListeningHost.LabelOpcionalRepresenta o rótulo da aplicação.
ListeningHost.PortsObrigatórioRepresenta um array de strings, correspondendo à sintaxe de ListeningPort.
ListeningHost.CrossOriginResourceSharingPolicyOpcionalConfigura os cabeçalhos CORS para a aplicação.
ListeningHost.CrossOriginResourceSharingPolicy.AllowCredentialsOpcionalPor padrão false. Especifica o cabeçalho Allow-Credentials.
ListeningHost.CrossOriginResourceSharingPolicy.ExposeHeadersOpcionalPor padrão null. Esta propriedade espera um array de strings. Especifica o cabeçalho Expose-Headers.
ListeningHost.CrossOriginResourceSharingPolicy.AllowOriginOpcionalPor padrão null. Esta propriedade espera uma string. Especifica o cabeçalho Allow-Origin.
ListeningHost.CrossOriginResourceSharingPolicy.AllowOriginsOpcionalPor 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.AllowMethodsOpcionalPor padrão null. Esta propriedade espera um array de strings. Especifica o cabeçalho Allow-Methods.
ListeningHost.CrossOriginResourceSharingPolicy.AllowHeadersOpcionalPor padrão null. Esta propriedade espera um array de strings. Especifica o cabeçalho Allow-Headers.
ListeningHost.CrossOriginResourceSharingPolicy.MaxAgeOpcionalPor padrão null. Esta propriedade espera um inteiro. Especifica o cabeçalho Max-Age em segundos.
ListeningHost.ParametersOpcionalEspecifica as propriedades fornecidas ao método de configuração da aplicação.

Digite para pesquisar na documentação e na referência da API.