最佳实践:环回中的服务层

Best Practice : Service Layer in Loopback

我正在环回中构建应用程序,想知道如何使用与任何模型无关的 API 构建服务层。这是我的场景。

我有两个模型 UserGameUserGamesUserGames是一个many-to-many关系,存放的是用户在不同游戏中的得分。我想为 weeklyLeaderboard 提供 API,但我不希望它成为我的任何模型的 Remote Method,因为它不适合 RESTful API 准则。

我现在能找到的唯一实施方法是在 server/boot/routes.js 中创建一个服务 common/service/weeklyLeaderboard.js 和一个 route 来访问该服务。在那种情况下,我将不得不重新安排我的 middleware.json 中的中间件,以便以与远程方法相同的方式处理非远程方法端点并可以访问 currentContext。

是否有更好的方法来实现与特定模型无关但访问多个数据访问和业务对象的 APIs。

免责声明:我是 LoopBack 的合著者和积极维护者。

在我们最近发布的 LoopBack 版本 4 中,我们将 REST API 与数据库访问分离。 REST API 由 Controller classes, data structures are described by Models and database is accessed via Repositories 实现。这使得编写与数据访问细节分离的服务层变得容易。

在 LoopBack 3 中,我建议创建一个新模型(例如 Leaderboard)并将其视为控制器。需要两个技巧才能让它发挥作用:

  • 继承自 Model,而不是默认值 PersistedModel。这样你的类似控制器的模型开始是空的,没有(内置的)远程方法。
  • 不要将类似控制器的模型附加到任何数据源。在 server/model-config.json 中,将新模型的 dataSource 条目设置为 null

然后您可以将 weeklyLeaderboard 端点定义为常规 remote method 并获得 LoopBack 提供的所有好处,例如您的新端点将包含在生成的 Swagger 规范中,并可通过 API Explorer 进行测试。