Sisk

Proveedores de Servicios

Esta página fue traducida automáticamente del inglés. Leer el original

Los Proveedores de Servicios son una forma de portar tu aplicación Sisk a diferentes entornos con un archivo de configuración portable. Esta característica permite cambiar el puerto del servidor, parámetros y otras opciones sin tener que modificar el código de la aplicación para cada entorno. Este módulo depende de la sintaxis de construcción de Sisk y puede configurarse mediante el método UsePortableConfiguration.

Un proveedor de configuración se implementa con IConfigurationProvider, que proporciona un lector de configuración y puede recibir cualquier implementación. Por defecto, Sisk ofrece un lector de configuración JSON, pero también existe un paquete para archivos INI. Puedes crear tu propio proveedor de configuración y registrarlo con:

C#
using var app = HttpServer.CreateBuilder()
    .UsePortableConfiguration(config =>
    {
        config.WithConfigReader<MyConfigurationReader>();
    })
    .Build();

Como se mencionó antes, el proveedor predeterminado es un archivo JSON. Por defecto, el nombre de archivo buscado es service-config.json, y se busca en el directorio actual del proceso en ejecución, no en el directorio del ejecutable.

Puedes elegir cambiar el nombre del archivo, así como dónde Sisk debe buscar el archivo de configuración, con:

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();

El código anterior buscará el archivo config.toml en el directorio actual del proceso en ejecución. Si no se encuentra, buscará en el directorio donde está ubicado el ejecutable. Si el archivo no existe, se respeta el parámetro createIfDontExists, creando el archivo, sin contenido, en la última ruta probada (según lookupDirectories), y se lanza un error en la consola, impidiendo que la aplicación se inicialice.

Consejo

Puedes consultar el código fuente del lector de configuración INI y del lector de configuración JSON para entender cómo se implementa un IConfigurationProvider.

Lectura de configuraciones desde un archivo JSON #

Por defecto, Sisk proporciona un proveedor de configuración que lee configuraciones desde un archivo JSON. Este archivo sigue una estructura fija y está compuesto por los siguientes parámetros:

JSON
{
    "Server": {
        "DefaultEncoding": "UTF-8",
        "ThrowExceptions": true,
        "IncludeRequestIdHeader": true
    },
    "ListeningHost": {
        "Label": "My sisk application",
        "Ports": [
            "http://localhost:80/",
            "https://localhost:443/",  // Los archivos de configuración también admiten comentarios
        ],
        "CrossOriginResourceSharingPolicy": {
            "AllowOrigin": "*",
            "AllowOrigins": [ "*" ],   // nuevo en 0.14
            "AllowMethods": [ "*" ],
            "AllowHeaders": [ "*" ],
            "MaxAge": 3600
        },
        "Parameters": {
            "MySqlConnection": "server=localhost;user=root;"
        }
    }
}

Los parámetros creados a partir de un archivo de configuración pueden accederse en el constructor del servidor:

C#
using var app = HttpServer.CreateBuilder()
    .UsePortableConfiguration(config =>
    {
        config.WithParameters(paramCollection =>
        {
            string databaseConnection = paramCollection.GetValueOrThrow("MySqlConnection");
        });
    })
    .Build();

Cada lector de configuración proporciona una forma de leer los parámetros de inicialización del servidor. Algunas propiedades se indican para estar en el entorno del proceso en lugar de definirse en el archivo de configuración, como datos sensibles de API, claves de API, etc.

Estructura del archivo de configuración #

El archivo de configuración JSON está compuesto por las siguientes propiedades:

PropertyMandatoryDescription
ServerRequiredRepresenta el propio servidor con sus configuraciones.
Server.AccessLogsStreamOptionalPor defecto console. Especifica la corriente de salida del registro de acceso. Puede ser un nombre de archivo, null o console.
Server.ErrorsLogsStreamOptionalPor defecto null. Especifica la corriente de salida del registro de errores. Puede ser un nombre de archivo, null o console.
Server.MaximumContentLengthOptional
Server.MaximumContentLengthOptionalEspecifica la longitud máxima del contenido en bytes. Cero significa infinito. Cuando el objeto Server está presente y esta propiedad se omite, el valor es 0 (infinito), lo que sobrescribe el valor predeterminado de 100 MB de HttpServerConfiguration.MaximumContentLength.
Server.IncludeRequestIdHeaderOptionalPor defecto false. Especifica si el servidor HTTP debe enviar el encabezado X-Request-Id.
Server.ThrowExceptionsOptionalPor defecto true. Especifica si las excepciones no manejadas deben lanzarse. Establece false en producción y true durante la depuración.
ListeningHostRequiredRepresenta el host de escucha del servidor.
ListeningHost.LabelOptionalRepresenta la etiqueta de la aplicación.
ListeningHost.PortsRequiredRepresenta un arreglo de cadenas, que coincide con la sintaxis de ListeningPort.
ListeningHost.CrossOriginResourceSharingPolicyOptionalConfigura los encabezados CORS para la aplicación.
ListeningHost.CrossOriginResourceSharingPolicy.AllowCredentialsOptionalPor defecto false. Especifica el encabezado Allow-Credentials.
ListeningHost.CrossOriginResourceSharingPolicy.ExposeHeadersOptionalPor defecto null. Esta propiedad espera un arreglo de cadenas. Especifica el encabezado Expose-Headers.
ListeningHost.CrossOriginResourceSharingPolicy.AllowOriginOptionalPor defecto null. Esta propiedad espera una cadena. Especifica el encabezado Allow-Origin.
ListeningHost.CrossOriginResourceSharingPolicy.AllowOriginsOptionalPor defecto null. Esta propiedad espera un arreglo de cadenas. Especifica múltiples encabezados Allow-Origin. Consulta AllowOrigins para más información.
ListeningHost.CrossOriginResourceSharingPolicy.AllowMethodsOptionalPor defecto null. Esta propiedad espera un arreglo de cadenas. Especifica el encabezado Allow-Methods.
ListeningHost.CrossOriginResourceSharingPolicy.AllowHeadersOptionalPor defecto null. Esta propiedad espera un arreglo de cadenas. Especifica el encabezado Allow-Headers.
ListeningHost.CrossOriginResourceSharingPolicy.MaxAgeOptionalPor defecto null. Esta propiedad espera un entero. Especifica el encabezado Max-Age en segundos.
ListeningHost.ParametersOptionalEspecifica las propiedades proporcionadas al método de configuración de la aplicación.

Escribe para buscar en la documentación y en la referencia de la API.