我有两个资源,游戏和玩家,都有 crud 功能。这些应该在同一个无服务器服务中吗?我想将它们分开,但是如何将它们放在同一个 api 网关中?
3 回答
无服务器框架项目部署单个 API 网关。因此,如果您希望它位于不同的 API 网关中,则需要单独的无服务器框架项目。
根据您正在制作的服务的规模,它可能有意义,也可能没有。
要合并两个更高级别的 API 网关,您可以使用 API 网关自定义域并根据不同 API 网关和阶段的路径代理请求,为它们保留一个域。
一种方法是使用无服务器来部署 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
在您的示例中,您希望将它们保留在相同的无服务器框架中。我将创建两个文件player.js
并game.js
输入src/controllers
以分离出逻辑。
您可以使用以下 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