本文档介绍了将 OpenAPI 3.x 与 Endpoints 搭配使用时的功能限制。
如需详细了解支持的 OpenAPI 规范版本,请参阅 OpenAPI 概览。
新的 OpenAPI 3.x 限制
本部分介绍了 OpenAPI 3.x 支持新增的 OpenAPI 限制。
服务器
OpenAPI 3.x 支持多个 server 对象来定义主机和基本路径。不过,Cloud Endpoints 仅使用单个服务器对象来配置主机名和基本路径,该对象由 x-google-endpoint 扩展标识。
虽然您可以在 OpenAPI 规范中定义多个服务器,但 Cloud Endpoints 仅使用具有 x-google-endpoint 扩展程序的服务器。您只能在一个服务器上定义 x-google-endpoint 扩展程序。
对于 Cloud Endpoints,必须提供主机名,因此只能有一个服务器具有 x-google-endpoint 扩展程序。
例如,以下服务器定义对于 Cloud Endpoints 是有效的:
servers:
- url: https://my-api.endpoints.my-project-id.cloud.goog
x-google-endpoint: {}
servers:
- url: https://my-api.endpoints.my-project-id.cloud.goog
x-google-endpoint: {}
- url: https://example.com
以下服务器定义对于 Endpoints 是无效的:
servers:
- url: https://my-api-1.endpoints.my-project-id.cloud.goog
x-google-endpoint: {}
- url: https://my-api-2.endpoints.my-project-id.cloud.goog
x-google-endpoint: {}
以下定义也对 Cloud Endpoints 无效:
servers:
- url: https://my-api.endpoints.my-project-id.cloud.goog
多个文件中的服务器
如果您上传多个 OpenAPI 文件,所有文件都必须遵守 servers 部分的限制。如果一个文件包含扩展名为 x-google-endpoint 的服务器,则所有文件都必须定义扩展名为 x-google-endpoint 的服务器。
此外,所有扩展名为 x-google-endpoint 的服务器都必须在服务器网址中使用相同的主机,并且所有文件中的 x-google-endpoint 配置必须完全相同。服务器网址中的基本路径可能有所不同。
相对网址
Cloud Endpoints 需要主机名,因此不支持相对网址。
不受支持的扩展程序
OpenAPI 3.x 不支持 x-google-allow 扩展程序。
现有限制
本部分介绍了 OpenAPI 2.0 中存在的限制,这些限制仍然适用于 OpenAPI 3.x。
范围被忽略
虽然您可以在安全方案对象中定义范围,但 ESP 或 Cloud Endpoints Frameworks 不会检查这些范围。
多个安全性要求
您可以在 OpenAPI 文档中指定多个安全性要求。
包含 API 密钥的安全性要求:当其中一个方案是 API 密钥时,Cloud Endpoints 不支持替代(逻辑 OR)安全性要求。Cloud Endpoints 支持合取(逻辑 AND),因此您可以同时要求 API 密钥和 OAuth2 身份验证。
OAuth2 的安全性要求:Cloud Endpoints 支持针对不同 OAuth2 身份验证方案的替代(逻辑 OR)安全性要求。除非额外的安全要求是 API 密钥,否则 Cloud Endpoints 不支持合取(逻辑 AND)。
可选安全性要求:OpenAPI 3 支持通过包含空要求 (
{}) 来实现可选安全性。API 密钥支持此功能,但 OAuth 不支持。
安全定义验证
对于 OpenAPI 3.x,使用未定义的安全架构会导致错误,并且 Cloud Endpoints 会拒绝该规范。这与 OpenAPI 2.0 不同,在 OpenAPI 2.0 中,此情况只会产生警告。
网址路径模板
Cloud Endpoints 仅支持与整个路径段(由 / 分隔)对应的网址路径模板参数。Cloud Endpoints 不支持与部分路径段对应的参数。
例如,Cloud Endpoints 支持 /items/{itemId},但不支持 /items/overview.{format}。
针对网址根路径 / 的操作
虽然 OpenAPI 文档接受针对根路径 / 的操作,但 Extensible Service Proxy 拒绝针对根路径的请求。此限制不适用于支持根路径的 ESPv2。
参数、架构、请求正文和类型
Extensible Service Proxy 和 ESP 会忽略大多数参数、架构、请求正文和类型定义。Extensible Service Proxy 和 ESP 不强制执行必需参数和类型定义,而是将请求转发到您的 API。
Extensible Service Proxy 和 ESP 仅支持请求参数中的基本类型。
外部类型引用
Cloud Endpoints 不支持对 OpenAPI 文档外部的类型的引用。例如,您不能使用指向外部网址的 $ref。
服务主机地址中的自定义端口
您无法在 servers 对象的 url 中使用自定义端口。
YAML 别名限制
一个 OpenAPI 文档最多可以包含 200 个 YAML 别名节点。
非重复请求正文
每个操作只能定义一个 requestBody,且该 requestBody 必须为非重复类型。