IRONSOFTWAREHOME

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

Adding Health Checks - Building a Sample API in C# Course

Tim Corey

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

這模擬了一個健康狀態,對測試前端如何處理穩定服務非常有用。

DegradedHealthCheck.cs

return Task.FromResult(HealthCheckResult.Degraded("This is a test degraded service."));

此檢查返回退化服務響應。 這是一種簡單的方法來模擬部分失敗或性能問題。

UnhealthyHealthCheck.cs

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

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

這將為ASP.NET Core的服務容器中的依賴注入註冊所有健康檢查。

MapAllHealthChecks()

app.MapHealthChecks("/health");

這建立了一個單一端點/health,評估所有服務的整體健康狀態。 如果有任何不健康的,整個檢查返回不健康。

建立特定健康端點

為了測試單個組件,Tim使用標籤映射每個健康檢查:

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

這允許檢查每個健康檢查的資料,如持續時間、標籤和狀態。 然後,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應用程式。

Earn More by Sharing What You Love

Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Let's Stay in Touch!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy

Key in blue circle

立即免費取得 30 天試用金鑰

Your trial license will be sent to your email address

無任何限制。100% 解鎖。無需信用卡。

bullet_checked無需信用卡或建立帳號無任何限制。100% 解鎖。無需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
獲取您的無義務諮詢
填寫以下表格或發送電子郵件至sales@ironsoftware.com
您的詳細資訊將始終保密。
被全球數百萬工程師信任
Iron Software的客戶標誌
立即獲取您的30天試用金鑰
無需信用卡或帳戶建立