我正在尝试将两个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
域吗?
答案 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前缀。
我们尚未测试过这种部署,但是您可以尝试一下。