Sisk

Fornecedores de Serviços

Esta página foi traduzida automaticamente do inglês. Ler o original

Fornecedores de Serviços é uma forma de portar seu aplicativo Sisk para diferentes ambientes com um arquivo de configuração portátil. Essa funcionalidade permite alterar a porta do servidor, parâmetros e outras opções sem precisar modificar o código do aplicativo para cada ambiente. Esse módulo depende da sintaxe de construção do Sisk e pode ser configurado por meio 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 do arquivo procurado é service-config.json, e ele é procurado 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 procurará no diretório onde o executável está localizado. Se o arquivo não existir, o parâmetro createIfDontExists será honrado, criando o arquivo, sem conteúdo, no último caminho testado (com base em lookupDirectories), e um erro será lançado no console, impedindo que o aplicativo seja inicializado.

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. Esse arquivo segue uma estrutura fixa e é composto pelos seguintes parâmetros:

JSON
{
    "Server": {
        "DefaultEncoding": "UTF-8",
        "ThrowExceptions": true,
        "IncludeRequestIdHeader": true
    },
    "ListeningHost": {
        "Label": "Meu aplicativo Sisk",
        "Ports": [
            "http://localhost:80/",
            "https://localhost:443/",  // Arquivos de configuração também suportam comentários
        ],
        "CrossOriginResourceSharingPolicy": {
            "AllowOrigin": "*",
            "AllowOrigins": [ "*" ],   // Novo no 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 de API sensíveis, chaves de API, etc.

Estrutura do arquivo de configuração #

O arquivo de configuração JSON é composto pelas seguintes propriedades:

PropriedadeObrigatórioDescrição
ServerObrigatórioRepresenta o servidor em si com suas configurações.
Server.AccessLogsStreamOpcionalPadrão para console. Especifica o fluxo de saída do log de acesso. Pode ser um nome de arquivo, null ou console.
Server.ErrorsLogsStreamOpcionalPadrão para null. Especifica o fluxo de saída do log de erros. Pode ser um nome de arquivo, null ou console.
Server.MaximumContentLengthOpcional
Server.MaximumContentLengthOpcionalPadrão para 0. Especifica o comprimento máximo de conteúdo em bytes. Zero significa infinito.
Server.IncludeRequestIdHeaderOpcionalPadrão para false. Especifica se o servidor HTTP deve enviar o cabeçalho X-Request-Id.
Server.ThrowExceptionsOpcionalPadrão para true. Especifica se as exceções não tratadas devem ser lançadas. Defina como false quando em produção e true quando em depuração.
ListeningHostObrigatórioRepresenta o host de escuta do servidor.
ListeningHost.LabelOpcionalRepresenta o rótulo do aplicativo.
ListeningHost.PortsObrigatórioRepresenta uma matriz de strings, correspondendo à sintaxe ListeningPort.
ListeningHost.CrossOriginResourceSharingPolicyOpcionalConfigura os cabeçalhos CORS para o aplicativo.
ListeningHost.CrossOriginResourceSharingPolicy.AllowCredentialsOpcionalPadrão para false. Especifica o cabeçalho Allow-Credentials.
ListeningHost.CrossOriginResourceSharingPolicy.ExposeHeadersOpcionalPadrão para null. Essa propriedade espera uma matriz de strings. Especifica o cabeçalho Expose-Headers.
ListeningHost.CrossOriginResourceSharingPolicy.AllowOriginOpcionalPadrão para null. Essa propriedade espera uma string. Especifica o cabeçalho Allow-Origin.
ListeningHost.CrossOriginResourceSharingPolicy.AllowOriginsOpcionalPadrão para null. Essa propriedade espera uma matriz de strings. Especifica vários cabeçalhos Allow-Origin. Veja AllowOrigins para mais informações.
ListeningHost.CrossOriginResourceSharingPolicy.AllowMethodsOpcionalPadrão para null. Essa propriedade espera uma matriz de strings. Especifica o cabeçalho Allow-Methods.
ListeningHost.CrossOriginResourceSharingPolicy.AllowHeadersOpcionalPadrão para null. Essa propriedade espera uma matriz de strings. Especifica o cabeçalho Allow-Headers.
ListeningHost.CrossOriginResourceSharingPolicy.MaxAgeOpcionalPadrão para null. Essa propriedade espera um inteiro. Especifica o cabeçalho Max-Age em segundos.
ListeningHost.ParametersOpcionalEspecifica as propriedades fornecidas ao método de configuração do aplicativo.

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