以下是精选的 100 个 API 开发高频问题及解决方案,按主题分类整理,每日学习 1-2 个问题,助力你攻克 API 开发中的各类疑难杂症:
一、基础概念(1-10)
- 什么是 RESTful API?它与普通 API 的区别是什么?
RESTful API 是符合 REST 架构风格的 API,强调:
资源导向(URL 表示资源,如/users)
使用标准 HTTP 方法(GET/POST/PUT/DELETE)
无状态(每个请求独立,不依赖会话)
与普通 API 的核心区别在于是否遵循统一接口约束(如资源标识、自我描述消息等)。 - 什么是 API 网关?它的主要作用是什么?
API 网关是系统的统一入口,主要作用:
路由分发:将请求转发到对应服务
认证授权:统一身份验证
限流熔断:防止雪崩效应
协议转换:如 HTTP 转 gRPC
监控日志:收集 API 调用数据 - OAuth 2.0 与 JWT 的区别是什么?
OAuth 2.0 是授权框架,解决 “第三方应用如何安全访问资源”
JWT 是令牌格式,解决 “如何在各方之间安全传递信息”
OAuth 2.0 可使用 JWT 作为令牌载体,但二者解决不同层面的问题。
二、设计与规范(11-20) - API 版本控制有哪些常见方案?各有什么优缺点?
URL 路径版本(如/v1/products):
优点:简单直观;缺点:污染 URL,需调整反向代理配置。
请求头版本(如X-API-Version: 2.0):
优点:保持 URL 整洁;缺点:客户端需显式设置,文档要求高。
内容协商版本(如Accept: application/json;version=2.0):
优点:符合 REST 原则;缺点:实现复杂,工具支持少。 - 如何设计 API 错误响应?
推荐遵循 RFC 7807 标准,返回结构化错误:
json
{
"type": "https://example.com/probs/out-of-credit",
"title": "You do not have enough credit.",
"status": 403,
"detail": "Your current balance is 30, but that costs 50.",
"instance": "/account/12345/msgs/abc"
}
包含错误类型、标题、状态码、详细描述和错误实例标识。
三、安全与认证(21-30) - 如何防止 API 被恶意调用?
综合措施:
IP 黑白名单
验证码(人机验证)
限流(如每分钟 100 次请求)
行为分析(如异常请求模式检测)
签名验证(防止参数篡改) - API 密钥(API Key)应该如何安全存储和传输?
存储:使用密钥管理服务(如 AWS KMS、Vault),禁止明文存储
传输:仅通过 HTTPS 传输,禁止在 URL 中传递(防中间人攻击)
轮换:定期更换 API Key,设置有效期
权限:最小化授权原则,不同场景使用不同 Key
四、调试与测试(31-40) - Postman 中如何设置环境变量?有什么作用?
点击右上角 “Environments”→“Add” 创建环境
添加变量(如baseUrl、apiKey)
在请求中使用{ {变量名}}引用
作用:在不同环境(开发 / 测试 / 生产)间快速切换配置,避免硬编码。 - 如何对 API 进行压力测试?
推荐工具:
JMeter:功能全面,支持 GUI 和脚本
k6:基于 JavaScript,轻量级高性能
Gatling:基于 Scala,适合高并发测试
关键指标:QPS(每秒查询率)、响应时间分布、错误率
五、性能优化(41-50) - API 响应慢的常见原因有哪些?如何排查?
常见原因:
数据库查询慢(缺少索引、全表扫描)
网络延迟(跨区域调用、带宽不足)
业务逻辑复杂(大量计算、循环嵌套)
缓存失效(频繁更新、未命中)
排查步骤:
确认问题范围(单个接口还是所有接口)
分析调用链路(各环节耗时)
检查系统资源(CPU、内存、IO)
数据库查询分析(执行计划) - 如何实现 API 的缓存策略?
强缓存(客户端直接使用本地副本):
设置Cache-Control和Expires头
协商缓存(验证后使用缓存):
使用ETag和Last-Modified头
服务端缓存:
内存缓存(如 Redis)、CDN 缓存(静态内容)
缓存失效策略:
时间失效、写时失效、主动刷新
六、错误处理与监控(51-60) - 如何设计 API 的重试机制?
指数退避算法(Exponential Backoff):
python
运行
import time
import random
def retry(func, retries=3, base_delay=1):
for i in range(retries):
try:
return func()
except Exception as e:
if i == retries - 1:
raise
delay = base_delay (2 * i) + random.uniform(0, 1)
time.sleep(delay)
仅对临时性错误重试(如 503、网络超时)
幂等性保障(确保重试不会产生副作用)
- API 监控需要关注哪些核心指标?
可用性(成功率、HTTP 状态码分布)
性能(响应时间 P95/P99、吞吐量)
错误率(各类错误占比)
资源消耗(CPU、内存、IO)
调用量趋势(日 / 周 / 月变化)
七、集成与部署(61-70) - 如何实现 API 的灰度发布?
按用户分组(如 VIP 用户先试用)
按请求比例(如 10% 流量导向新版本)
按地域划分(特定区域先上线)
蓝绿部署(准备两套环境,切换流量) - CI/CD 流程中如何自动化测试 API?
提交代码触发 CI(如 GitHub Actions)
运行单元测试(如 pytest、Jest)
启动测试环境(Docker 容器)
执行集成测试(如 Postman Collection Runner)
性能测试(如 k6)
结果分析与报告生成
自动部署到预发环境
八、高级技术(71-80) - GraphQL 与 REST 的对比,各适合什么场景?
特性 REST GraphQL
数据获取 固定接口返回固定数据 客户端指定需要的数据
性能 可能存在过度获取 按需获取,减少请求
学习成本 低 高(需掌握 Schema、查询)
缓存 简单(URL 唯一) 复杂(相同 URL 不同查询)
适用场景 数据模型稳定的场景 灵活多变的前端需求 - 如何实现 API 的实时数据推送?
WebSocket(持久连接,双向通信)
Server-Sent Events(单向推送,基于 HTTP)
消息队列(如 Kafka、RabbitMQ)
GraphQL 订阅(基于 WebSocket)
九、合规与规范(81-90) - GDPR 对 API 开发有哪些影响?
数据主体权利(访问、删除、更正数据)
数据处理透明性(需明确告知用户)
数据跨境传输限制
数据泄露通知(72 小时内报告)
隐私设计原则(默认保护隐私) - API 文档应该包含哪些内容?
接口概述(功能描述、使用场景)
请求参数(字段说明、类型、必填项)
请求示例(含 Header、Body)
响应结构(字段说明、错误码)
响应示例(成功 / 失败案例)
错误码列表(说明各错误码含义)
权限要求(需要哪些权限)
调用频率限制
十、常见错误与解决方案(91-100) - 调用 API 返回 401 Unauthorized,可能的原因有哪些?
Token 过期(需刷新 Token)
Token 格式错误(如缺少 Bearer 前缀)
签名错误(参数篡改或时间戳过期)
权限不足(Token 权限范围不够)
认证服务器故障 - 跨域请求(CORS)失败如何解决?
服务端配置 CORS 头(如Access-Control-Allow-Origin)
使用代理服务器(如 Nginx 转发请求)
JSONP(仅支持 GET 请求,兼容性差)
客户端配置(如设置 withCredentials)
通过每日学习 1-2 个问题,配合实际项目中的应用,你将逐步掌握 API 开发的核心技能,有效解决开发过程中的各种疑难问题。建议将这些问题整理成自己的知识库,方便随时查阅