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 规范验证请求正文?的主要内容,如果未能解决你的问题,请参考以下文章