【发布时间】:2020-11-26 20:01:06
【问题描述】:
我不断看到 cmets 关于如何在 API Gateway 中进行 URI 版本控制,这些都说同样的话,
不要将版本路径 (/v1) 创建为 API 中的资源。相反,只需调用 API“Names V1”并开始创建资源 (/names)。当您想要进行重大更改并创建 API 的新版本时,我们建议您创建一个名为“Names V2”的全新 API。再次,只需创建没有版本路径的资源。
要将这两个 API 结合在一起,您可以使用自定义域名。 API Gateway 中的自定义域名包括完全限定域名和基本路径。创建两个自定义域名:
myapi.com/v1 -> 指向 Names V1 API 的 prod 阶段
myapi.com/v2 -> 指向 Names V2 API 的 prod 阶段
但是,当您尝试创建包含“/”的自定义域名时,API 网关会以“无效域名”响应。因此,如果您尝试在映射上执行此操作,您会得到类似的信息,提及您可以使用的特殊字符,而“/”不是其中之一。所以你唯一的选择是使用阶段变量,这些帖子提到了这样做的挑战。
此外,如果您只是将其设为“v1”而不使用斜线,那么我们将无法拥有像“api.whatever.com”这样的自定义域。然后使自定义域特定于需要版本化的 API 区域。前任。 “stores.whatever.com”。这会导致每个 API 都有自己的子域。
URI-based Versioning for AWS API Gateway API Versioning with AWS API Gateway
很抱歉提出一个新问题,但我不能对帖子添加评论。
【问题讨论】:
-
我已经删除了我的答案,因为它显然没有回答你的问题。我认为允许不同区域的方法是将这些区域包含在 API 定义和 API 版本中,因此您将拥有 v1/stores 而不是 stores/v1。路径只是 v1,但 API 定义将包括这些区域。
-
感谢您试一试。我正在与我们的 Ops 团队进行此对话,他们希望拥有类似“api.whatever.com”的内容,然后将 API 映射到特定的 api 网关,例如“商店”,但不希望 v1 在资源或阶段中,(我不希望它在阶段)。但是唯一需要做 URI 版本控制的地方是在资源中,并且仍然可以按照他们想要的方式进行自定义域和 API 映射……因为路径中不能有“/”。
标签: amazon-web-services aws-api-gateway