ヘルスチェックの追加 - C#でサンプルAPIを構築するコース
.NET Coreを使用したC#によるRESTful APIの開発とテストは、現代のバックエンド開発者にとって実用的なスキルです。 Adding Health Checks - Building a Sample API in C# Course"のチュートリアルビデオでは、Tim Corey がヘルスチェックを統合したサンプル API の構築について説明しています。 この記事では、Timのトランスクリプトのみに基づいて、プロセス全体を段階的に説明し、public async Task、int id、var app、その他のHTTPリクエストメソッドの使用などの重要なポイントをカバーしています。
ここでは、Tim Corey氏がVisual Studio Codeを使用してC# APIプロジェクトにヘルスチェックを設定する方法を詳しく見ていきましょう。
サンプル API とヘルスチェックの紹介
ティムは、サンプルAPIはウェブ開発を学ぶ際の強力なツールであると説明しています。 開発者は、GET、POST、PUT、DELETEメソッドを使用して、適切なリクエストデータとステータスコードでAPIコールをシミュレートすることができます。 ティムが構築するAPIは以下のものをサポートします:
データモデル付きサンプルデータ
APIリクエストのRESTfulビヘイビア
JSON形式のレスポンス
ヘルスチェック
- DockerコンテナとWebアプリケーションの両方としてのデプロイメント
健康診断パッケージのインストール
Tim氏はVisual Studio Codeでプロジェクトを開き、[依存関係]を右クリックしてNuGetパッケージを管理します。 彼はAspNetCore.HealthChecks.UI.Clientパッケージを検索し、インストールします。 これにより、このアプリは2種類のヘルスチェックをサポートすることができます。
ヘルス チェック クラスの作成
Timは、APIプロジェクトフォルダ内にHealthChecksという新しいフォルダを追加します。 ここでは、IHealthCheck インターフェースを実装する複数のクラスを作成し、それぞれが異なるステータス(健康、劣化、不健康、ランダム)を表します。
HealthyHealthCheck.cs
このクラスは、public async Task
return Task.FromResult(HealthCheckResult.Healthy("This is a test healthy service."));return Task.FromResult(HealthCheckResult.Healthy("This is a test healthy service."));これは、フロントエンドが安定したサービスをどのように処理するかをテストするのに便利な、健全な状態をシミュレートします。
DegradedHealthCheck.cs
return Task.FromResult(HealthCheckResult.Degraded("This is a test degraded service."));return Task.FromResult(HealthCheckResult.Degraded("This is a test degraded service."));このチェックは、degraded service レスポンスを返します。 部分的な障害やパフォーマンスの問題をシミュレートする簡単な方法です。
UnhealthyHealthCheck.cs
return Task.FromResult(HealthCheckResult.Unhealthy("This is a test unhealthy service."));return Task.FromResult(HealthCheckResult.Unhealthy("This is a test unhealthy service."));これは、失敗したサービスを模倣し、HTTPステータスコード500を期待したり、NotFound()を返したりするケースをシミュレートします。
RandomHealthCheck.cs(ランダム ヘルス チェック.cs
このヘルスチェックは、3つの状態のうちの1つをシミュレートするためにランダムな整数を使用します:
int randomResult = Random.Shared.Next(1, 4);
return randomResult switch
{
1 => Task.FromResult(HealthCheckResult.Healthy("This is a test random service.")),
2 => Task.FromResult(HealthCheckResult.Degraded("This is a test random service.")),
3 => Task.FromResult(HealthCheckResult.Unhealthy("This is a test random service.")),
_ => Task.FromResult(HealthCheckResult.Healthy("This is a test random service."))
};int randomResult = Random.Shared.Next(1, 4);
return randomResult switch
{
1 => Task.FromResult(HealthCheckResult.Healthy("This is a test random service.")),
2 => Task.FromResult(HealthCheckResult.Degraded("This is a test random service.")),
3 => Task.FromResult(HealthCheckResult.Unhealthy("This is a test random service.")),
_ => Task.FromResult(HealthCheckResult.Healthy("This is a test random service."))
};ティムは、これは可変条件下での動作をテストするのに役立つと強調しています。
スタートアップ構成にヘルスチェックを登録する
Tim は、Startup または configuration フォルダに新しい静的クラス HealthChecksConfig.cs を追加します。 このクラスには2つの静的メソッドがあります:
AddAllHealthChecks()
services.AddHealthChecks()
.AddCheck<RandomHealthCheck>("random", tags: new[] { "random" })
.AddCheck<HealthyHealthCheck>("healthy", tags: new[] { "healthy" })
.AddCheck<DegradedHealthCheck>("degraded", tags: new[] { "degraded" })
.AddCheck<UnhealthyHealthCheck>("unhealthy", tags: new[] { "unhealthy" });services.AddHealthChecks()
.AddCheck<RandomHealthCheck>("random", tags: new[] { "random" })
.AddCheck<HealthyHealthCheck>("healthy", tags: new[] { "healthy" })
.AddCheck<DegradedHealthCheck>("degraded", tags: new[] { "degraded" })
.AddCheck<UnhealthyHealthCheck>("unhealthy", tags: new[] { "unhealthy" });ASP.NET Coreのサービスコンテナの依存性注入のヘルスチェックをすべて登録します。
MapAllHealthChecks()
app.MapHealthChecks("/health");app.MapHealthChecks("/health");これにより、すべてのサービスをまとめて評価する単一のエンドポイント/ヘルスが作成されます。 不健康なものがあれば、チェック全体が不健康を返します。
特定のヘルス エンドポイントの作成
個々のコンポーネントをテストするために、Timは各ヘルスチェックをタグでマッピングします:
app.MapHealthChecks("/health/healthy", new HealthCheckOptions {
Predicate = x => x.Tags.Contains("healthy")
});app.MapHealthChecks("/health/healthy", new HealthCheckOptions {
Predicate = x => x.Tags.Contains("healthy")
});彼は、/health/degraded、/health/unhealthy、/health/randomについてこれを繰り返す。 それぞれのツールは、開発者が特定の動作と、それに対するフロントエンドの反応をテストすることを可能にします。
health/randomにアクセスすると、ランダムな結果に基づいて、出力が "healthy"、"degraded"、"unhealthy "の間で変化します。
ヘルスチェックの UI サポートを追加する
Tim は、各ヘルスチェック・ルートの UI レスポンスを有効にすることで、エンドポイントを強化します。 これはJSON出力を提供します:
app.MapHealthChecks("/healthui", new HealthCheckOptions
{
ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse
});app.MapHealthChecks("/healthui", new HealthCheckOptions
{
ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse
});これにより、各ヘルスチェックの期間、タグ、ステータスなどのデータを検査することができます。 その後、ティムは各ヘルスエンドポイントのUIバージョンを作成します:
/healthui/健康
/ヘルスイ/劣化
/healthui/不健康
- /healthui/ランダム
各翻訳は、RESTful APIやモバイルデバイスまたはWebページからのテストに理想的な、詳細なJSON形式で応答します。
APIプロジェクトのまとめ
ティムは、これらの機能を使っても、Program.csはまだ21行しかないことを強調しています。 その理由は次のとおりです:
適切なプロジェクトフォルダ構造
モデルをModelsフォルダに保管する
エンドポイントとコントローラを独自のフォルダに配置する
- 各ヘルスチェック・クラスの非同期タスク・メソッドの使用
彼はまた、このサンプルAPIが、デプロイ前のレイテンシやフォールトのシミュレーションのために、本番環境でいかに有用であるかを強調している。
このAPIを使えば、GETコールをするだけでなく、もっと多くのテストができます"とティムは結論づける。
次に来るもの
Timは、APIの動作をさらにテストするために、シミュレートされた速度低下(例えば、5秒の遅延)とreturn NotFound()やreturn BadRequest()のようなエラーを追加する次のレッスンをプレビューします。
結論
この 動画 チュートリアルでは、Tim Corey が ASP.NET Core を使用してヘルス チェックを統合した最小限の API を構築する手順を体系的に説明します。 主な内容
健全性チェッククラス(健全、劣化、不健全、ランダム)
AddHealthChecks()による依存性注入
MapHealthChecks() を使用したエンドポイントのマッピング
- 構造化JSONレスポンスのサポート
このアプローチにより、REST APIの検証、障害のシミュレーション、開発環境と本番環境の両方におけるWebアプリケーションの強化が容易になります。

