我是无服务器框架的新手。
我正在启动一个具有多个路由的 Rest API,例如:
获取用户/{userid}
发布用户
获取帐户/{accountid}
发布帐户
我需要 2 项服务 - 帐户 + 用户吗?
最佳实践是什么?如果有 2 个服务,那么 2 个 serverless.yml?有没有人有无服务器大型应用程序的例子?
谢谢大家!
我是无服务器框架的新手。
我正在启动一个具有多个路由的 Rest API,例如:
获取用户/{userid}
发布用户
获取帐户/{accountid}
发布帐户
我需要 2 项服务 - 帐户 + 用户吗?
最佳实践是什么?如果有 2 个服务,那么 2 个 serverless.yml?有没有人有无服务器大型应用程序的例子?
谢谢大家!
对于您的示例,使用一项服务(serverless.yml)就足够了。
您可以在 1 服务中使用一个 lambda 来处理users
和accounts
请求。
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
这实际上取决于您想要的应用程序架构。看看这里,我想它可能会帮助你决定你真正想要什么。
如果您同时有很多端点,您可能需要 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
简而言之 - 如您所愿。从技术上讲:您可以将多个函数聚合为一个,并根据事件参数属性调用特定的一个。此外 - 您可以在 AWS lambdas(或其他 FaaS)中运行 express/koa 服务器,而不会感到任何痛苦。
+ 作为奖励,您可以使用ANY
和{any+}
:
events:
- http:
path: /foo
method: ANY
- http:
path: /foo/{any+}
method: ANY
但总的来说 - 取决于情况。如果您经常调用特定端点,那么最好将其移动到单独的 lambda。如果您知道很少调用端点的工作台 - 最好将它们聚合在一个 lambda 下。特别是如果您使用热身。
我喜欢架构的一件事是没有正确的答案,但最适合您的问题/情况。最重要的是,最佳/最佳实践是在所有这些方面为您提供帮助的指导方针。
就我而言,我在代码中添加了复杂性,因此我的 CRUD 路径非常简单。cms/{entity} 或 cms/{entity}/{id}。实体意味着我在后端的集合,所以我知道要使用哪个模型。
将此应用于您的问题,您将获得类似以下内容:
GET {entity}/{userid}
POST {entity}
使用此解决方案,您不必为您在数据库中创建的每个新实体创建一个函数。它还具有 SOLID 原则的开闭概念。