1

我是无服务器框架的新手。

我正在启动一个具有多个路由的 Rest API,例如:

获取用户/{userid}

发布用户


获取帐户/{accountid}

发布帐户

我需要 2 项服务 - 帐户 + 用户吗?

最佳实践是什么?如果有 2 个服务,那么 2 个 serverless.yml?有没有人有无服务器大型应用程序的例子?

谢谢大家!

4

4 回答 4

2

对于您的示例,使用一项服务(serverless.yml)就足够了。

您可以在 1 服务中使用一个 lambda 来处理usersaccounts请求。

functions:
  <your-function-name>:
    handler: handler.execute
    events:
      - http:
          path: /user/{userid}
          method: get
      - http:
          method: post
          path: /user    
      - http:
          path: /account/{accountid}
          method: get
      - http:
          method: post
          path: /account

或者您可以创建 2 个 lambda(每个实体一个)

functions:
  user:
    handler: userHandler.execute
    events:
      - http:
        path: /user/{userid}
        method: get
      - http:
        method: post
        path: /user
  account:
    handler: accountHandler.execute
    events:
      - http:
        path: /account/{accountid}
        method: get
      - http:
          method: post
          path: /account
于 2018-02-14T14:32:07.530 回答
1

这实际上取决于您想要的应用程序架构。看看这里,我想它可能会帮助你决定你真正想要什么。

如果您同时有很多端点,您可能需要 2 个服务,因为您将达到资源限制。pathmapping如果您想为您的应用程序设置一个 url,您可以随时设置。

resources:
  Resources:
    pathmapping:
      Type: AWS::ApiGateway::BasePathMapping
      Properties:
        BasePath: <your base for this service>
        DomainName: mydomain.com
        RestApiId:
            Ref: ApiGatewayRestApi
        Stage: dev
于 2017-12-21T13:40:23.787 回答
1

简而言之 - 如您所愿。从技术上讲:您可以将多个函数聚合为一个,并根据事件参数属性调用特定的一个。此外 - 您可以在 AWS lambdas(或其他 FaaS)中运行 express/koa 服务器,而不会感到任何痛苦。
+ 作为奖励,您可以使用ANY{any+}

    events:
  - http:
      path: /foo
      method: ANY
  - http:
      path: /foo/{any+}
      method: ANY

但总的来说 - 取决于情况。如果您经常调用特定端点,那么最好将其移动到单独的 lambda。如果您知道很少调用端点的工作台 - 最好将它们聚合在一个 lambda 下。特别是如果您使用热身。

于 2018-09-22T09:17:02.593 回答
0

我喜欢架构的一件事是没有正确的答案,但最适合您的问题/情况。最重要的是,最佳/最佳实践是在所有这些方面为您提供帮助的指导方针。

就我而言,我在代码中添加了复杂性,因此我的 CRUD 路径非常简单。cms/{entity} 或 cms/{entity}/{id}。实体意味着我在后端的集合,所以我知道要使用哪个模型。

将此应用于您的问题,您将获得类似以下内容:

GET {entity}/{userid}
POST {entity}

使用此解决方案,您不必为您在数据库中创建的每个新实体创建一个函数。它还具有 SOLID 原则的开闭概念。

于 2019-07-01T06:13:23.663 回答