本文档全面概述了 System Design 101 存储库中的 API 和 Web 开发资源。它涵盖了 Web 协议、API 设计、负载均衡、Web 应用程序架构以及现代通信模式的基础概念。本文档可作为系统设计师、软件工程师和技术专业人士在理解 Web 服务与客户端之间数据流方面的手册。
有关数据库和存储系统的信息,请参阅 数据库和存储系统。有关包括缓存的性能优化技术,请参阅 缓存和性能优化。
Web 开发依赖于各种协议和通信模型,这些模型决定了客户端和服务器之间的数据交换方式。
HTTP(超文本传输协议)已通过多个版本进行演进,以满足 Web 应用程序日益增长的需求。
来源: README.md64
API 设计存在多种架构风格,每种风格都有不同的特点。
来源: README.md59 README.md73 README.md70 README.md31
不同的模式实现了客户端和服务器之间的实时或近实时通信。
有效的 API 设计遵循关键原则,以确保可用性、可维护性和安全性。
来源: README.md42 README.md48 README.md66 README.md67
HTTP 状态码表示 HTTP 请求的结果,而 HTTP 方法定义了要执行的操作。
| 状态码范围 | 类别 | 示例代码 |
|---|---|---|
| 1xx | 信息 | 100 继续, 101 协议切换 |
| 2xx | 成功 | 200 OK, 201 已创建, 204 无内容 |
| 3xx | 重定向 | 301 永久移动, 304 未修改 |
| 4xx | 客户端错误 | 400 错误请求, 401 未授权, 404 未找到 |
| 5xx | 服务器错误 | 500 服务器内部错误, 503 服务不可用 |
| HTTP 方法 | 目的 | 安全 | 幂等 |
|---|---|---|---|
| GET | 获取数据 | 是 | 是 |
| POST | 创建资源 | 否 | 否 |
| PUT | 更新/替换资源 | 否 | 是 |
| PATCH | 部分更新 | 否 | 否* |
| DELETE | 删除资源 | 否 | 是 |
| HEAD | 仅获取头部 | 是 | 是 |
| OPTIONS | 获取支持的方法 | 是 | 是 |
*PATCH 可以设计成幂等的,但本身并非如此。
来源: README.md30 README.md58 README.md61
负载均衡器将传入的网络流量分配到多台服务器上,以确保高可用性和可靠性。
来源: README.md29 README.md38 README.md45 README.md62
API 网关作为所有客户端请求的入口点,提供路由、组合和各种横切关注点。
来源: README.md49 README.md50 README.md43 README.md69
代理和反向代理在 Web 架构中起着不同的作用。
来源: README.md63
现代 Web 应用程序由多个组件组成,协同工作以向用户提供功能。
来源: README.md54 README.md35 README.md36 README.md37 README.md41
实施强大的安全措施对于保护 API 端点及其处理的数据至关重要。
各种测试方法确保 API 的质量和可靠性。
| 测试类型 | 目的 | 示例工具 |
|---|---|---|
| 功能测试 | 验证 API 是否正常工作 | Postman, REST-assured |
| 集成测试 | 测试 API 与其他组件的交互 | JUnit, TestNG |
| 负载测试 | 评估负载下的性能 | JMeter, Gatling |
| 安全测试 | 识别漏洞 | OWASP ZAP, Burp Suite |
| 模糊测试 | 随机数据输入以查找 bug | American Fuzzy Lop |
| 契约测试 | 确保 API 符合契约 | Pact, Spring Cloud Contract |
| 组件测试 | 独立测试 API 组件 | Mockito, WireMock |
| 端到端测试 | 测试完整的请求/响应流程 | Cypress, Selenium |
| 回归测试 | 确保新更改不会破坏现有功能 | 自动化测试套件 |
来源: README.md72
GraphQL 和 REST 代表了不同的 API 设计方法。
来源: README.md46 README.md47 README.md73 README.md74
Web 浏览器处理 HTML、CSS 和 JavaScript 以便为用户渲染网页。
该存储库为学习 API 开发概念提供了一个结构化的路线图。
基础知识
中级
高级
基础设施