使用Serverlesss Framework在API Gateway和Lambda上提供多个api版本

rhy*_*thm 5 amazon-web-services aws-lambda aws-api-gateway serverless-framework serverless-architecture

我正在使用API​​ Gateway和Lambda(无服务器框架)构建无服务器应用程序,并试图找到一种方法来提供应用程序API的多个版本。

这是我能想到的方式。

无服务器

 handler: list.handler
 events:
     - http:
         path: {ver}/list
         method: get
         cors: true
         authorizer: aws_iam
Run Code Online (Sandbox Code Playgroud)

list.js

 export async function handler(event, context, callback) {
     const ver = event.pathParameters.ver;
     if (ver >= '1.0') {
         return fooUtil.getNo(ver);
     } else {
         return 1;
     }  
 }
Run Code Online (Sandbox Code Playgroud)

fooUtil.js

 export function getNo(ver) {
     if (ver >= 1.3) {
         return 3;
     } else {
         return 2;
     }
 }
Run Code Online (Sandbox Code Playgroud)

但是,我需要以这种方式将“ ver”参数传递给所有函数。

有什么方法可以更容易(并且可以测试)从如下所示的请求中获取版本号?

fooUtil.js

 export function getNo() {
     if (session.getValue('ver') >= 1.3) {
     }
 }
Run Code Online (Sandbox Code Playgroud)

我不希望划分存储库或git分支来管理多个版本。

Mai*_*KaY 3

每个版本都有自己的资源并通过文件夹将其分开?

像这样

 handler: v1.list.handler
 events:
     - http:
         path: v1/list
         method: get
         cors: true
         authorizer: aws_iam

 handler: v2.list.handler
 events:
     - http:
         path: v2/list
         method: get
         cors: true
         authorizer: aws_iam
Run Code Online (Sandbox Code Playgroud)

这使您可以灵活地测试所有内容,并且对于项目的新手来说更容易,因为版本控制通过文件夹分离是明确的。

  • 我同意这是明确且可测试的,但是当我们有 10 个版本(主要或次要)并且每个版本有 100 个方法时,就会有 1000 个资源。我认为手动管理资源会很困难。我们希望进行一些小的改进(小版本),而不关心添加版本的麻烦。 (2认同)