最佳实践:环回服务层

时间:2017-02-12 10:05:02

标签: loopbackjs strongloop service-layer

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

我有两个模型UserGameUserGamesUserGamesmany-to-many关系,用于存储不同游戏中用户的得分。我想为weeklyLeaderboard提供一个API,但我不希望它对我的任何模型都是Remote Method,因为它不符合RESTful API指南。

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

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

1 个答案:

答案 0 :(得分:1)

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

在我们最近发布的LoopBack版本4中,我们已将REST API与数据库访问分离。 REST API由Controller类实现,数据结构由Models描述,并且数据库通过Repositories访问。这样可以轻松编写与数据访问详细信息分离的服务层。

在LoopBack 3中,我建议创建一个新模型(例如Leaderboard)并将其作为控制器。要使其正常工作,需要两个技巧:

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

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