Sisk

サービスプロバイダー

このページは英語から自動翻訳されています。 原文を読む

Service Providers は、ポータブルな構成ファイルを使用して Sisk アプリケーションをさまざまな環境へ移植する方法です。この機能により、サーバーのポートやパラメーター、その他のオプションを、環境ごとにアプリケーションコードを変更することなく変更できます。このモジュールは Sisk の構成構文に依存しており、UsePortableConfiguration メソッドを通じて構成できます。

構成プロバイダーは IConfigurationProvider で実装され、構成リーダーを提供し、任意の実装を受け取ることができます。デフォルトでは Sisk は JSON 構成リーダーを提供しますが、INI ファイル用のパッケージもあります。独自の構成プロバイダーを作成し、次のように登録することもできます。

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

前述のとおり、デフォルトのプロバイダーは JSON ファイルです。既定で検索されるファイル名は service-config.json で、実行プロセスのカレントディレクトリが検索対象となり、実行ファイルのディレクトリは対象外です。

ファイル名や Sisk が構成ファイルを探す場所を変更したい場合は、次のように指定できます。

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

上記のコードは、実行プロセスのカレントディレクトリで config.toml を探します。見つからない場合は、実行ファイルが置かれているディレクトリを検索します。ファイルが存在しない場合、createIfDontExists パラメーターが尊重され、最後にテストされたパス(lookupDirectories に基づく)に内容のないファイルが作成され、コンソールにエラーが出力されてアプリケーションの初期化が中止されます。

ヒント

INI 構成リーダーと JSON 構成リーダーのソースコードを確認すると、IConfigurationProvider がどのように実装されているかが分かります。

JSON ファイルからの構成の読み取り #

デフォルトで、Sisk は JSON ファイルから構成を読み取る構成プロバイダーを提供します。このファイルは固定の構造に従い、以下のパラメーターで構成されます。

JSON
{
    "Server": {
        "DefaultEncoding": "UTF-8",
        "ThrowExceptions": true,
        "IncludeRequestIdHeader": true
    },
    "ListeningHost": {
        "Label": "My sisk application",
        "Ports": [
            "http://localhost:80/",
            "https://localhost:443/",  // 設定ファイルはコメントもサポートします
        ],
        "CrossOriginResourceSharingPolicy": {
            "AllowOrigin": "*",
            "AllowOrigins": [ "*" ],   // 0.14 で新規追加
            "AllowMethods": [ "*" ],
            "AllowHeaders": [ "*" ],
            "MaxAge": 3600
        },
        "Parameters": {
            "MySqlConnection": "server=localhost;user=root;"
        }
    }
}

構成ファイルから作成されたパラメーターは、サーバーコンストラクター内で次のように取得できます。

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

各構成リーダーはサーバー初期化パラメーターを読み取る手段を提供します。一部のプロパティは、機密性の高い API データや API キーなど、構成ファイルではなくプロセス環境に設定すべきであることが示されています。

構成ファイルの構造 #

JSON 構成ファイルは以下のプロパティで構成されます。

プロパティ必須説明
Server必須サーバー本体とその設定を表します。
Server.AccessLogsStream任意デフォルトは console。アクセスログの出力先ストリームを指定します。ファイル名、null、または console が使用可能です。
Server.ErrorsLogsStream任意デフォルトは null。エラーログの出力先ストリームを指定します。ファイル名、null、または console が使用可能です。
Server.MaximumContentLength任意デフォルトは 0(無制限)。バイト単位で最大コンテンツ長を指定します。Server オブジェクトが存在しこのプロパティが省略された場合、値は 0(無制限)となり、HttpServerConfiguration.MaximumContentLength の 100 MB デフォルトを上書きします。
Server.IncludeRequestIdHeader任意デフォルトは false。HTTP サーバーが X-Request-Id ヘッダーを送信するかどうかを指定します。
Server.ThrowExceptions任意デフォルトは true。未処理例外をスローするかどうかを指定します。本番環境では false、デバッグ時は true に設定してください。
ListeningHost必須サーバーのリスニングホストを表します。
ListeningHost.Label任意アプリケーションのラベルを表します。
ListeningHost.Ports必須文字列の配列で、ListeningPort の構文に一致します。
ListeningHost.CrossOriginResourceSharingPolicy任意アプリケーションの CORS ヘッダーを設定します。
ListeningHost.CrossOriginResourceSharingPolicy.AllowCredentials任意デフォルトは false。Allow-Credentials ヘッダーを指定します。
ListeningHost.CrossOriginResourceSharingPolicy.ExposeHeaders任意デフォルトは null。文字列配列を期待し、Expose-Headers ヘッダーを指定します。
ListeningHost.CrossOriginResourceSharingPolicy.AllowOrigin任意デフォルトは null。文字列を期待し、Allow-Origin ヘッダーを指定します。
ListeningHost.CrossOriginResourceSharingPolicy.AllowOrigins任意デフォルトは null。文字列配列を期待し、複数の Allow-Origin ヘッダーを指定します。詳細は AllowOrigins を参照してください。
ListeningHost.CrossOriginResourceSharingPolicy.AllowMethods任意デフォルトは null。文字列配列を期待し、Allow-Methods ヘッダーを指定します。
ListeningHost.CrossOriginResourceSharingPolicy.AllowHeaders任意デフォルトは null。文字列配列を期待し、Allow-Headers ヘッダーを指定します。
ListeningHost.CrossOriginResourceSharingPolicy.MaxAge任意デフォルトは null。整数を期待し、秒単位で Max-Age ヘッダーを指定します。
ListeningHost.Parameters任意アプリケーションのセットアップメソッドに提供されるプロパティを指定します。

ドキュメントと API リファレンスを検索するには入力してください。