錯誤處理

主動解讀並回應錯誤,提供更一致的使用者體驗。無論您是開發自動化雲端工作流程,還是與遠端 API 互動,Rust 用戶端程式庫都能提供妥善處理錯誤的方法。本指南說明如何:

  • 處理錯誤:檢查錯誤類型,並根據服務狀態碼分支應用程式邏輯,例如在遇到 NotFound 錯誤時建立缺少的資源。
  • 檢查錯誤詳細資料:擷取並檢查 Google Cloud 服務傳回的豐富錯誤詳細資料,例如要求欄位違規或配額失敗,以排解 API 問題並動態調整執行階段行為。
  • 解決繫結錯誤:解讀並解決因要求欄位無效或遺漏而導致的用戶端 HTTP 繫結錯誤,確保要求順利送達服務。

必要條件

本指南使用 Secret Manager 服務Cloud Natural Language API 示範錯誤處理程序。如要執行範例,請先完成下列步驟:

  1. 啟用 Secret Manager 服務
  2. 啟用 Cloud Natural Language API
  3. 設定驗證

依附元件

使用下列指令,將必要依附元件新增至 Cargo.toml 檔案:

cargo add google-cloud-secretmanager-v1 google-cloud-gax crc32c google-cloud-language-v2

處理錯誤

您可以使用 Rust 用戶端程式庫顯示錯誤並做出回應。舉例來說,您可能會使用錯誤探索來分支處理行為:雲端服務的常見模式是使用資源,就好像資源的容器存在一樣,只有在遇到錯誤時才建立容器。如果容器通常存在,這種做法比在提出要求前檢查容器是否存在更有效率。

以下範例說明如何處理缺少資源的情況:嘗試更新 Secret Manager 密鑰時擷取錯誤,並在密鑰不存在時建立密鑰。

  1. 嘗試建立新的密鑰版本:

    match update_attempt(&client, project_id, secret_id, data.clone()).await {

  2. 如果 update_attempt 成功,請列印成功結果並傳回:

    Ok(version) => {
        println!("new version is {}", version.name);
        Ok(version)
    }

  3. 如果 update_attempt 失敗,您必須釐清失敗原因。 要求失敗的原因有很多,例如連線中斷或驗證權杖發生錯誤。重試政策可處理大部分這類錯誤。尋找服務傳回的錯誤:

    Err(e) => {
        if let Some(status) = e.downcast_ref::<Error>().and_then(|e| e.status()) {

  4. 找出與缺少密鑰相應的錯誤:

    if status.code == Code::NotFound {

  5. 如果遇到「找不到」錯誤 (Code::NotFound),請嘗試建立密鑰:

    let _ = create_secret(&client, project_id, secret_id).await?;

  6. 請嘗試再次新增 Secret 版本。這次,如果發生任何錯誤,請傳回錯誤:

    let version = update_attempt(&client, project_id,