GRE*_*608 5 rest arangodb foxx
我正在开发一款应用程序,它将极大地受益于 Arangos 的多模型功能。考虑到应用程序对后端的需求,我得出的结论是,大多数(如果不是全部)都可以通过 REST API 提供服务,以帮助更清晰的设计,以便将来的开发和与其他应用程序的集成。然后,多个 Web 和移动前端框架将使用该 API 来处理其余逻辑。该项目将使用 NodeJS 生态系统,使用 Javascript 进行整个堆栈的开发。
。
问题本身:
是否应该并且可以使用 arangodb + Foxx 创建完整的后端堆栈来服务 REST API,从而避免堆栈中的另一层/组件?例如express/hapi/loopback等。
。
主要后端要求:
。
主要寻找:
。
附带问题(可能回答上面的一些问题):Foxx 可以利用一些通过 npm 提供的节点中间件吗?
在此先感谢您的时间!
您可以使用 ArangoDB Foxx 作为应用程序的唯一后端,但是在执行此操作时,请务必牢记 Foxx 的限制(与 Node.js 等通用 JS 环境相比)。
你提到了加密。虽然 ArangoDB 确实支持某些加密技术(例如 HMAC 签名和密码的 PBKDF2 密钥派生),但支持并不像 Node.js 那样详尽和可扩展。此外,当使用计算成本高昂的加密技术时,这将影响数据库的性能(因为与 Node.js Foxx 不同,Foxx 是严格同步的,因此所有操作都应被视为阻塞)。
ArangoDB 不支持开箱即用的基于角色的身份验证,但使用 Foxx 在 ArangoDB 中实现它是完全合理的(就像您在 Node.js 中实现它一样,只是您不需要离开数据库)。
对于会话,通常有两种可能的方法:您可以使用包含会话文档的集合(使用 ArangoDB 作为会话后端),或者可以通过使用签名令牌使服务保持无状态(Foxx 提供开箱即用的 JWT 支持)。
复杂/存储查询和输入验证(使用最初为 hapi 编写的 joi 模式库)实际上是 Foxx 的一些主要用例,因此这些应该不会有任何问题。
Foxx 有自己的排队任务机制,也可以提前安排或定期重复。但是,根据您的要求,外部作业或消息队列可能更适合。好处是您可以立即开始使用内置作业队列,并且如果在开发过程中出现需要,仍然可以转向专用解决方案。
至于中间件和 NPM 包:Foxx 与 Node.js 代码不完全兼容。虽然我们提供了大量的兼容性代码并尽可能保持核心模块兼容,但一个很大的区别是 Node.js 通常用于执行异步操作,而在 ArangoDB 中所有操作都是同步的。
如果您的 Node.js 模块不使用加密、文件或网络 I/O,也不使用异步 API(例如 setTimeout、Promise),它们可能与 Foxx 兼容。许多实用程序库(例如 lodash)都可以毫无问题地工作。即使您发现某个模块不起作用,也可以为其编写一个适配器,就像我们对 mocha(集成到 Foxx 中)和 GraphQL(通过 NPM 上的 graphql-sync 包)所做的那样。
根据我的经验,将 Foxx 服务放在 Node.js 的薄层后面(例如,一个简单的 Express 应用程序,主要只是代理您的 Foxx API)和/或将后端的某些部分委托给独立的 Node 是一个很好的方法。 Node.js 微服务(例如与电子邮件或 LDAP 等非 HTTP 服务集成),可以通过 HTTP 集成到 Foxx 中。
还有一件事:虽然由于 Node 特定的依赖关系和异步逻辑,许多现有的 Express 中间件可能与 Foxx 不兼容,但 ArangoDB 3 将带来新版本的 Foxx,支持使用功能上与 Express 兼容的 API 的中间件。
小智 4
我刚刚开始将我的 sails 应用程序移植到 FOXX 应用程序,以便我可以回答您的一些问题。
ArangoDB 中基于角色的授权可能比您想要的级别太高。在我们的例子中,我们使用外部服务以非常细粒度的级别(远低于顶点或边)授权各种基于 Web 和服务的应用程序。我的感觉是,该级别的授权需要您自己用 javascript 编写。如果它只是基于每个集合的 CRUD,那么它应该不需要太多的努力。
对于授权和会话,我会查看 FOXX 示例:FOXX 授权会话示例
目前尚不清楚您所询问的有关加密的内容。如果您谈论的是 SSL 连接,那么它是本机支持的(请参阅 arangodb 端点)。至于内部加密,有一个javascript加密模块ArangoDb crypto
javascript joi 包支持条目验证等。
复杂查询...绝对如此,并且在 ArangoDB 3.x 版本中变得更好。遍历可以被链接起来(使用一个边缘集合向下,然后使用另一个边缘集合向上)。
当考虑效率时,您是正确的。这是我们从 sails 转向 FOXX 的主要原因。在我们的例子中,我们根据外部服务的权限过滤查询结果。这意味着如果客户端指定了这些属性,我们就无法使用 ArangoDB 原生的跳过和限制支持。在航行中,我们必须分块返回结果并进行收集,直到达到适当的跳过值和限制值。通过迁移到 FOXX,我们节省了大量的网络和其他资源。我们通过让 sails 将请求转发到我们的原型 FOXX 实现来对此进行测试。这比帆后处理设置的缩放效果要好得多。
您可以有限制地使用 NPM 模块。请参阅JavaScript 模块
| 归档时间: |
|
| 查看次数: |
1157 次 |
| 最近记录: |