跳至頁尾內容
Iron Academy Logo
C#應用程式
C#應用程式

其他類別

在 C# 課程中的範例 API 中新增健康檢查

[[academy-video-youtube({"vid": "95Unq3X39yg", "start_time": "0", "title": "Adding Health Checks - Building a Sample API in C# Course", "creator": "Tim Corey", "length": "23m 30s"})]]

使用ASP.NET Core開發和測試RESTful API是任何現代後端開發者的實用技能。 在他的《Adding Health Checks - Building a Sample API in C# Course》教學影片中,Tim Corey演示了如何構建一個帶有健康檢查的樣本API。 這篇文章完全基於Tim的講稿,逐步解釋整個過程,涵蓋了公用async Task的使用、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容器和Web應用程式部署

安裝健康檢查程式包

Tim在Visual Studio Code中打開專案,並右鍵點擊Dependencies來管理NuGet程式包。 他搜尋並安裝了AspNetCore.HealthChecks.UI.Client程式包。 這使應用能夠支持兩種型別的健康檢查。

建立健康檢查類

Tim在API專案資料夾中新增了一個名為HealthChecks的新資料夾。 在這裡,他建立了多個實現IHealthCheck介面的類,每個類代表不同的狀態:健康、退化、不健康和隨機。

HealthyHealthCheck.cs

這個類使用公用async Task<HealthCheckResult>實現返回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在啟動或配置資料夾中新增了一個名為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資料夾中

  • 在它們自己的資料夾中放置端點和控制器

  • 為每個健康檢查類使用async Task方法

他還強調這個樣本API在生產環境中非常有用,可用於部署前模擬延遲或故障。

"除了對它進行GET調用,我們還可以使用這個API進行更多測試,"Tim總結道。

接下來

Tim預告下一課,將新增模擬緩慢(例如5秒延遲)和錯誤如返回NotFound()或返回BadRequest(),以進一步測試API行為。

結論

在這個影片教學中,Tim Corey系統地講解了如何使用ASP.NET Core構建一個帶有整合健康檢查的最小API。 關鍵組件包括:

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

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

  • 使用MapHealthChecks()映射端點

  • 支持結構化JSON回應

這種方法更容易驗證REST API、模擬故障及加強開發和生產環境中的Web應用程式。

Hero Worlddot related to 在 C# 課程中的範例 API 中新增健康檢查
Hero Affiliate related to 在 C# 課程中的範例 API 中新增健康檢查

分享您所愛以賺取更多報酬

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

Iron 支援團隊

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