在 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應用程式。

