FastAPI+React全栈开发02 什么是FARM技术栈

Chapter01 Web Development and the FARM Stack

02 What is the FARM stack and how does it fit together?

FastAPI+React全栈开发02 什么是FARM技术栈

It is important to understand that stacks aren’t really special, they are just sets of technologies that cover different parts of a modern web app, blend well together, and enable us to satisfy certain criteria while building web apps. To have a functional web application or site, we need to have a system consisting of the following:

  • An operating system: Usually, this is Unix/Linux based
  • A database layer: A SQL or NoSQL solution. In our case, we will use MongoDB.
  • A web server: Apache and Nginx are quite popular, but we will talk about Python solutions for FastAPI, such as Uvicorn or Hypercorn.
  • A development environment: PHP, Node.js/JavaScript, .NET, or Python.

重要的是要理解堆栈并不是特别的,它们只是覆盖现代web应用程序的不同部分的技术集合,很好地融合在一起,使我们能够在构建web应用程序时满足某些标准。要有一个功能web应用程序或网站,我们需要有一个由以下组成的系统:

  • 操作系统:通常基于Unix/Linux
  • 数据库层:SQL或NoSQL解决方案。在本例中,我们将使用MongoDB。
  • web服务器:Apache和Nginx非常流行,但我们将讨论FastAPI的Python解决方案,如Uvicorn或Hypercorn。
  • 开发环境:PHP、Node.js/JavaScript、.NET或Python。

Optionally, and more often than not, we could also add a frontend library or framework (such as Vue.js, Angular, React, or Svelte) since the vast majority of web development companies benefit from adopting one in terms of consistency, development speed, and standards compliance. And let’s face it, it is 2022, and you just cannot afford to handcraft your user interfaces without a library or a framework.

通常情况下,我们也可以添加一个前端库或框架(如Vue.js、Angular、React或Svelte),因为绝大多数web开发公司在一致性、开发速度和标准遵从性方面都受益于采用一个库或框架。让我们面对现实吧,现在是2022年,如果没有库或框架,你就无法手工制作用户界面。

Let’s list the most famous stacks or, at the very least, some of those that have a popular acronym:

  • MERN: MongoDB + Express.js + React + Node.js is still probably one of the most popular ones today. Developers can be comfortable and never leave JavaScript, except when they need to write some style sheets. With the addition of React Native for mobile apps and something like Electron.js for desktop apps, a product can encompass virtually every platform while relying solely on JavaScript.
  • MEAN: MongoDB + Express.js + Angular.js + Node.js is similar to the previously mentioned MERN, with Angular.js managing the frontend in a more structured Model-View-Controller(MVC) way.
  • PERN: Postgres + Express.js + React + Node.js is for those who want the stability and features of a Postgres relational database. Often, it is used in conjunction with an object-relational mapper.
  • LAMP: Linux + Apache + MySQL + PHP is probably the first acronym to gain popularity and one of the most perused in the past 20 years.

让我们列出最著名的堆栈,或者至少是其中一些有一个流行的缩写:

  • MERN: MongoDB + Express.js + React + Node.js可能仍然是当今最流行的。开发人员可以感到舒适,永远不会离开JavaScript,除非他们需要编写一些样式表。随着移动应用的React Native和桌面应用的Electron.js的加入,一个产品可以覆盖几乎所有的平台,而仅仅依赖于JavaScript。
  • MEAN: MongoDB + Express.js + Angular.js + Node.js类似于前面提到的MERN, Angular.js以更结构化的模型-视图-控制器(MVC)方式管理前端。
  • PERN: Postgres + Express.js + React + Node.js是为那些想要Postgres关系数据库的稳定性和特性的人准备的。通常,它与对象关系映射器一起使用。
    LAMP: Linux + Apache + MySQL + PHP可能是第一个流行的首字母缩略词,也是过去20年来最受关注的缩写之一。

The first three stacks run on the Node.js platform (a server-run JavaScript V8 engine) and have a web framework in common - although Express.js is the most popular, there are excellent alternatives in the Node.js universe, such as Koa.js, Fastify.js, or some more structured ones such as Nest.js.

前三个堆栈运行在Node.js平台上(一个服务器运行的JavaScript V8引擎),并且有一个共同的web框架——尽管Express.js是最流行的,但在Node.js领域也有很好的替代方案,比如Koa.js, Fastify.js,或者一些更结构化的,比如Nest.js。

One popular, and very interesting, Python based combination is using the Django web framework and the excellent Django REST Framework (DRF), which is a toolkit for building REST APIs in a modern and logical wawy. Django itself is very mature and popular among Python developers and offers flexibility and development speed along with some typical Django goodies: an admin site, the possibility of customizing and serilizing REST responses, the option to choose between functional and class based views, and more.

一个流行且非常有趣的基于Python的组合是使用Django web框架和优秀的Django REST框架(DRF), DRF是一个以现代和逻辑的方式构建REST api的工具包。Django本身非常成熟,在Python开发人员中很受欢迎,它提供了灵活性和开发速度,以及一些典型的Django优点:一个管理站点,定制和序列化REST响应的可能性,在基于函数和基于类的视图之间进行选择,等等。

The choice of the stack should be heavily conditioned by the type and the scope of the project at hand. Startups, but also small internal tools, can often benefit from agile, rapid development with flexibility and potential scalability down the road. Additionally, time-to-market, the availbility of developers (the talent pool) , and the maintainability and support of individual layers play a key role in the process of stack selection.

堆栈的选择应该在很大程度上取决于当前项目的类型和范围。初创公司,以及小型内部工具,通常可以从敏捷、快速的开发中受益,并具有灵活性和潜在的可扩展性。此外,上市时间、开发人员的可用性(人才库)以及各个层的可维护性和支持在堆栈选择过程中起着关键作用。

FARM is a new acronym, and there aren’t many resources covering it as a whole, though there are excellent resources on MongoDB and React, which have a great degree of adoption and maturity. On the other hand, FastAPI is much newer but provides excellent online documentation.

FARM是一个新的首字母缩略词,虽然MongoDB和React上有很好的资源,但并没有太多的资源涵盖它,它们的采用程度和成熟度都很高。另一方面,FastAPI更新得多,但提供了优秀的在线文档。

Let’s dissect this funny acronym. FA stands for FastAPI, a very interesting and, in technology years, brand new Python web framework. R stands for React, which is, arguably, the most popular UI library, while M denotes the data layer, MongoDB, which is, arguably, the most popular NoSQL database available today. I honestly don’t know if the acronym started as a joke, but it sure sounds great.

让我们来剖析一下这个有趣的缩略词。FA代表FastAPI,一个非常有趣的,在技术领域,全新的Python web框架。R代表React,可以说是最流行的UI库,而M代表数据层MongoDB,可以说是当今最流行的NoSQL数据库。老实说,我不知道这个首字母缩略词是不是一个笑话,但它听起来确实很棒。

The main objective of this chapter is to get you acquainted with the included technologies at a high level and compare them with the alternatives. We will try to set the ground for a simple project that we will be building throughout the book, a used automobile sales website, and then add some functionality while trying to implement some of the best practices in all of the areas. At the end of the chapter, you should hopefully become interested (maybe even excited) in the proposed technology mix and be able to evaluate whether this type of setup could benefit your future projects and whether it is something useful to add to your web developer’s toolkit.

本章的主要目的是让您在较高的水平上熟悉所包含的技术,并将它们与替代技术进行比较。我们将尝试为一个简单的项目奠定基础,我们将在本书中构建一个二手车销售网站,然后添加一些功能,同时尝试在所有领域实现一些最佳实践。在本章的最后,你应该对所提出的技术组合感兴趣(甚至可能兴奋),并能够评估这种类型的设置是否对你未来的项目有益,以及它是否对你的web开发人员工具包有用。

The following diagram provides a high-level overview of the moving parts involved in the FARM stack:

下图提供了FARM堆栈中涉及的移动部件的高级概述:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

As you can see from the preceding diagram, the FARM stack is composed of three layers. The user performs an action using the client, which, in our case, will be based on React, this ultimately creates a bundle of HTML, CSS, and JavaScript. This user acton (a mouse click, a form submit, or some other event) then triggers an HTTP request (such as GET, POST, PUT, or another HTTP verb with a payload) that gets processed by our REST API service (FastAPI).

从前面的图中可以看到,FARM堆栈由三层组成。用户使用客户端执行一个操作,在我们的例子中,客户端是基于React的,这最终会创建一个HTML、CSS和JavaScript的包。这个用户操作(鼠标单击、表单提交或其他事件)然后触发一个HTTP请求(例如GET、POST、PUT或其他带有效负载的HTTP谓词),该请求由REST API服务(FastAPI)处理。

The Python part is centered around FastAPI and optional dependencies and is served by uvicorn, a fast Python based server. The backend is responsible for dispatching the appropriate database calls to MongoDB using various commands, queries (such as findOne, find, create, update, and more) and leveraging the MongoDB aggregation framework. The results obtained from the database are interpreted by FastAPI through the Python driver of choice (Motor), converted from BSON into appropriate Python data structures, and finally, output from the REST API server in the form of plain JSON.

Python部分以FastAPI和可选依赖项为中心,由快速的基于Python的服务器uvicorn提供服务。后端负责使用各种命令、查询(如findOne、find、create、update等)向MongoDB调度适当的数据库调用,并利用MongoDB聚合框架。FastAPI通过选择的Python驱动程序(Motor)解释从数据库获得的结果,将BSON转换为适当的Python数据结构,最后以纯JSON的形式从REST API服务器输出。

Since we will use Motor, which is an asynchronous Python driver for MongoDB, these calls will be handled asynchronously. Finally, returning to the diagram and the arrow denoted by JSON, the data is fed to the UI where it is handled by React and used to update the interface, render the necessary components, and synchronize the UI with React’s virtual DOM tree.

由于我们将使用Motor,这是MongoDB的异步Python驱动程序,因此这些调用将被异步处理。最后,回到图表和JSON表示的箭头,数据被提供给UI,由React处理,用于更新界面,呈现必要的组件,并将UI与React的虚拟DOM树同步。

In the following sections, we will go over the motivations behind the birth of the FARM stack. Additionally, we will go over each component and the features that make it a good fit in more detail. After a brief introduction to the benefits of the stack as a whole, I will provide a high overview of each choice and underline the benefits that it can provide to a modern web development workflow.

在下面的部分中,我们将讨论FARM堆栈诞生背后的动机。此外,我们将详细介绍每个组件和使其适合的功能。在简要介绍了堆栈作为一个整体的好处之后,我将提供每个选择的高度概述,并强调它可以为现代web开发工作流提供的好处。

Why the FARM stack

I truly believe that the flexibility and simplicity of the stack, along with the components comprising it, could give you a real boost in terms of development speed, extensibility, and maintainability while allowing for scalability (due to the distributed nature of MongoDB on the one hand and the async nature of FastAPI on the other hand) down the road, which might prove crucial should your product need to evolve and become bigger than it was initially supposed to be. The ideal scenario would probably be a small-to-medium-scale web app that you could play with and find the time to experiment with a bit. Finally, I believe that developers and analysts alike could greatly benefit from Python’s ecosystem and extensibility through a rich ecosystem of modules that encompasses virtually every human activity that includes some type of computing.

我真的相信堆栈的灵活性和简单性,以及组件组成,可以给你一个真正的提高发展速度,可扩展性,为可扩展性和可维护性,同时允许(由于MongoDB的分布式特性,另一方面另一方面FastAPI)的异步性质,可能是至关重要的你的产品需要进化,成为比最初应该是。理想的情况可能是一个中小型的web应用程序,你可以玩,并找到时间进行试验。最后,我相信开发人员和分析人员都可以通过丰富的模块生态系统从Python的生态系统和可扩展性中受益匪浅,这些模块生态系统几乎涵盖了包含某种类型计算的所有人类活动。

Evolution in Web Development

The beginning of the 2020s saw an interesting blurring of the borders between classical web development and other types of computing. Data science has lost some of its mystique, much of the science of it has been turned into a craft, and it has descended into the plebs and the not-so-scientifically inclined developers. Now, algorithms such as linear regressions, clustering, even neural networkds, and ensemble methods are very easy to embed even in the most mundane systems in order to gain a feature, to achieve a slight performance gain, or add a simple recommendation engine. The visualization toolbox has moved online and classical workhorses such as Ggplot2(for R) and D3.js, which require a thorough understanding of the underlying technologies, are now being given a run for their money by various combinations of D3.js and Svelte or React, SVG or Canvas, based solutions and more; for example, full-blown Python and React web application frameworks specialized for data visulization such as Plotly - Dash, Streamlit, or simple yet powerful solutions such as Chart.js.

21世纪20年代初,经典web开发和其他类型的计算之间的界限出现了有趣的模糊。数据科学已经失去了它的一些神秘性,它的大部分科学已经变成了一门手艺,它已经下降到平民和不太科学的开发人员。现在,线性回归、聚类、甚至神经网络和集成方法等算法都很容易嵌入到最普通的系统中,以便获得一个特征,实现轻微的性能增益,或者添加一个简单的推荐引擎。可视化工具箱已经搬到了网上,像Ggplot2(用于R语言)和D3.js这样的经典工具,需要对底层技术有透彻的理解,现在它们正被D3.js和Svelte或React、SVG或Canvas的各种组合所取代,这些都是基于解决方案等等。例如,成熟的Python和React web应用程序框架专门用于数据可视化,如Plotly - Dash, Streamlit,或简单而强大的解决方案,如Chart.js。

Alternatively, if you just need to create a company or portfolio website with structured content, you can choose from the plethora of popular JAMstack solutions. JAMstack is a relatively new web development paradigm based on not-so-new components - JavaScript, API(s), and Markup (JAM) - and enables developers to develop faster web solutions, achieving blazing performance and a non-techie-friendly admin interface.

另外,如果您只需要创建一个包含结构化内容的公司或投资组合网站,您可以从众多流行的JAMstack解决方案中进行选择。JAMstack是一种相对较新的web开发范例,它基于一些不太新的组件——JavaScript、API和Markup (JAM)——使开发人员能够开发更快的web解决方案,实现出色的性能和非技术友好的管理界面。

Having provided a brief introduction to the contemporary and novel challenges of modern web development, it is time to intoduce our database system of choice - MongoDB.

在简要介绍了现代web开发的当代挑战和新挑战之后,是时候介绍我们选择的数据库系统—MongoDB了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/285465.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

脚本实现Ubuntu设置屏幕无人操作,自动黑屏

使用 xrandr 命令可以实现对屏幕的控制,包括调整分辨率、旋转屏幕以及关闭屏幕等。要实现 Ubuntu 设置屏幕在无人操作一段时间后自动黑屏,非待机,并黑屏后点击触摸屏可以唤醒屏幕,可以借助 xrandr 命令来实现。 首先,…

docker 本地机 互通文件

查询容器name 查询容器Id 进行传输

从相机空间到像素空间的投影和反投影原理和代码

目录 从相机空间到像素空间的投影 效果 ​编辑 公式 ​编辑 代码 像素空间到相机空间的反投影 记录一下从相机空间到像素空间的投影(3D-->2D)和像素空间到相机空间的反投影(2D-->3D)。 推荐blog:SLAM入门之视…

WSL下Ubuntu+RTX4090安装CUDA+cuDnn+Pytorch

安装驱动 首先需要明确的是,在WSL下安装Ubuntu,如果要使用主机的GPU卡,只需要在主机Windows上安装驱动,Linux中不需要安装驱动,可以在Linux中使用nvidia-smi命令查看驱动版本。 安装CUDA 避坑注意事项:如…

【框架】说一说 Fork/Join?

SueWakeup 个人主页:SueWakeup 系列专栏:学习Java框架 个性签名:人生乏味啊,我欲令之光怪陆离 本文封面由 凯楠📷 友情赞助 目录 前言 什么是 Fork? 什么是 Join? Fork/Join 的核心组件 F…

流畅的 Python 第二版(GPT 重译)(二)

第三章:字典和集合 Python 基本上是用大量语法糖包装的字典。 Lalo Martins,早期数字游牧民和 Pythonista 我们在所有的 Python 程序中都使用字典。即使不是直接在我们的代码中,也是间接的,因为dict类型是 Python 实现的基本部分。…

酷开系统让用户和电视双向传递,酷开科技实现商业变现

电视在我们的日常生活中扮演着重要的角色。虽然,作为客厅C位的扛把子——电视的娱乐作用深入人心,但是,它的涵义和影响力却因我们每个人的具体生活环境而存在着种种差异,而我们的生活环境又受到我们所处的社会及文化环境的影响。 …

毕业设计:日志记录编写(3/17起更新中)

目录 3/171.配置阿里云python加速镜像:2. 安装python3.9版本3. 爬虫技术选择4. 数据抓取和整理5. 难点和挑战 3/241.数据库建表信息2.后续进度安排3. 数据处理和分析 3/17 当前周期目标:构建基本的python环境:运行爬虫程序 1.配置阿里云pytho…

B端设计:如何让UI组件库成为助力,而不是阻力。

首发2023-09-24 15:42贝格前端工场 Hi,我是大千UI工场,网上的UI组件库琳琅满目,比如elementUI、antdesign、iview等等,甚至很多前端框架,也出了很多UI组件,如若依、Layui、bootstrap等等,作为U…

工具分享丨分析GreatSQL Binglog神器

在GreatSQL中,Binlog可以说是 GreatSQL 中比较重要的日志了,在日常开发及运维过程中经常会遇到。Binlog即Binary Log,二进制日志文件,也叫作变更日志(Update Log)。 详细Binglog日志介绍 Binglog主要应用…

包含多个段的程序

文章目录 包含多个段的程序在代码段中使用数据在代码段中使用栈将数据、代码、栈放入不同的段 包含多个段的程序 在代码段中使用数据 考虑这样一个问题,编程计算以下8个数据的和,结果存在ax 寄存器中:0123H,0456H,07…

性能测试-Jmeter中IF控制器使用

一、Jmeter控制器 分为两种类型: 控制测试计划执行过程中节点的逻辑执行顺序,如:循环控制器,if控制器等对测试计划中的脚本进行分组,方便Jmeter统计执行结果以及进行脚本的运行时控制等,如:吞…

Mysql数据库的SQL语言详解

目录 一、数据库的基础操作 1、数据库的基本查看和切换 1.1 查看数据库信息 1.2 切换数据库 1.3 查看数据库中的表信息 1.4 查看数据库或数据库中表的结构(字段) 1.5 数据类型 1.5.1 整数型 1.5.2 浮点型(float和double) 1.5.3 定点数 1.5.4…

【郭林保大夫】——这些事情做到了,想患上帕金森都难!

郭林保大夫说:帕金森病的发病原因尚不完全清楚,但可能与多种因素有关,包括遗传因素、环境因素、神经系统老化等。具体病因可能是这些因素相互作用的结果。病情后期,严重程度会因个体差异而异。一些患者可能出现严重的运动障碍&…

Gelato Network的创始人HILMAR ORTH确认出席HackSummit2024区块链开发者大会

随着Web3技术的日新月异,区块链领域正以前所未有的速度席卷全球。在这一变革的浪潮中,备受瞩目的区块链盛会——Hack.Summit() 2024区块链开发者大会,将于2024年4月9日至10日,在香港数码港隆重登场。这一里程碑式的大会不仅标志着…

栈、队列——练习题

1. ✌有效的括号 代码实现: 方法一:括号匹配 在任意一个位置上,左括号数量 > 右括号数量在最后一个位置上,左括号数量 右括号数量 方法二:栈 bool isValid(char* s) {char stack[10000];int top -1;while (*s) {i…

数据结构·排序

1. 排序的概念及运用 1.1 排序的概念 排序:排序是将一组“无序”的记录序列,按照某个或某些关键字的大小,递增或递减归零调整为“有序”的记录序列的操作 稳定性:假定在待排序的记录序列中,存在多个具有相同关键字的记…

机器学习之线性回归与逻辑回归【完整房价预测和鸢尾花分类代码解释】

目录 前言 一、什么是线性回归 二、什么是逻辑回归 三、基于Python 和 Scikit-learn 库实现线性回归 示例代码: 使用线性回归来预测房价: 四、基于Python 和 Scikit-learn 库实现逻辑回归 五、总结 线性回归的优缺点总结: 逻辑回归(Logistic…

RabbitMQ 的高阶应用及可靠性保证

目录 一、RabbitMQ 高阶应用 1.1 消息何去何从 1.2 过期时间 1.3 死信队列 1.4 延迟队列 1.5 优先级队列 1.6 消费质量保证(QOS) 二、持久化 三、生产者确认 四、消息可靠性和重复消费 4.1 消息可靠性 4.2 重复消费问题 上篇文章介绍了 Rabb…

QT----给程序添加上任务栏托盘图标和退出

让我们的程序拥有任务栏托盘图标,实现程序后台运行,退出等功能 1、关闭程序保持后台 重写关闭事件,忽略点击窗口关闭 void MainWindow::closeEvent(QCloseEvent *event) {// 隐藏窗口,而不是真正关闭setVisible(false);// 忽略关闭事件&am…