AWS API网关的基于URI的版本控制

Mar*_*ark 6 api amazon-web-services aws-api-gateway

我很难理解AWS API Gateway如何让我组织我的API,以便版本控制很简单.例如,假设我有一个简单的API用于从字典中获取单词,可选择通过查询参数过滤结果.我希望v1可以在以下位置获得:

https://<my-domain>/v1/names?starts-with=<value>
Run Code Online (Sandbox Code Playgroud)

但是,我最接近API网关的是

https://<my-domain>/names/v1?starts-with=<value>
Run Code Online (Sandbox Code Playgroud)

......这是相当倒退的.

我在控制台中得到的是"Names API",其中"v1"资源支持GET方法.我还有自定义域设置,将"名称"的基本路径映射到"名称API"和阶段"测试".基本路径必须是唯一的,因此将"v1"放在那里只有一个短期的胜利; 一旦我创建了我的第二个API(例如Numbers API),它也会有一个v1,我将无法创建第二个映射.

非常感谢任何和所有的帮助,因为我现在没有想法.

Ste*_*ani 9

不要在API中将版本路径(/ v1)创建为资源.相反,只需称呼API"Names V1"并开始创建资源(/ names).当您想要进行重大更改并创建新版本的API时,我们建议您创建一个名为"Names V2"的全新API.再一次,只需创建没有版本路径的资源.

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

  • myapi.com/v1 - >指向Names V1 API的prod阶段
  • myapi.com/v2 - >指向Names V2 API的prod阶段

这样,您可以在对v2进行更改时保留错误修复v1,并独立部署这两个API.自定义域名将它们组合在一起并使它们出现在同一个域(myapi.com/v2/names)下.

希望这可以帮助.

  • 目前,您只能在自定义域名中包含一个路径部分,因此您必须在同一个 API 中同时拥有名称和数字资源。我们从其他客户那里听说他们希望在域名中包含多个路径部分,这绝对是我们正在考虑的事情 - 感谢您的反馈! (3认同)
  • 你好!自从您回答以来已经一年多了,这些建议在2018年仍然有效吗?谢谢! (3认同)
  • 其次,需要更灵活的基本路径。2018 年 6 月现在仍然不可能。:( (2认同)
  • @StefanoBuliani 为什么这是首选方法而不是使用 [API Gateway Stages](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-basic-concept.html#apigateway-definition- api-stage)服务中内置的功能? (2认同)