我是无服务器框架的新手。
我正在启动一个具有多个路由的Rest API,例如:
获取用户/ {userid}
POST用户
获取帐户/ {accountid}
POST帐户
我需要2项服务 - 帐户+用户吗?
最佳做法是什么?如果2个服务然后2 serverless.yml?任何人都有无服务器大型应用程序的例子吗?
谢谢大家!
答案 0 :(得分:2)
对于您的示例,它足以使用一个服务(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个lambdas(每个实体一个)
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
答案 1 :(得分:1)
这实际上取决于您想要的应用程序架构。 看看here,我认为它可以帮助您决定您想要什么。
如果您一度有很多端点,则可能需要2个服务,因为您将达到资源限制。如果您想为自己的应用设置一个网址,则可以随时设置pathmapping
。
resources:
Resources:
pathmapping:
Type: AWS::ApiGateway::BasePathMapping
Properties:
BasePath: <your base for this service>
DomainName: mydomain.com
RestApiId:
Ref: ApiGatewayRestApi
Stage: dev
答案 2 :(得分:1)
用几句话-如您所愿。
从技术上讲:您可以将多个函数聚合为一个,然后根据事件参数属性调用特定的函数。此外,您可以在AWS lambdas(或其他FaaS)中运行express / koa服务器,而不会遇到任何麻烦。
+作为奖励,您可以使用ANY
和{any+}
:
events:
- http:
path: /foo
method: ANY
- http:
path: /foo/{any+}
method: ANY
但总的来说-取决于情况。如果您经常调用特定的端点,那么最好将其移至独立的lambda。如果您知道很少调用端点基准,最好将它们汇总在一个lambda下。特别是如果您使用热身。
答案 3 :(得分:0)
我喜欢架构的一件事是没有正确的答案,但是最适合您的问题/情况。最重要的是,最佳/良好做法是在所有方面都可以帮助您的指南。
就我而言,我在代码中增加了复杂性,因此我的CRUD路径非常简单。 cms / {entity}或cms / {entity} / {id}。实体意味着我的集合在我的后端,所以我知道该使用哪种模型。
将此问题应用到您的问题中,您将得到类似的信息:
GET {entity}/{userid}
POST {entity}
使用此解决方案,您不必为在数据库中创建的每个新实体创建函数。它还具有SOLID原则的开放式概念。