【问题标题】:Google API Gateway configuration for a Cloud Run Server that serves GraphQL at endpoint /api在端点 /api 提供 GraphQL 的 Cloud Run Server 的 Google API Gateway 配置
【发布时间】:2020-12-28 22:55:28
【问题描述】:

我有一个正在运行的后端服务器,它在端点 /api 上提供 GraphQL。像魅力一样工作,但我仍然将它从外部打开,并且无需身份验证即可访问。

所以我开始尝试 Google 刚刚发布的 API Gateway 测试版。除了我必须配置 OpenAPI 2.0 配置 YAML 的部分之外,所有这些都非常简单。

swagger: "2.0"
info:
  title: myapp-backend-graphql-api
  description: "API for GraphQL queries and mutations"
  version: "1.0.0"
schemes:
  - "https"
paths:
  "/api":
    post:
      description: "GraphQL Endpoint"
      operationId: "graphqlEndpoint"
      x-google-backend:
        address: https://myapp-backend-43Jasfasd-ew.a.run.app
      parameters:
        - in: body
          name: GraphQl
          schema:
            type: object
      responses:
        200:
          description: "Success."
          schema:
            type: object


这是我的openapi-config.yml。我有点挣扎b


它在这里定义了“REST”端点,因为我有一个 GraphQL 端点。但这只是一个 POST 请求,对吧?所以我认为 OpenAPI 2.0 没有什么常见的。

无论如何,根据 GCP 成功创建了 API 网关

但是 - 现在通过网关 URL https://mystuff-api-9kytelt5.ew.gateway.dev 和端点 /api 调用 API 失败。

xetra11@pop-os:~$ curl https://mystuff-api-9kytelt5.ew.gateway.dev/api/schema.json 
{"message":"Path does not match any requirement URI template.","code":404}

我对那个错误消息有些迷茫,不知道我必须在哪里进行调整。

【问题讨论】:

  • 你有没有解决过这个问题@xetra11?

标签: google-api graphql openapi google-cloud-run


【解决方案1】:

在您的 openapi-config.yml 文件中,如示例 here,您需要在方案条目上方添加主机。主机是 Cloud Run 创建的 URL 的主机名部分。此外,您的路径和方案有双引号,它不需要。我对您的示例进行了一些修改,看看是否有帮助。

例子:

swagger: "2.0"
info:
  title: myapp-backend-graphql-api
  description: "API for GraphQL queries and mutations"
  version: "1.0.0"
host: myapp-backend-43Jasfasd-ew.a.run.app
schemes:
  - https
paths:
  /api:
    post:
      description: "GraphQL Endpoint"
      operationId: "graphqlEndpoint"
      x-google-backend:
        address: https://myapp-backend-43Jasfasd-ew.a.run.app
      parameters:
        - in: body
          name: GraphQl
          schema:
            type: object
      responses:
        '200':
          description: Success
          schema:
            type: object

【讨论】:

  • 我现在添加了host。但是它仍然呈现相同的错误。这个错误不是表明 API 网关正在工作但我无法通过它访问吗?
  • 这只是意味着它无法进入服务配置,您可以在构建日志中验证这一点。每次新部署托管服务时更改服务配置非常重要。 1. 上传新的 OpenAPI 配置并接收新的 CONFIG_ID。 2. 重建 ESPv2 容器镜像,该镜像将使用 CONFIG_ID 作为参考,以获得新的 OpenAPI 配置。 3. 对新建的 ESPv2 + OpenAPI 配置容器执行 Cloud Run 部署。请参阅github.com/GoogleCloudPlatform/esp-v2/issues/… 了解更多信息。
  • 每次部署都有什么用?我正在使用 Cloud Build 和主线部署在 Google Cloud 上运行。那不会很方便..
【解决方案2】:

您只在您的 openAPI 规范中定义了 POST 动词。在 curl 命令中添加 -X POST 以将默认 GET 动词更改为 POST

【讨论】:

    猜你喜欢
    • 2021-08-29
    • 1970-01-01
    • 2020-02-17
    • 2021-02-20
    • 2022-09-27
    • 2021-04-17
    • 1970-01-01
    • 2021-03-26
    • 1970-01-01
    相关资源
    最近更新 更多