使用 GCP API 网关的 Graphql 后端的 OpenAPI 配置?

Posted

技术标签:

【中文标题】使用 GCP API 网关的 Graphql 后端的 OpenAPI 配置?【英文标题】:OpenAPI config for a Graphql backend using GCP API Gateway? 【发布时间】:2021-06-26 21:15:52 【问题描述】:

我有一个位于 GCP API 网关后面的 apollo/graphql 服务器。谷歌表示它需要一个 OpenAPI 规范来保护端点: https://cloud.google.com/api-gateway/docs/get-started-cloud-run#creating_an_api_config

但是,这对于保护单个 graphql 端点究竟如何呢?另外,作为一个附带问题,是否需要为每个 Cloud Run/App Engine 服务创建一个新的 API 网关?

提前致谢。

【问题讨论】:

【参考方案1】:

Here's a repo 展示了您想要实现的目标。它是一个 GCP API 网关,面向 Cloud Run 上的 GraphQL API,由 Identity-Aware Proxy 保护。以下是链接中的 API 配置:

api-spec.yaml

swagger: '2.0'
info:
  title: gcp-demo-api
  description: Sample GraphQL API on API Gateway with a Cloud Run backend
  version: 1.0.0
schemes:
  - https
produces:
  - application/json
paths:
  /:
    post:
      summary: GraphQL endpoint
      operationId: gql
      x-google-backend:
        address: https://PROJECT_AND_RANDOM_STRING.a.run.app/graphql  # App URL/endpoint
        jwt_audience: LONG_RANDOM_STRING.apps.googleusercontent.com # IAP client ID
      responses:
        '200':
          description: A successful response
          schema:
            type: object

要回答您的附带问题,了解 API 网关的作用很重要。 API 网关位于您的用户请求和您的后端服务集合之间,因此所有 API 请求都通过它。

因此,您无需为每个服务创建新的 API 网关。通过在每个端点上指定后端地址,API Gateway 可以提供多种服务,例如 Cloud Run、App Engine、Cloud Functions 等。这是一个link,进一步解释了这个概念。

【讨论】:

以上是关于使用 GCP API 网关的 Graphql 后端的 OpenAPI 配置?的主要内容,如果未能解决你的问题,请参考以下文章

我们可以将 Kong api 网关用于基于 GraphQL 服务的后端服务吗?

如何对 GCP Cloud Run 上的联合 GraphQL 服务进行身份验证?

GCP API Gateway:路径参数作为查询参数传递

使用 Amazon api 网关用 REST API 包装 graphQL(appsync)

GraphQL 和 Zuul:Graphql 将作为一个休息端点工作,zuul 作为 api 网关

gcp api 网关在调用 x-google-backend 之前是不是根据 OpenAPI 规范验证请求正文?