#google #google-cloud-platform #google-api

gcloud-sdk

基于 Tonic 中间件和 Reqwest 隐藏 GCP 认证复杂性的异步 Google gRPC/REST API 和客户端实现

72 个版本

0.25.5 2024 年 8 月 7 日
0.25.3 2024 年 7 月 23 日
0.24.4 2024 年 3 月 2 日
0.23.1 2023 年 12 月 2 日
0.18.0 2022 年 7 月 31 日

#39网络编程

Download history 7522/week @ 2024-05-01 5920/week @ 2024-05-08 7481/week @ 2024-05-15 6344/week @ 2024-05-22 7695/week @ 2024-05-29 7368/week @ 2024-06-05 8158/week @ 2024-06-12 6833/week @ 2024-06-19 6378/week @ 2024-06-26 5868/week @ 2024-07-03 6620/week @ 2024-07-10 5351/week @ 2024-07-17 7630/week @ 2024-07-24 7459/week @ 2024-07-31 7080/week @ 2024-08-07 7850/week @ 2024-08-14

31,132 每月下载量
用于 16 个 Crates(11 个直接使用)

MIT/Apache

80MB
1M SLoC

Google Cloud SDK for Rust

Latest Version tests and formatting security audit unsafe

基于 Tonic 中间件和 Reqwest 的异步 Google Cloud Platform (GCP) gRPC/REST API 客户端实现。

免责声明

这不是官方的 Google Cloud SDK(并且在更新此页面时,Rust 中不存在这样的 SDK)。

概述

此库包含从 Google API 生成的所有代码,用于 gRPC 和 REST API。

API/模型是如何生成的

功能

使用每个产品 API 时,您必须显式地使用功能标志将其包含在构建中。例如,如果您想使用 Cloud Pub/Sub,在 Cargo.toml 中写入 features = ["google-pubsub-v1"]

功能名称是每个 proto 文件包名的点分隔符,替换为连字符。

此外,可以指定多个功能。

可用的功能列表可在 此处 找到。

gRPC 的示例

    // The library handles getting token from environment automatically
    let firestore_client: GoogleApi<FirestoreClient<GoogleAuthMiddleware>> =
        GoogleApi::from_function(
            FirestoreClient::new,
            "https://firestore.googleapis.com",
            // cloud resource prefix: used only for some of the APIs (such as Firestore)
            Some(cloud_resource_prefix.clone()),
        )
            .await?;

    let response = firestore_client
        .get()
        .list_documents(tonic::Request::new(ListDocumentsRequest {
            parent: format!("{}/documents", cloud_resource_prefix),
            ..Default::default()
        }))
        .await?;

更完整的示例位于 此处

Cargo.toml

[dependencies]
gcloud-sdk = { version = "0.25", features = ["google-firestore-v1"] }

REST API 的示例

let google_rest_client = gcloud_sdk::GoogleRestApi::new().await?;

let response = gcloud_sdk::google_rest_apis::storage_v1::buckets_api::storage_buckets_list(
    &google_rest_client.create_google_storage_v1_config().await?,
    gcloud_sdk::google_rest_apis::storage_v1::buckets_api::StoragePeriodBucketsPeriodListParams {
        project: google_project_id,
        ..Default::default()
    }
).await?;

Google 认证

默认范围是 https://www.googleapis.com/auth/cloud-platform

要指定自定义范围,使用 from_function_with_scopes() 函数而不是 from_function();

在以下位置查找凭证,优先查找第一个找到的位置

  • 由 GOOGLE_APPLICATION_CREDENTIALS 环境变量指定的路径的 JSON 文件。
  • 使用 gcloud auth application-default login 通过 gcloud 命令行工具已知的位置的 JSON 文件。
  • 在 Google Compute Engine 上,它从元数据服务器获取凭据。

工作负载身份联合

库提供了对工作负载身份联合的支持,以便使用“无密钥”集成与不同提供者

  • 基于 URL 的 OIDC/SAML(例如 GitHub actions)以及文本/json 文件格式;
  • 基于文件的 OIDC/SAML 以及文本/json 文件格式;

AWS 提供者尚不支持(欢迎提交 PR 以支持,https://github.com/abdolence/gcloud-sdk-rs/issues/29)。

本地开发

在本地开发中,不要混淆 gcloud auth logingcloud auth application-default login,因为前者仅授权 gcloud 工具访问云平台。

后者通过网页流程获取用户访问凭据,并将它们放在应用程序默认凭据(ADC)的已知位置。此命令在您开发通常使用服务帐户但需要在本地开发环境中运行代码时很有用,其中提供用户凭据更容易。因此,为了在本地开发中工作,您需要使用 gcloud auth application-default login

高级 API

有时使用 proto 生成的 API 很繁琐,因此您可能需要在它们之上引入外观 API

许可证

根据您的选择,许可协议为 Apache License, Version 2.0MIT 许可证

作者

  • Abdulla Abdurakhmanov
  • mechiru - 原始项目(gRPC proto 生成器和令牌源实现)

该项目最初是 mechiru/googapismechiru/gouth 库的分支,但现在包括更多内容

  • Google API 客户端/令牌管理以及基于 Tower 的中间件层,以简化开发并提供一个隐藏令牌和 TLS 复杂性的异步客户端实现。
  • 除了 gRPC 之外还支持 Google REST API。
  • 支持工作负载身份联合。
  • 通过跟踪和测量端点的执行时间提高了可观察性。
  • 在所有地方使用同步原语(如 Mutex)并具有对 tokio 运行时的直接依赖。
  • 与 Google Secret Manager 和 KMS 相关的安全协议扩展。

依赖项

~19–31MB
~592K SLoC