公告MongoDB 8.0 隆重推出,这是有史以来最快的MongoDB!了解详情 >
公告Voyage AI 与 MongoDB 携手合作,致力于在 Atlas 上提供更准确和更值得信赖的 AI 应用。了解更多 >

场堆栈解释

除了 MERN 和 MEAN 等其他堆栈之外,另一个堆栈正在迅速普及:FARM 堆栈。

由于利用 MongoDB 和 React 等技术,FARM 堆栈具有与 MEAN 堆栈MERN 堆栈 类似的学习曲线。结合使用 FastAPI、React 和 MongoDB,极大地提高了应用程序的性能、速度和开发的简便性。

目录:

FARM 堆栈解释

FARM 堆栈是一个技术堆栈,汇集了四种最流行的技术:

  • F ast A PI — 基于 Python 的后端框架
  • R eact — 前端 JavaScript 库
  • MongoDB — 灵活的模式 NoSQL 数据库

技术堆栈

一个技术堆栈是各种前端、后端和数据库技术的堆栈,这些技术共同构建了端到端的应用程序,如 Web 应用程序。技术堆栈可以是预构建的(如 MEAN、MERN 和 FARM 堆栈),也可以根据您的具体业务使用案例进行自定义。

FARM 堆栈是使用前端 (React)、后端 (Fast API) 和数据库 (MongoDB) 的全技术堆栈。一个好的技术堆栈应该可扩展的,经济高效,并针对速度和性能进行优化。

通常,应用程序的前端(面向用户/客户端的端)是用 HTML、CSS 和 JavaScript 等技术构建的。React 是一个基于这些技术构建的库,可提供增强的开发者和用户体验。

后端由 Web 服务器和服务器端编程语言组成。这是应用程序的业务逻辑所在的位置。在 FARM 堆栈中,我们使用 FastAPI,这是一个构建在 Stitch 框架之上、速度快如闪电的 Web 框架。

FastAPI 由于其显着的功能(如内置数据验证和自动交互式 API 文档)而迅速发展起来。Fast API 基于异步服务器网关接口 (ASGI),这意味着它支持异步编程,从而速度非常快。

堆栈的底层是数据库层,它充当所有数据的存储中心。由于当今数据的性质(可能来自多个来源、采用不同格式、而且数量庞大),我们需要一个能够灵活处理此类非结构化数据的数据库。

MongoDB 是最流行的 NoSQL 数据库,它是存储、处理、分析和检索企业想要捕获的大数据的理想平台。MongoDB丰富的查询语言、聚合和许多其他功能可确保您的应用程序准确地获得所需的数据,从而节省开发者编写代码来对数据进行广泛的操作和转换的工作量。

FARM 堆栈的与众不同特性

FARM 堆栈结合了多种强大的技术,可以进行快速开发,通过协程轻松处理多个并发连接,并且易于学习。

FARM 堆栈如何工作?

FARM 堆栈易于理解,学习曲线极低。您只需熟悉 JavaScript、Python 和 MongoDB,就可以轻松构建项目。这些技术对许多其他堆栈和业务也很有用,因此学习这些技术可能对您的职业生涯至关重要。

用户可以在应用程序上执行下列操作之一:

HTTP 请求

  • 发布
  • 获取
  • PUT
  • 删除

对应的CRUD操作

  • C = 创建/插入
  • R = 读取
  • U = 更新
  • D = 删除

 

每当用户对其中任何一个发出 HTTP 请求时,React 都会使用必要的参数构建请求,并将其发送到后端服务器。在后端,FastAPI 将请求路由到适当的方法,并调用适当的数据库方法来执行操作。一旦在数据库级别成功执行查询,后端就会接收并处理响应,然后发送到 React 前端。然后,React 向用户显示成功/失败消息。

React 前端

React JS 库提供了许多可重用的开箱即用的常见实用程序和组件,从而加快了生产就绪型前端应用程序的开发。作为 FARM 堆栈的一部分,React 用于将 HTTP 请求发送到后端,并将后端响应显示到前端。

React JS 使用虚拟 dom,这仅更新应用程序已修改的部分,而不是整个树结构。这会使应用程序变得更快。另一个显着的功能是 JSX(JavaScript 扩展)语法,通过它可以在 HTML 标签内添加 JavaScript 元素。因此,元素值的任何更改都会立即反映,无需刷新或重新启动服务器。

考虑用户发出用于更新手机号码的简单 HTTP 请求。React 使用简单的钩子 (useState) 存储用户输入的数据。

这些数据将使用 JSON 格式的 PUT 请求发送到应用程序层。

由于 FARM 堆栈支持异步编程,因此我们可以使用基于承诺并支持所有浏览器的 axios JS 库。通过使用 axios,我们可以消除创建和配置 HTTP 请求的复杂性。

尽管 React 接受多种数据格式,但 JSON 格式是最受欢迎的,因为它是轻量级的,使用的带宽更少。

FastAPI

FastAPI 是一个基于 Python 的异步 Web 框架。在 FARM 堆栈中,Fast API 充当中间件,处理从 React 应用程序接收到的 HTTP 请求并将响应发回。FastAPI 在 uvicorn 服务器 上运行,该服务器基于异步 Web 服务器的 ASGI 服务器规范

Fast API 利用非阻塞 I/O 操作通过协程处理多个并发负载。例如,如果有多个请求更新在线门户上的手机号码,FastAPI 不会阻塞资源,而是创建一个协程,可以并行处理多个请求。

假设有五个并发请求来更新某个手机号码。如果逐一处理,就会浪费 CPU 和时间。使用 Python 异步库中的 async 关键字,我们可以开始并行异步处理请求。假设第一个请求正在等待获取结果(查找要更新的手机号码)。此等待时间可用于启动第二个请求,依此类推。这样,每个请求都完全独立于其他请求,并且不会发生阻塞或等待。

在上述协程中,main()是程序的入口点,之后每个请求都作为单独的协程异步处理。

FastAPI 提供的 Web 框架提供:

  • 完全支持异步编程,从而提供高性能。
  • 依赖注入,即声明项目依赖关系并在运行时注入。
  • 使用 pydantic 库进行数据验证和序列化。
  • 使用 asyncio python 库进行异步编程。
  • 使用 Swagger 自动为 API 终结点建立 API 文档记录。
  • 类型提示和注释。

我们可以使用 Python 装饰器(@app.get、@app.put 等)来定义 HTTP 请求和路由路径。

接下来,您可以使用请求的路径或查询参数访问输入数据。pydantic 库将负责数据验证。

然后,可以创建异步函数来更新 MongoDB 数据库中的手机号码:

在现实世界中,您很可能希望根据某些条件(如 customer_id)更新手机号码。在这种情况下,您可以在 FastAPI 终结点(路由 URL)中添加路径参数:

更新手机号码的异步函数将 customer_id 和要更新的手机号码作为参数:

“结果”是一个 BSON 文档,被 异步驱动器 马达 自动转换为 Python 字典。然后,FastAPI 将其转换为 JSON 响应。

您还可以在 FastAPI 代码中根据结果构建自定义响应。

React 应用程序使用钩子来设置变量状态,因此您可以简单地将响应设置到变量中,React 会将其显示在前端页面上:

FastAPI 使用依赖项提供对权限管理和基于角色的访问控制的内置支持,例如,验证用户身份或授权对路由的访问权限。

异步服务器网关接口 (ASGI)

ASGI 提供了在 Python 中构建异步应用程序和服务器的规范。这使得应用程序能够执行数据库查询或网络请求等 I/O 操作,而不会阻塞其他操作。ASGI 旨在处理除了通常的 HTTP 请求和响应之外的长期连接。此功能使得它们对实时应用程序非常有用,因为在这种应用程序中,客户端和服务器之间的双向通信是必需的。

Uvicorn Web 服务器

Uvicorn 是基于 ASGI 规范的异步 Web 服务器。它提供了高性能,非常适合高效处理高应用程序负载。使用 Fast API 的 Python 开发者可以使用 uvicorn 服务器来部署和管理其应用程序。Uvicorn 还支持 web socket。FastAPI 与其他一些服务器兼容,例如 Hypercorn 和 Quart,但 uvicorn 由于其性能和稳定性而成为首选。

Motor 异步驱动程序

Motor 是用于连接 FastAPI (Python) 和 MongoDB 的异步驱动程序。它类似于 pymongo 驱动程序,但适用于异步应用程序。Motor 也可以很好地与 MongoDB Server 社区版或企业版搭配使用。要了解有关马达的更多信息,请访问 文档页面

MongoDB 数据平台

MongoDB 是用于根据应用程序的需要存储和检索数据的数据层。

MongoDB 是一种文档数据库,以类似 JSON 的格式(即 BSON(二进制 JavaScript 对象表示法))存储数据。得益于其文档模型,MongoDB 在存储数据方面提供了高度灵活性,并可轻松适应任何架构更改。

MongoDB 数据库有多种形式 — MongoDB 企业数据库MongoDB 社区数据库 和云数据库 (Atlas)。使用 MongoDB Atlas ,您无需安装任何内容。只需创建一个免费帐户,就可以启动一个集群。

MongoDB 提供高效的数据建模选项,在优化性能的同时保持数据的一致性和灵活性。例如,要为您的 FARM 堆栈应用程序创建数据模型,您可以定义工作负载并识别主要实体之间不同类型的关系 — 1:1、1:多关系或多:多关系。基于此,您可以决定文档结构。MongoDB 遵循一个简单的规则,即同时访问的数据应存储在一起。您可以选择将实体的所有相关详细信息嵌入到单个文档中,也可以将数据规范化并使用标识符引用(就像在关系数据库中一样)。

MongoDB Atlas 是一个云数据开发平台,提供管理现代应用程序所需的全面功能。例如,内置的高可用性和容错能力、自动备份和恢复、垂直和水平可扩展性、自动服务器预配、设置、配置和修补。

MongoDB 丰富的聚合框架与 Python 丰富的科学库相结合,非常适合当今的 AI 和机器学习使用案例,如欺诈检测、实时数据分析、定向客户推荐、分析用户行为等。MongoDB Atlas 可以让您访问其他功能,如 Atlas Search、MongoDB Charts、应用程序服务、BI 工具连接器、数据联合、流处理等等。

要从 FastAPI 后端创建 MongoDB 连接,只需设立 URL,然后打开数据库收集:

建立连接并获取数据库后,您可以通过适当的方法(例如,我们在 FastAPI 部分 中使用的 update_one() 方法)用它们执行任何 CRUD 操作。

您可以使用我们的TODO 应用程序创建完整的 FARM 堆栈应用程序,以获取有关构建您的应用程序所需的端到端代码和设置的指导。

面向 Python 开发者的全栈 FastAPI 应用生成器

MongoDB 为 Python 开发者 提供 全栈 FastAPI 应用程序生成器 。以前,Python 开发者必须手动将身份验证、测试等组件集成到主应用程序中。MongoDB 全栈 FastAPI 应用生成器提供了一个结构良好的应用框架,从而简化了初始项目设置。应用生成器的部分主要功能如下:

  • 通过集成前端与后端组件来形成完整的 Web 应用程序堆栈。
  • 内置的身份验证系统。
  • 操作和监控工具。

FARM 堆栈与 MERN 堆栈

FARM 和 MERN 堆栈都使用 React 和 MongoDB,它们提供了高灵活性和性能。区别在于使用 Node.js 与 FastAPI,选择两个堆栈之一取决于您的业务使用案例或个人偏好。

  • MERN 堆栈的学习曲线更短,因为开发者只需学习和为后端和前端编写 JavaScript 代码,而对于 FARM 堆栈,还需要学习 Python。此外,MERN 堆栈提供了统一的体验以及更好的代码可读性和可维护性。
  • Node.js 享有更多的社区支持,并针对大量使用案例和领域提供丰富的文档。

尽管如此,FastAPI 在数据分析和数据科学支持方面的得分要高得多:

  • Python 拥有庞大的用于数据科学和机器学习任务的高级库生态系统,因此可以轻松地将分析和数据处理管道添加到 Web 应用程序中。虽然 Node.js 确实支持这些库,但它们并不像 Python 库那么详尽。
  • FastAPI 直观的 API 设计、自动的 OpenAPI 文档生成以及内置的数据验证支持简化了 API 开发,让各种技能水平的开发者都可以轻松使用。由于基于回调编程的概念以及管理依赖项的复杂性,Node.js对于初学者来说可能很难学习。
  • Python 是严格类型的,而 JavaScript 是松散类型的,这可能会导致运行时错误。

FARM 堆栈的使用案例

FARM 堆栈适用于各个领域和行业范围广泛的使用案例,下面列出了其中一些:

  • 构建动态交互式网站和网页:在前端,React 为用户提供交互式实时体验,而后端 FastAPI 则可让您创建强大的 REST API 来处理身份验证、授权和事务。MongoDB,由于其灵活的架构,可以轻松适应不断变化的应用程序需求和不断变化的数据结构——例如,电商平台和内容管理系统。
  • AI 和数据分析:FARM 堆栈利用 MongoDB 聚合框架和 Python 数据科学库的强大功能,为开发者构建用于数据处理、实时分析、获得实用见解和可视化报告生成的系统提供强大的基础。React 前端可用于交互式仪表盘和数据探索。
  • IoT (Internet of Things) 应用程序:通过使用 React,开发者可以为远程监控和控制创建流畅的界面。FastAPI 处理数据提取、设备通信和路由等服务。MongoDB 可以存储传感器数据、元数据和日志,并可用于分析和异常检测。
  • 聊天应用程序:React 的实时渲染功能使能够聊天代理和用户之间顺畅的实时通信。FastAPI 的路由功能和 websocket 支持可以处理用于身份验证、实时消息传递和双向通信的 HTTP 请求。MongoDB 灵活且可扩展的架构使其非常适合处理动态且不断变化的聊天数据。

总结

FARM 堆栈是一个有前景的技术堆栈,并提供强大的功能来构建高度灵活,更具扩展性和高性能的应用程序。在未来的日子里,您可以期待更多技术创新和进步,并将更专注于提升开发者体验和生产力、自动化以及与其他技术的集成,以促进新的使用案例和应用程序。要开始使用 FARM 堆栈,请观看 MongoDB.live 教程

常见问题解答

开始使用 MongoDB Atlas

免费试用
数据库的插图。