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

Posted

技术标签:

【中文标题】gcp api 网关在调用 x-google-backend 之前是不是根据 OpenAPI 规范验证请求正文?【英文标题】:Does gcp api gateway validate request body against OpenAPI spec before calling x-google-backend?gcp api 网关在调用 x-google-backend 之前是否根据 OpenAPI 规范验证请求正文? 【发布时间】:2022-01-19 23:07:41 【问题描述】:

当我使用邮递员时,Google 似乎没有验证我的请求正文架构,甚至没有验证请求有正文。我错过了什么吗?对我来说,这意味着谷歌在调用 x-google-backend 之前会验证这类事情,但它总是将请求传递给我的云函数,无论我是否传递有效数据。

我使用这个问题here 作为指导。

/users:
    post:
      summary: Creates a new user.
      operationId: createUser
      consumes:
        - application/json
      parameters:
        - in: body
          name: body
          description: The user to create.
          required: true
          schema:
            $ref: './schemas/user.yaml'
      x-google-backend:
        address: https://us-central1-blablabla.cloudfunctions.net/blabla
      responses:
        201:
          description: Created

user.yaml:

type: object
required:
- username
- password
- repeatPassword
- email
properties:
  username:
    type: string
    minLength: 3
    maxLength: 50
  password:
    type: string
    minLength: 6
    maxLength: 64
  repeatPassword:
    type: string
    minLength: 6
    maxLength: 64
  email:
    type: string
    minLength: 3
    maxLength: 50

【问题讨论】:

【参考方案1】:

目前,使用 OpenAPI 时存在一些限制。可扩展服务代理 (ESP) 或 Cloud Endpoints Framework 忽略了一些范围。

首先是required参数。 Endpoints 接受包含所需参数和类型定义的 OpenAPI 文档,但这不是 ESP 所要求的,它只是将传入的请求转发到您的 API。

最后是外部类型引用。 Endpoints 不支持对 OpenAPI 之外的类型的引用,这意味着,$ref: './schemas/user.yaml' 将被端点忽略。

请注意,API Gateway 使用与 Cloud Endpoints 相同的 OpenAPI 语法,这些链接也参考 Cloud Endpoints 文档中的位置。

这是guide for OpenAPI feature limitations。它还包括其他被 OpenAPI 忽略的范围、参数、模式和类型。

我还建议提交feature request。这样,这些功能将在未来可用,并将实施到这些类型的项目中。

【讨论】:

谢谢罗伯特!我实际上使用 swagger 命令行命令“bundle”来构建整个 API 规范,以便将 refs 转换为外部模式。反响很好!【参考方案2】:

只是补充罗伯特已经说过的话,看起来这不是 API 网关提供的东西,正如 here 所讨论的那样:

“我们可以向 Google API GW 添加任何‘逻辑’吗?例如检查有效负载(在 JWT 和 API 验证之后)并决定它应该调用微服务 A 还是微服务 B;

不,不支持。"

【讨论】:

以上是关于gcp api 网关在调用 x-google-backend 之前是不是根据 OpenAPI 规范验证请求正文?的主要内容,如果未能解决你的问题,请参考以下文章

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

GCP API Gateway JWT 总是返回 403

如何使用 Python 创建/管理 GCP API 密钥

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

调用 GCP App 引擎 REST API 时权限被拒绝

GCP IAM REST API 服务帐号密钥问题