【发布时间】:2016-11-19 09:28:42
【问题描述】:
我有两个资源,游戏和玩家,都有 crud 功能。 这些应该在同一个无服务器服务中吗?我想将它们分开,但是如何将它们放在同一个api网关中?
【问题讨论】:
-
所以您希望它们成为 2 个独立的项目?为什么不直接将函数放在无服务器项目的不同目录中?
标签: aws-api-gateway serverless-framework
我有两个资源,游戏和玩家,都有 crud 功能。 这些应该在同一个无服务器服务中吗?我想将它们分开,但是如何将它们放在同一个api网关中?
【问题讨论】:
标签: aws-api-gateway serverless-framework
无服务器框架项目部署单个 API 网关。因此,如果您希望它位于不同的 API 网关中,则需要单独的无服务器框架项目。
根据您正在制作的服务的规模,它可能有意义,也可能没有。
要合并两个更高级别的 API 网关,您可以使用 API 网关自定义域并根据不同 API 网关和阶段的路径代理请求,为它们保留一个域。
【讨论】:
在您的示例中,您希望将它们保留在相同的无服务器框架中。我会在src/controllers 中创建两个文件player.js 和game.js 来分离逻辑。
您可以使用以下 YAML 文件设置无服务器
functions:
player_info:
handler: src/controllers/player.info
events:
- http:
path: player # path in the url
method: get
player_create:
handler: src/controllers/player.create
events:
- http:
path: player # path in the url
method: post
player_delete:
handler: src/controllers/player.delete
events:
- http:
path: player # path in the url
method: delete
game_info:
handler: src/controllers/game.info
events:
- http:
path: player # path in the url
method: get
game_create:
handler: src/controllers/game.create
events:
- http:
path: player # path in the url
method: post
game_delete:
handler: src/controllers/game.delete
events:
- http:
path: player # path in the url
method: delete
【讨论】:
一种方法是使用无服务器来部署 lambda,但手动设置 API Gateway 以将端点链接到 lambda。
这里说明了无服务器的限制:https://serverless.com/framework/docs/providers/aws/guide/services/
声明的地方:
目前,每项服务都将在 AWS API Gateway 上创建一个单独的 REST API。由于 AWS API Gateway 的限制,每个 REST API 只能有一个自定义域。如果您计划制作大型 REST API,请注意此限制。此外,修复工作正在进行中,是当务之急。
根据我们的经验,我们设法在客户端中使用具有不同 API 和路由对象的服务。
要决定它们是否应该在同一个无服务器服务中,您需要进入建模。在我们的案例中,我们回答以下问题:
当你改变游戏时,你会改变玩家等吗?
这个链接可以帮助你回答这个问题:https://martinfowler.com/articles/microservices.html
【讨论】: