我更多地了解ArangoDB及其Foxx框架。但是我不清楚通过使用该框架构建我自己的独立nodejs应用程序来获取API /访问控制,逻辑等,我获得了什么。
Foxx提供的常规nodejs应用程序不会是什么?
答案 0 :(得分:12)
完全披露:我是ArangoDB核心维护者,也是Foxx团队的一员。
我建议您查看webinar I gave last year,详细了解Foxx和Node之间的差异以及使用ArangoDB时使用Foxx的优势。我会尝试在这里给出一个快速摘要。
如果您将单一责任原则等想法应用于您的体系结构,那么您的服务器端代码有两个职责:
后端:使用后端数据存储(即ArangoDB或其他数据库)持久化和查询数据。
前端:将查询结果转换为客户端可接受的格式(例如HTML,JSON,XML,CSV等)。
在大多数传统应用程序中,这两个职责由在同一进程中运行的相同单一应用程序代码库完成。
然而,与数据存储交互的任务通常需要编写大量特定于数据库技术的代码。您需要编写查询(例如,使用SQL,AQL,ReQL或任何其他特定于技术的语言)或使用特定于数据库的驱动程序。
此外,在许多非平凡的应用程序中,您需要与存储过程之类的东西进行交互,这些存储过程也是“后端代码”的一部分,但存在于数据库中。因此,除了让应用程序服务器执行两个不同的任务(存储和呈现)之外,其中一个任务的一半代码最终会生活在其他地方,通常使用完全不同的语言。
Foxx允许您将我们识别为服务器端代码“后端”的逻辑移动到ArangoDB中,从而解决了这个问题。您不仅可以隐藏更多特定于应用程序的API背后的查询语言,边缘和集合的所有细节,还可以消除处理将导致多次往返数据库的请求所需的网络开销。
对于琐碎的应用程序,这可能意味着您可以完全消除节点服务器并直接从客户端访问您的Foxx API。对于更复杂的场景,您可能希望使用Node来构建Foxx服务可以利用的外部微服务(例如,与外部非HTTP API接口)。或者您只需将传统的Node应用程序放在ArangoDB之前,并使用Foxx创建一个HTTP API,它比数据库的原始HTTP API更能代表应用程序的问题域。
值得注意的是,结构上Foxx服务与Node应用程序并不完全不同。您可以使用NPM依赖项并将代码拆分为模块,它们都可以存在于版本控制中并从zip包中部署。如果您不相信我会建议您尝试将一些最常见的查询作为Foxx端点进行尝试,然后决定是否要将更多逻辑移到其上。