什么是后端架构?

更新于 2026-01-05

Codeacademy

软件工程师经常讨论应用程序的前端和后端。但这到底是什么意思呢?

前端 是在客户端执行的代码。这类代码(通常是 HTML、CSS 和 JavaScript)在用户的浏览器中运行,并构建用户界面。

后端 是在服务器上运行的代码,它接收来自客户端的请求,并包含将适当数据发送回客户端的逻辑。后端还包括数据库,用于持久化存储应用程序的所有数据。本文重点介绍使这一切成为可能的服务器端硬件和软件。

如果你想回顾一下 HTTP 和 REST 的基础知识,请先复习这些内容。它们是客户端与服务器之间请求-响应周期的主要约定和结构基础。

我们先从回顾客户端-服务器关系开始,然后再把这些概念整合起来!


什么是客户端?

客户端是指向后端发送请求的任何设备或程序。最常见的客户端是浏览器,它们会请求 HTML 和 JavaScript 代码,并执行这些代码以向最终用户展示网站。然而,客户端的形式多种多样:可能是移动应用程序、运行在另一台服务器上的程序,甚至是可以联网的智能家电。


什么是后端?

后端是指处理传入请求、生成并发送响应给客户端所需的所有技术。通常包括三个主要部分:

  • 服务器(Server):接收请求的计算机。
  • 应用程序(App):在服务器上运行的应用程序,负责监听请求、从数据库检索信息,并发送响应。
  • 数据库(Database):用于组织和持久化存储数据。

什么是服务器?

服务器本质上就是一台监听传入请求的计算机。虽然有专门为此目的设计和优化的机器,但任何连接到网络的计算机都可以充当服务器。事实上,在开发应用程序时,你经常会用自己的电脑作为服务器。


应用程序的核心功能是什么?

服务器上运行的应用程序包含根据 HTTP 方法(动词)和统一资源标识符(URI)来决定如何响应各种请求的逻辑。HTTP 方法与 URI 的组合称为路由(route),而根据请求匹配路由的过程称为路由分发(routing)

其中一些处理函数被称为中间件(middleware)。在这里,中间件指的是在服务器接收到请求到发送响应之间执行的任何代码。这些中间件函数可能会修改请求对象、查询数据库,或以其他方式处理传入的请求。通常,中间件函数会在执行完毕后将控制权传递给下一个中间件,而不是直接发送响应。

最终,某个中间件函数会结束请求-响应周期,并向客户端发送一个 HTTP 响应。

程序员通常会使用像 Express(Node.js 框架)或 Ruby on Rails 这样的框架来简化路由逻辑。现在你只需理解:每个路由可以有一个或多个处理函数,当匹配到该路由(即特定的 HTTP 方法和 URI)时,这些函数就会被执行。


服务器可以发送哪些类型的响应?

服务器返回的数据可以采用多种形式。例如,服务器可能会提供一个 HTML 文件、以 JSON 格式发送数据,或者仅返回一个 HTTP 状态码。你可能见过“404 - Not Found”这个状态码——当你尝试访问一个不存在的 URI 时就会看到它。实际上还有许多其他状态码,用于指示服务器接收到请求后发生了什么。


什么是数据库?为什么我们需要使用它?

数据库在 Web 应用的后端中被广泛使用。它们提供了一种持久化存储数据的接口,将数据保存在内存之外(如硬盘)。使用数据库不仅可以减轻服务器 CPU 主内存的负担,还能确保即使服务器崩溃或断电,数据也不会丢失。

许多发送到服务器的请求都需要进行数据库查询。客户端可能请求数据库中存储的信息,也可能在请求中提交新数据以存入数据库。


Web API 到底是什么?

API(Application Programming Interface,应用程序编程接口)是不同软件组件之间明确定义的通信方法集合。

更具体地说,Web API 就是由后端创建的接口:它是一组端点(endpoints)及其所暴露资源的集合。

Web API 由其能够处理的请求类型定义,这取决于它所定义的路由,以及客户端在访问这些路由后可以预期收到的响应类型。

一个 Web API 可以为多个前端提供数据。由于 Web API 通常只提供数据而不规定数据如何展示,因此可以基于同一个 API 构建多个不同的 HTML 页面或移动应用来呈现这些数据。


请求-响应周期的其他原则:

  • 服务器通常不能在没有请求的情况下主动发送响应
  • 每个请求都必须有响应,即使只是一个表示“未找到内容”的 404 状态码。否则,客户端会一直等待(挂起)。
  • 每个请求只能发送一个响应。多次响应会导致代码报错。

请求流程示例

让我们通过一个具体例子,来看看客户端向服务器发出请求时发生的主要步骤:

  1. Alice 在 SuperCoolShop.com 上购物。她点击了一款手机壳的图片,这个点击事件触发了一个 GET 请求,目标地址是:
    http://www.SuperCoolShop.com/products/66432
    (GET 表示这是一个获取数据的请求,不修改任何内容;URI /products/66432 表示她想查看 ID 为 66432 的商品详情。)

  2. Alice 的请求通过互联网发送到 SuperCoolShop 的某台服务器。这是整个过程中较慢的一步,因为请求传播速度不能超过光速,且可能需要跨越很长的物理距离。因此,像 SuperCoolShop 这样的大型网站通常在全球部署多台服务器,并将用户引导至地理位置最近的服务器。

  3. 服务器一直在监听所有用户的请求,此时成功接收到了 Alice 的请求!

  4. 与该请求匹配的事件监听器(HTTP 方法为 GET,URI 为 /products/66432)被触发。服务器在请求和响应之间运行的代码就是中间件。

  5. 在处理请求过程中,服务器代码向数据库发起查询,以获取这款手机壳的详细信息。数据库中存储了 Alice 想了解的所有信息:产品名称、价格、若干用户评价,以及一张产品图片的路径。

  6. 数据库执行查询,并将所需数据返回给服务器。值得注意的是,数据库查询是整个流程中较慢的环节之一。从磁盘读取数据本身就很慢,而且数据库可能位于与原始服务器不同的机器上——这次查询甚至可能也需要通过网络传输!

  7. 服务器收到来自数据库的数据后,就可以构建并发送响应了。响应体包含浏览器渲染页面所需的所有信息(价格、评价、尺寸等),响应头则包含 HTTP 状态码 200,表示请求成功。

  8. 响应通过互联网返回到 Alice 的电脑。

  9. Alice 的浏览器接收到响应,并利用这些信息渲染出她最终看到的商品详情页面!


结语

理解后端架构对于构建健壮的 Web 应用至关重要。后端通过处理数据、存储信息以及协调系统各组件之间的通信,支撑着用户在前端看到的一切。

我们已经探讨了服务器、应用程序和数据库如何协同工作,完成请求-响应周期。无论你是在构建一个简单网站还是复杂系统,掌握这些后端核心概念都将帮助你打造出可扩展、易维护的系统。

准备好动手实践了吗?不妨在 Codecademy 上探索 Node.js、Python 或 Ruby 等服务端编程语言课程,将这些架构理念付诸实践!