适用于 gRPC 的 Cloud Endpoints

gRPC 是一个由 Google 开发的高性能开源通用 RPC 框架。在 gRPC 中,客户端应用可以直接调用其他机器上的服务器应用中的方法,如同调用本地对象一样,从而让您更轻松地创建分布式应用和服务。

使用 gRPC 的主要优势之一是用于生成文档;您可以使用服务配置和 API 接口定义文件来生成 API 的参考文档。如需了解详情,请参阅开发者门户概览

API 管理

Endpoints 可与 Extensible Service Proxy (ESP)Extensible Service Proxy V2 (ESPv2) 配合使用来提供 API 管理功能。

借助适用于 gRPC 的 Endpoints,您可以使用 Endpoints 的 API 管理功能向您的 gRPC 服务添加 API 控制台、监控、托管、跟踪、身份验证等。此外,您指定了特殊的映射规则以后,ESP 和 ESPv2 会将基于 HTTP 的 RESTful JSON 转换为 gRPC 请求。这意味着您可以部署由 Endpoints 管理的 gRPC 服务器,并通过 gRPC 或 JSON/HTTP 客户端调用其 API,从而为您提供更高的灵活性,也为您将其与其他系统集成提供了便利。

gRPC Endpoints Service

您可以使用 gRPC 支持的任何语言针对 Endpoints 创建 gRPC 服务。您可以在 gRPC 网站上找到关于 gRPC 的更多信息,包括用于创建服务器和客户端的快速入门和教程等内容。

支持的计算平台

ESP 和 ESPv2 均为开源项目,您可以通过以下方式获得:

  • Google Container Registry 中的容器。
  • GitHub 中的源代码。

您可以在以下环境中运行 ESP 容器:

您可以在以下环境中运行 ESPv2 容器:

  • Cloud Run
  • Knative serving
  • GKE
  • Compute Engine
  • Kubernetes

如需了解详情,请参阅 Cloud Endpoints 简介

请参阅部署 API 后端,了解更多有关在 GCP 计算平台上部署 API 和 ESP 的信息。

服务定义和配置

gRPC 基于定义服务的思路,指定可以远程调用的方法及其参数和返回类型。默认情况下,gRPC 使用 Protocol Buffers 作为接口定义语言 (IDL) 来描述服务接口和负载消息的结构。

// The greeting service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

// The request message containing the user's name.
message HelloRequest {
  string name = 1;
}

// The response message containing the greetings
message HelloReply {
  string message = 1;
}

要将 gRPC 与 Endpoints 配合使用,您必须提供服务配置以及服务定义。这将配置服务的运行时行为,包括身份验证、服务中包含的 API、从 HTTP 请求到 gRPC 方法的映射以及特殊的 Cloud Endpoints 设置。

转码

Endpoints 可为 gRPC 服务提供协议转换,从而使客户端可以使用 HTTP/JSON 通过 ESP 或 ESPv2 与 gRPC 服务进行通信。

最常见的使用场景是允许浏览器客户端与 gRPC 服务器通信,而无需 gRPC 客户端库提供特殊支持。Endpoints 提供了一种机制,可在服务配置过程中将 HTTP 请求映射到 gRPC 方法。

您可以在将 HTTP/JSON 转码为 gRPC 中找到更多相关信息。

限制

Endpoints 尚不支持以下 gRPC 功能:

  • 负载压缩
  • 协议缓冲区以外的任何 IDL

此外,Endpoints 仅支持适用于 GKE、Compute Engine 和 Cloud Run(Beta 版)的 gRPC 服务。Endpoints 支持适用于 App Engine 环境的 gRPC 服务。

后续步骤

  • 按照我们的某个教程,在您选择的环境中使用 Cloud Endpoints 启动并运行简单的 gRPC 服务
  • 了解如何针对 Cloud Endpoints 配置 gRPC 服务
  • 探索示例。GitHub 上提供了以下语言版本的 getting-started-grpc 示例:
  • Bookstore 示例提供以下语言的版本: