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了。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python学习:条件控制

Python条件控制概念 条件控制是编程中的一个重要概念,用于根据不同情况执行不同的代码逻辑。在Python中,条件控制通常使用if语句来实现。if语句的基本语法如下: if 条件:执行语句 elif 其他条件:执行语句 else:执行语句其中,if…

2016年认证杯SPSSPRO杯数学建模C题(第二阶段)如何有效的抑制校园霸凌事件的发生全过程文档及程序

2016年认证杯SPSSPRO杯数学建模 C题 如何有效的抑制校园霸凌事件的发生 原题再现: 近年来,我国发生的多起校园霸凌事件在媒体的报道下引发了许多国人的关注。霸凌事件对学生身体和精神上的影响是极为严重而长远的,因此对于这些情况我们应该…

网络七层模型之网络层:理解网络通信的架构(三)

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

基于傅里叶描述子和HSV颜色特征的KNN水果类型识别,Matlab实现

博主简介: 专注、专一于Matlab图像处理学习、交流,matlab图像代码代做/项目合作可以联系(QQ:3249726188) 个人主页:Matlab_ImagePro-CSDN博客 原则:代码均由本人编写完成,非中介,提供…

【物联网】Qinghub Kafka 数据采集

基础信息 组件名称 : kafka-connector 组件版本: 1.0.0 组件类型: 系统默认 状 态: 正式发布 组件描述:通用kafka连接网关,消费来自kafka的数据,并转发给下一个节点做相关的数据解析。 配置文…

【智能算法】乌鸦搜索算法(CSA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2016年,Askarzadeh等人受到乌鸦觅食自然行为启发,提出了乌鸦搜索算法(Crow Search Algorithm, CSA)。 2.算法原理 2.1算法思想 CSA模拟了乌鸦进行觅…

CUDA从入门到放弃(四):CUDA 编程模式 CUDA Programming Model

CUDA从入门到放弃(四):CUDA 编程模式 CUDA Programming Model 1 Kernels CUDA C 扩展了 C,允许定义名为内核的函数,这些函数可以被不同的 CUDA 线程并行执行多次,而不是像普通 C 函数那样只执行一次。内核…

Python数据结构实验 递归算法设计

一、实验目的 1.掌握递归程序设计的基本原理和方法; 2.熟悉数据结构中顺序表和单链表下的递归算法设计思想; 3.掌握并灵活运用递归算法解决一些较复杂的应用问题。 二、实验环境 1.Windows操作系统的计…

使用JMeter进行梯度压测

使用JMeter进行梯度压测 梯度压测配置如下: 使用线程:5,然后循环5000次,共2.5万个样本使用线程:10,然后循环5000次,共5万个样本使用线程:15,然后循环5000次,共7.5万个样本使用线程:20&#xff…

投资现货黄金有持仓时间限制吗?

投资现货黄金是否有持仓时间限制?这是许多投资者在进入黄金市场前都想要了解的一个问题。实际上,现货黄金交易并没有严格的持仓时间限制。换句话说,投资者可以按照个人的投资策略和市场情况自由决定持有黄金的时间长度。 以下是影响现货黄金持…

数据结构(四)顺序表与链表的深层次讲解

我们在数据结构(二),对链表和顺序表已经讲解过了。但很多同学表示有点晦涩难懂那我就出一篇深层次讲解,一步一步来带领大家学习。 我们从头(数据结构)开始完整的来为大家讲解,大家好好看好好学。…

c语言中函数声明注意点都在这里了

C语言中函数声明主要分为三个大点:函数返回值类型、函数名和参数列表。 一、函数返回值类型 1. 无返回值的函数声明 无返回值的函数声明使用关键字void表示,表示该函数不返回任何值。例如: void print_hello(); // 声明一个无返回值的函数…

【Emgu CV教程】10.5、轮廓之凸包

文章目录 一、什么叫轮廓的凸包二、凸包函数三、二维点集寻找凸包四、绘制物体轮廓的凸包1.原始素材2.代码3.运行结果 一、什么叫轮廓的凸包 凸包是一个更加简化的多边形,是轮廓最外层的“凸”多边形,与前一篇多边形近似拟合不同的是,凸包组…

学生宿舍智能控电柜安装调试技术

学生宿舍智能控电柜安装调试石家庄光大远通电器有限公司宿舍控电限电管理系统是一种用于管理学生宿舍用电的智能系统,主要功能包括: 1.实时监控和控制:该系统能够实时监测和记录宿舍的用电情况,包括电器使用情况、电量消耗等。管理人员可以通过电脑或手机…

数据结构(五)——树与二叉树的应用

5.5 树与二叉树的应用 5.5.1 哈夫曼树 结点的权:有某种现实含义的数值。 结点的带权路径长度:从树的根到该结点的路径长度(经过的边数)与该结点上权值的乘积。 树的带权路径长度:树中所有叶结点的带权路径长度之和…

FPGA电平标准

1.LVTTL:(3.3v) 2.LVCOMS:(1.8v) 3.LVDS(1.8v):LVDS_25(2.5v) 4:如果是ddr3与fpga相连接fpga的vcco推荐(1.5v)…

【Linux】进程的基本概念(进程控制块,ps命令,top命令查看进程)

目录 01.进程的基本概念 程序与进程 进程的属性 02.进程控制块(PCB) task_struct的内容分类 组织进程 03.查看进程 ps命令 top指令 在计算机科学领域,进程是一项关键概念,它是程序执行的一个实例,是操作系统的…

【Linux C | 多线程编程】线程的退出

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 ⏰发布时间⏰: 本文未经允许…

第九届蓝桥杯大赛个人赛省赛(软件类)真题C 语言 A 组-乘积尾零

solution 找末尾0的个数&#xff0c;即找有多少对2和5 >问题等价于寻找所给数据中&#xff0c;有多少个2和5的因子&#xff0c;较少出现的因子次数即为0的个数 #include <iostream> using namespace std; int main() {// 请在此输入您的代码printf("31");…

项目3-留言板

1.创建项目 记得将project type改为maven 将需要的包引入其中 更改版本号 引入MYSQL相关包记得进行配置&#xff01;&#xff01;&#xff01; spring:datasource:url: jdbc:mysql://127.0.0.1:3306/mycnblog?characterEncodingutf8&useSSLfalseusername: rootpassword:…