エラー処理

エラーをプロアクティブに解釈して対応することで、より一貫したユーザー エクスペリエンスを提供します。自動化されたクラウド ワークフローを開発する場合でも、リモート 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. 新しい Secret バージョンを作成してみます。

    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)