后端是现代应用程序的核心。处理业务逻辑、存储数据、管理[身份验证0],并公开 API 供前端使用。本指南介绍了构建强大后端的基本概念、流行技术和最佳实践。
什么是后端
后端是用户无法直接看到的系统层。在服务器上运行,处理请求,访问[数据库1]并返回响应。移动或网络应用程序(前端)通过 API 与后端通信。
后端职责
- 业务逻辑。
- 数据持久性。
- 身份验证和授权。
- 与第三方集成。
- 异步处理。
- 安全。
后端架构
巨石
包含所有逻辑的单个应用程序。上手简单。从大规模来看,它可能会变得复杂。
微服务
系统分为小的、独立的服务。每个人都有特定的责任。可扩展,但操作复杂性更高。
无服务器
按需执行的功能。不管理服务器。自动缩放。适用于可变负载。
后端即服务 (BaaS)
无需后端代码的现成服务。 Firebase、Supabase。加速开发,限制灵活性。
API:后端接口
休息
最常见的模式。由 URL 标识的资源,通过 HTTP 方法(GET、POST、PUT、DELETE)进行的操作。
###GraphQL
灵活的查询语言。客户要求提供他们需要的确切数据。减少过度获取和不足获取。
gRPC
HTTP/2 上的协议缓冲区。高效且打字。有利于服务之间的通信。
###WebSocket
双向持久连接。实时:聊天、通知、游戏。
REST API 设计
资源和端点
按资源组织:/users、/posts、/orders。使用名词,而不是动词。
HTTP 方法
- GET:读取数据。
- 发布:创建。
- 放置/修补:更新。
- 删除:删除。
状态代码
- 200:成功。
- 201:已创建。
- 400:客户端错误。
- 401:未经过身份验证。
- 403:未经授权。
- 404:未找到。
- 500:服务器错误。
版本控制
路线:/api/v1/。标头:接受版本。允许发展而不破坏老客户。
分页
[光标2或大型列表的偏移量。避免返回数千条记录。
后端技术
Node.js
服务器上的 JavaScript。异步、事件驱动。伟大的生态系统。因 API 而流行。
###Python
Django 和 FastAPI。可读性强,富有成效。擅长数据科学和机器学习。
去
编译,执行。本土竞争。在云和[微服务3]中成长。
Java/Kotlin
传统企业。春季启动。健壮、强打字。
红宝石
导轨。高生产率,约定优于配置。启动友好。
.NET
C# 与 ASP.NET Core。企业级、高性能。微软生态系统。
数据库
SQL(关系型)
PostgreSQL、MySQL、SQL Server。结构化、ACID、强大的查询。适合关系数据。
NoSQL(文档)
MongoDB、CouchDB。灵活,没有僵化的模式。适用于半结构化数据。
NoSQL(键值)
Redis、DynamoDB。超快。适合缓存和会话。
NoSQL(宽列)
卡桑德拉、ScyllaDB。水平缩放。有利于大数据。
新SQL
蟑螂数据库、TiDB。具有 SQL 保证的水平扩展。
ORM 和查询生成器
###ORM
将对象映射到表。 Prisma、Sequelize、TypeORM、SQLAlchemy。高效,但可以隐藏低效的查询。
查询生成器
SQL 的编程构造。克内克斯,柴油机。比 ORM 更具控制力。
原始 SQL
最大程度的控制。复杂查询或优化所需。
身份验证和授权
###智威汤逊
用于[身份验证4]的无状态令牌。便携性、可扩展性。
OAuth 2.0
访问委托。允许通过 Google、Apple 登录。
RBAC/ABAC
权限控制模型。具体见文章。
缓存
为什么要卷曲
减少银行的负载,改善延迟。重复结果立即生效。
Redis
最流行的内存缓存。也适用于会话、队列、发布/订阅。
CDN
边缘的静态内容缓存。 Cloudflare、CloudFront。
缓存失效
难题。 TTL、显式失效、刷新策略。
异步处理
消息队列
RabbitMQ、SQS、Redis 队列。将生产者和消费者解耦。
###工人
在后台消耗队列的进程。芹菜、Sidekiq、公牛。
事件流
卡夫卡,运动。实时、大规模的事件处理。
安全
输入验证
验证所有输入。永远不要相信客户。
SQL注入
使用参数化查询。切勿在 SQL 中连接输入。
###XSS
转义输出。内容安全政策。
HTTPS
总是。没有例外。所有通信均采用 TLS。
速率限制
限制每个用户/IP 的请求。防止滥用。
秘密管理
永远不要硬编码。使用环境变量、AWS Secrets Manager、Vault。
可观察性
日志记录
结构化日志。级别(调试、信息、警告、错误)。集中聚合。
指标
普罗米修斯,数据狗。监控延迟、吞吐量、错误。
追踪
跟踪跨服务的请求。耶格,X射线。
部署和基础设施
容器
Docker封装了应用程序。 [Kubernetes5 大规模编排。
云提供商
AWS、GCP、Azure。托管服务减少了运营。
CI/CD
自动化管道:测试、构建、部署。 GitHub 操作、GitLab CI。
基础设施即代码
地形,普鲁米。版本化且可复制的基础设施。
测试
单元测试
隔离测试功能。速度很快,很多。
集成测试
测试组件之间的交互。银行、API。
E2E 测试
测试全流。速度较慢,数量较少。
文档
OpenAPI/Swagger
API 规范。生成交互式文档。
自述文件
设置说明、架构、决策。
ADR
架构决策记录。记录选择的原因。
结论
应用程序后端是一门广泛的学科,结合了架构、安全性、性能和操作。选择适合上下文的技术,设计一致的 API,从一开始就解决安全问题,并构建 [可观察性 6]。精心设计的后端是可靠且可扩展的产品的基础。
##常见问题解答
1) 后端选择哪种语言? 这取决于团队和环境。 Node.js 和 Python 在初创公司中很受欢迎。用于关键系统的 Go 和 Java。
2) REST 或 [GraphQL7? REST 对于大多数人来说更简单且足够。 [当查询灵活性至关重要时,GraphQL8´。
3) 我需要[微服务9]吗? 一开始可能不是。从结构良好的[单体10]开始。必要时迁移。
4) Firebase 是否会更换自己的后端? 对于 MVP 和简单的应用程序,是的。对于复杂的逻辑,您将需要自己的代码。
5) 如何扩展后端? 水平(更多实例)、缓存、查询优化、异步处理。
另请阅读
- [应用程序后端 - 扩展的良好实践11
- [应用程序后端-初创公司的良好实践12
- [应用中的微服务:移动分布式架构13
- [GraphQL 应用程序:实施指南14
- [应用程序中的缓存:良好实践和基础知识15
- [应用程序中的缓存:良好实践和基本步骤16
