将x-google-endpoints OpenAPI扩展与Cloud Endpoints中的多个API版本一起使用

时间:2019-10-21 07:15:04

标签: google-cloud-endpoints openapi

我正在尝试将两个API版本部署到Google Cloud Endpoints,但最终在部署过程中面临配置问题。

API定义api-1.yaml如下:

swagger: "2.0"
info:
  description: "API"
  title: "API"
  version: "1.0.0"
host: "api.endpoints.GCP_PROJECT.cloud.goog"
basePath: "/v1"
x-google-api-name: v1
x-google-endpoints:
- name: "api.endpoints.GCP_PROJECT.cloud.goog"
  target: "IP_ADDRESS"
...

如果单独部署,则效果很好。但是,如果添加了api-2.yaml

swagger: "2.0"
info:
  description: "API"
  title: "API"
  version: "2.0.0"
host: "api.endpoints.GCP_PROJECT.cloud.goog"
basePath: "/v2"
x-google-api-name: v2
x-google-endpoints:
- name: "api.endpoints.GCP_PROJECT.cloud.goog"
  target: "IP_ADDRESS"
...

这会导致部署错误:OpenAPI spec is invalid. Multiple endpoint entries are defined in the extension \'x-google-endpoints\'. At most one entry is allowed.

从一个x-google-endpoints文件中删除yaml扩展名是可行的,但是另一个yaml文件则是不完整的,因此不是最佳解决方案。

在部署期间合并/验证yaml文件是否会出现问题?可以使用x-google-endpoints扩展名来定义版本API的.cloud.goog域吗?

2 个答案:

答案 0 :(得分:0)

有两种方法可以做到这一点:

1)版本在域名中,例如v1-api.endpoints.GCP_PROJECT.cloud.goog。 您定义并部署两个服务;一个用于v1,另一个用于v2。每个都有自己的IP,适当的服务名称和自己的后端。这是最简单明了的方法。

2)版本位于路径中,例如api.endpoints.GCP_PROJECT.cloud.goog/v1。您只能定义和部署一项服务。但是您有两个后端。这是一个棘手的问题。您可以在OpenApi规范中使用x-google-backend扩展名并部署一项Cloud Endpoint服务。

答案 1 :(得分:0)

您将两个ESP代理用作:v1_esp-> v1,v2_esp-> v2。每个代理都有自己的IP,您正在尝试将域名绑定到两个IP。不支持。

我的建议是通过使用x-google-backend使用一个ESP,例如esp-> v1 + v2。 1)在openApi.yaml

路径:    / v1 / path1:       ...       x-google-backend:         地址:v1_host    #针对您的所有路径/方法执行以上操作

/ v2:       ...       x-google-backend:         地址:v2_host    #针对您的所有路径/方法执行以上操作

x-google-endpoints: -名称:“ api.endpoints.GCP_PROJECT.cloud.goog”   目标:“ IP_ADDRESS”

2)在向您的后端发送请求之前,添加--enable_backend_routing和--rewrite删除/ v1和/ v2前缀。

我们尚未测试过这种部署,但是您可以尝试一下。