【问题标题】:NodeJS Api framework recommendations including Graphql and ACLNodeJS Api 框架推荐,包括 Graphql 和 ACL
【发布时间】:2017-11-13 04:47:10
【问题描述】:

我正在寻找一些 NodeJS 框架/包的建议。 小背景:我曾经编写过初级到专业级的 PHP 代码。主要使用 Laravel 和 CodeIgniter。由于工作变动和专注于其他事情,我已经有 2 年没有接触过 PHP 了。

上半年我发现了 NodeJS,我很喜欢它,它的速度很快,而且能够为 Web 以及桌面应用程序和移动设备创建项目,所有这些都使用相同的语言。

我目前正在为我的新家开发家庭自动化工具,但我有点挣扎,因为我找不到具有以下功能的合适且易于使用的框架(或软件包组合)。 (这仅适用于后端,对于 frondend,我将使用 angular 2、4、5(现在 angular 2 的任何版本))

这是我目前的标准:

  • 简单的 API 框架或实现模型的简单方法。
  • 访问控制 (ACL)
  • Graphql

我尝试了 Loopback 框架,我真的很喜欢它。 它会检查我列表中的 API 框架和 ACL,作为奖励,它几乎适用于您可以映像的每个数据库,但不支持 Graphql。 我尝试添加一些额外的包(loopback-graphql-server、loopback-graphql 和 loopback-graphql-checkacl),但不幸的是我无法使它们正常工作,ACL 无法正常工作或根本无法工作. (我花了几个小时调试 loopback-graphql-server 来找出为什么我在 graphql 使用其余 api 完美工作时收到拒绝访问消息)

所以我正在寻找一些框架或包组合,它可以开箱即用。 任何建议都会有所帮助。

【问题讨论】:

    标签: node.js acl graphql loopbackjs


    【解决方案1】:

    你可以按照SailJS类似的PHP开发架构,你可以轻松管理它

    另一方面,您可以使用 express 制作自己的框架,只是您需要了解 javascript 设计模式的工作原理

    在我的建议中,您可以使用 SailJS Sail JS Web Site

    【讨论】:

      【解决方案2】:

      我记得DHH 写过关于选择“single layer of cleverness”的信息。他的观点是,虽然数据库能够决定哪些数据可以接受,哪些数据不可接受,但这基本上是属于应用程序层的逻辑,应该只存在于那个地方。

      我认为 GraphQL 是一个重新思考这些界限的机会。

      当您的 db 架构位于更强大的 GraphQL 架构(由于能够应用于其背后的每个系统而更强大)时,它会带来什么额外价值? 基于模型的验证带来了自定义类型的可能性有什么价值? 一旦从模型中移除验证等行为,“模型”的抽象有什么价值?

      听起来大部分应用程序将在前端使用 Angular,而您设想的后端是从中获取数据的地方。在这种情况下,添加框架会增加系统中的代码量,提高学习要求,并且一旦置于 GraphQL 之后(IMO)并不能提供明确的附加值。

      您的架构字段和解析器基本上取代了控制器(在类似 Rails 的 MVC 应用程序中),类型和自定义类型的某些组合处理验证,身份验证由 Authorization 标头处理(可能在前端创建Auth0) 和 Higher Order Component or maybe some directives。所缺少的只是一些获取数据的函数。

      我的大部分数据获取函数都是这样包装和导出的(这是example code taken from Arango-js):

      const cursor = await db.query(aql`
        FOR u IN _users
        FILTER u.authData.active == ${active}
        RETURN u.user
      `);
      

      它只是一个函数,干净、简单且可读。无需模型,也无需 ORM。

      我在这里得到的是 GraphQL 提供了我们过去依赖框架提供的大部分(也许是全部?)结构。本质上 GraphQL 是一个框架。那,一些解析器和一大堆其他功能可能就是你所需要的。在某些情况下,拥有 GraphQL 背后的框架是有意义的,但请考虑一下您的框架是否属于其中之一。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-26
        • 2020-06-26
        • 1970-01-01
        • 1970-01-01
        • 2014-02-20
        • 2011-07-08
        • 2010-11-02
        相关资源
        最近更新 更多