Sisk

サービス プロバイダー

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

サービス プロバイダーは、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省略可能
Server.MaximumContentLength省略可能デフォルトは 0。コンテンツの最大長 (バイト単位) を指定します。0 は無制限を意味します。
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 リファレンスを検索するには入力してください。