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