Amazon web services API网关URI版本控制

Amazon web services API网关URI版本控制,amazon-web-services,aws-api-gateway,Amazon Web Services,Aws Api Gateway,我一直看到关于如何在API网关中进行URI版本控制的评论,这些评论都说了同样的话 不要将版本路径(/v1)创建为API中的资源。相反,只需调用API“namesv1”并开始创建资源(/Names)。当您想要进行突破性的更改并创建新版本的API时,我们建议您创建一个名为“Names V2”的全新API。同样,只需创建资源而不使用版本路径 要将这两个API结合在一起,可以使用自定义域名。API网关中的自定义域名包括完全限定域名和基本路径。创建两个自定义域名: myapi.com/v1->指向名称v1

我一直看到关于如何在API网关中进行URI版本控制的评论,这些评论都说了同样的话

不要将版本路径(/v1)创建为API中的资源。相反,只需调用API“namesv1”并开始创建资源(/Names)。当您想要进行突破性的更改并创建新版本的API时,我们建议您创建一个名为“Names V2”的全新API。同样,只需创建资源而不使用版本路径

要将这两个API结合在一起,可以使用自定义域名。API网关中的自定义域名包括完全限定域名和基本路径。创建两个自定义域名:

myapi.com/v1->指向名称v1 API的prod阶段

myapi.com/v2->指向名称v2 API的prod阶段

但是,当您尝试创建一个包含“/”的自定义域名时,API网关会以“无效域名”响应。因此,如果您尝试在映射上这样做,您会得到类似的结果,提到可以使用的特殊字符,而“/”不是其中之一。因此,你唯一的选择就是使用这些帖子提到的阶段变量,以这种方式进行的挑战

此外,如果您只是将其设置为“v1”而没有斜杠,那么我们就无法拥有像“api.whatever.com”这样的自定义域。然后使自定义域特定于需要进行版本控制的API区域。例如“stores.whatever.com”。这使得每个API都有自己的子域

很抱歉问了一个新问题,但我不允许在帖子上添加评论


我不确定我是否理解这里的要求,让我试着澄清一下。当您的自定义域名
api.whatever.com
收到请求时,api网关需要确定将请求发送到何处。API网关将查看路径,然后确定该路径是否存在任何API:STAGE映射。您可以在自定义域名上配置空的基本路径映射,但没有指向该自定义域名的路径的所有请求都将路由到API:STAGE映射。似乎您正在尝试将请求路由到
api.whater.com
stores.whater.com
,您可以使用两个自定义域名来完成此操作,每个域名都有自己的空基路径映射。例如:

自定义域名1:
api.whatever.com

  • api id
    :12345
  • 舞台
    :现场直播
  • api映射键
    :NULL
自定义域名2:
stores.whatever.com

  • api id
    :67890
  • 阶段
    :测试版
  • api映射键
    :NULL

您的客户在调用API时必须指定正确的域名。

我删除了我的答案,因为它显然没有回答您的问题。我认为允许不同区域的方法是在API定义和API版本中包含这些区域,因此您将使用v1/stores而不是stores/v1。路径将只是v1,但API定义将包括这些区域。感谢您的尝试。我正在与我们的Ops团队进行对话,他们希望有“api.whatever.com”之类的东西,然后有到特定api网关的api映射,比如“stores”,但不希望v1出现在资源或阶段中(我不希望它出现在阶段中)。但是唯一可以做URI版本控制的地方是在资源中,并且仍然有自定义域和API映射它们想要的方式…因为路径中不能有“/”。问题是如何处理API的版本控制。在关于通过StackOverflow上的URI版本控制进行API版本控制的其他回答中,据说没有在资源中添加“v1”,而是将其添加到自定义域名部分的API映射中。但是,如果您有一个通用的自定义域名,如“api.whatever.com”,并且还有多个api,如“stores”和“inventory”,那么您就没有地方添加“v1”,因为在自定义域名的api映射中不能有“/”。因此,剩下的就是添加“v1”作为api的顶级资源。能否将api命名为“storesV1”、“storesV2”、“inventoryV1”、“inventoryV2”,然后配置自定义域名基本路径映射以引用这些api?遵循CDN:API:STAGE:PATH格式,映射看起来像:
API.whater.com:storesV1:Live:v1
,和
API.whater.com:storesV2:Live:v2
。这意味着调用
api.whatever.com/v2
的客户将把他们的请求路由到“storesv2”api的活动阶段。如果我理解你的意思,v1最终会成为api中的一个资源。这很好,我也这么做了,但是Stefano Buliani的建议是不要将版本作为API中的资源,并将其构建到API映射中。所以我的理解是你如何解释它(我认为);CDN=api.whatever.com,api:STAGE=storesV1:Live->storefinder,PATH=/v1/stores/v1/stores/{number}…例如。api.whater.com/storefinder/v1/stores和api.whater.com/storefinder/v1/stores/14。不,不要在api中创建/v1资源。您的API将以
/
根资源开始。创建附加到根目录的“存储”资源。在自定义域名基本路径映射中,您将执行以下操作:
api.whater.com:storesV1:Live:stores
。这意味着当客户端调用
api.whatever.com/stores
时,api网关将把这些请求映射到
storesV1
api的
Live
阶段,同时将
v1
排除在该阶段和路径之外。当您想要对API进行版本设置时,可以更新基本路径映射。希望这有帮助!不幸的是,事实并非如此。我们已经有一种情况,我们需要v0(aka/stores)和v1同时到位,直到我们可以更新我们的移动应用程序以使用v1。听起来在资源中添加/v1是获得URI版本控制的唯一正确方法,直到API网关团队在基本路径映射中允许“/”为止。