跳過到頁腳內容
Iron Academy Logo
C# 應用程式
C# 應用程式

其他分類

添加健康檢查 - 在C#課程中構建一個示例API

Tim Corey
23m 30s

在 C# 中使用 ASP.NET Core 開發和測試 RESTful API 是現代後端開發者的實用技能。 在他的教程視頻中,Adding Health Checks - Building a Sample API in C# Course,Tim Corey 講解了如何構建具有健康檢查功能的樣本 API。 這篇文章完全基於 Tim 的文字記錄,逐步解釋了整個過程,涵蓋了使用公共異步任務、int id、var app 以及其他 HTTP 請求方法等關鍵點。

讓我們深入了解 Tim Corey 如何在 Visual Studio Code 中設置健康檢查 C# API 專案。

介紹樣本 API 和健康檢查

Tim 解釋說,樣本 API 是學習網頁開發時的強大工具。 它允許開發者使用 GET、POST、PUT 和 DELETE 方法模擬 API 呼叫,並使用適當的請求數據和狀態碼。 Tim 構建的 API 支援:

  • 具有數據模型的樣本數據

  • API 請求的 RESTful 行為

  • JSON 格式的回應

  • 健康檢查

  • 可以作為 Docker 容器和網頁應用程式部署

安裝健康檢查套件

Tim 在 Visual Studio Code 中開啟專案,右鍵點擊 Dependencies 以管理 NuGet 套件。 他搜索並安裝了 AspNetCore.HealthChecks.UI.Client 包。 這使應用程序能夠支援兩種類型的健康檢查。

建立健康檢查類別

Tim 在 API 專案文件夾內新增了一個名為 HealthChecks 的新文件夾。 在這裡,他創建了多個實現 IHealthCheck 介面的類,每個類代表不同的狀態:健康、降級、不健康和隨機。

HealthyHealthCheck.cs

此類使用公共異步 Task 實現返回一個 HealthCheckResult.Healthy:

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."));

這個檢查返回一個降級的服務響應。 這是一個模擬部分失敗或性能問題的簡單方法。

UnhealthyHealthCheck.cs

return Task.FromResult(HealthCheckResult.Unhealthy("This is a test unhealthy service."));
return Task.FromResult(HealthCheckResult.Unhealthy("This is a test unhealthy service."));

這模仿了一個失敗的服務,模擬您期望出現 500 HTTP 狀態碼或返回 NotFound() 的情況。

RandomHealthCheck.cs

此健康檢查使用隨機整數模擬三種狀況之一:

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 強調這對於測試變化條件下的行為非常有用。

在啟動配置中註冊健康檢查

Tim 在 Startup 或配置文件夾中新增了一個新的靜態類 HealthChecksConfig.cs。 此類包含兩個靜態方法:

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

這創建了一個單一的端點 /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 時,輸出會根據隨機結果在"健康"、"降級"和"不健康"之間變化。

為健康檢查添加 UI 支援

Tim 透過啟用每個健康檢查路由的 UI 回應來加強端點。 這提供了一個 JSON 輸出:

app.MapHealthChecks("/healthui", new HealthCheckOptions
{
    ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse
});
app.MapHealthChecks("/healthui", new HealthCheckOptions
{
    ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse
});

這允許檢查每個健康檢查,數據包括持續時間、標籤和狀態。 接下來,Tim 為每個健康端點建立了 UI 版本:

  • /healthui/healthy

  • /healthui/degraded

  • /healthui/unhealthy

  • /healthui/random

每個皆回應詳細的 JSON 格式,對於 RESTful API 和從移動設備或網頁測試非常理想。

包裝 API 專案

Tim 指出,即便有這些功能,Program.cs 仍然只有21行。 他將其歸功於:

  • 優秀的專案文件夾結構

  • 將模型保持在 Models 文件夾中

  • 將端點和控制器放在各自的文件夾中

  • 使用異步 Task 方法為每個健康檢查類別

他也強調這個樣本 API 在生產環境中,對於在部署前模擬延遲或故障是多麼有用。

"我們可以用此 API 做更多的測試,不僅僅是對它進行 GET 呼叫,"Tim 總結說。

接下來會發生什麼

Tim 預告了下一課,他將添加模擬的減速(例如 5 秒延遲)和錯誤,例如返回 NotFound() 或返回 BadRequest(),以進一步測試 API 行為。

結論

在這個 視頻教程中,Tim Corey 條理分明地介紹了使用 ASP.NET Core 構建帶有集成健康檢查的最小 API。 關鍵組件包括:

  • 健康檢查類(Healthy、Degraded、Unhealthy、Random)

  • 通過 AddHealthChecks() 進行依賴注入

  • 使用 MapHealthChecks() 映射端點

  • 支援結構化的 JSON 回應

這種方法使驗證 REST API、模擬故障以及加強網頁應用程式對於開發和生產環境都變得更容易。

Hero Worlddot related to 添加健康檢查 - 在C#課程中構建一個示例API
Hero Affiliate related to 添加健康檢查 - 在C#課程中構建一個示例API

通過分享您所愛的東西賺得更多

您是否在為使用.NET、C#、Java、Python或Node.js的開發者創建內容?將您的專業知識轉化為額外收入!

鋼鐵支援團隊

我們每週 5 天,每天 24 小時在線上。
聊天
電子郵件
打電話給我