Skip to content
标签

什么是API?详细了解REST API及其工作原理

Featured image of post 什么是API?详细了解REST API及其工作原理

API(应用程序编程接口)是一组允许软件应用程序相互通信的规则。本文详细解释什么是API、REST API如何工作、常见的API类型以及在软件开发中的实际应用。

API(Application Programming Interface,应用程序编程接口)是一组允许软件应用程序相互通信的规则。本文详细解释什么是API、REST API如何工作、认证方法、良好的API设计原则以及在日常生活中的实际应用。

什么是API?

API(Application Programming Interface——应用程序编程接口)是一组允许软件应用程序相互通信的规则、协议和工具。简单来说,API是帮助两个软件相互理解和交互的"中间人",而无需了解彼此的内部细节。

简单易懂的现实类比

想象您坐在一家餐厅里:

  • 是客户端应用程序(用户)。
  • 厨房是服务器(处理请求的地方)。
  • 服务员就是API——接收您的订单,传递给厨房,然后将完成的菜品带回给您。

您不需要知道厨房如何烹饪,厨房也不需要知道您坐在哪里。API确保双方之间的通信顺畅进行。

常见的API类型

REST API(RESTful API)

REST(Representational State Transfer,表述性状态转移)是目前最流行的API架构。REST API使用HTTP协议和标准方法:

  • GET: 获取数据(例如:获取产品列表)。
  • POST: 创建新数据(例如:下单)。
  • PUT: 更新全部数据(例如:更新客户信息)。
  • PATCH: 部分更新数据。
  • DELETE: 删除数据。

REST API的关键特征:

  • 使用URL(端点)标识资源。
  • 响应通常采用JSON或XML格式。
  • 无状态——每个请求都是独立的,不依赖于前一个请求。
  • 易于理解、实现,且被广泛支持。

GraphQL

由Facebook开发,GraphQL允许客户端在单个请求中精确指定所需的数据,避免过度获取或获取不足的问题。

优点:

  • 灵活的数据查询。
  • 减少所需的请求数量。
  • 清晰的Schema,自动生成文档。

缺点:

  • 实现比REST更复杂。
  • 难以有效缓存。

SOAP API

SOAP(简单对象访问协议)是一种较老的协议,使用XML进行数据交换。由于其高安全性和可靠性,仍在企业、银行和政府系统中使用。

WebSocket API

WebSocket实现客户端和服务器之间的实时双向通信。适合聊天、在线游戏、股票价格跟踪和实时通知。

gRPC

由Google开发,gRPC使用Protocol Buffers(protobuf)进行数据序列化。由于使用HTTP/2和二进制格式,比REST更快,非常适合微服务。

REST API如何工作?

API请求的结构

一个REST API请求包含以下组件:

端点(URL): 标识要访问的资源的地址:

GET https://api.example.com/v1/products
GET https://api.example.com/v1/products/123

HTTP方法: 指定要执行的操作(GET、POST、PUT、DELETE)。

请求头(Headers): 附加信息如认证令牌、内容类型、语言:

Authorization: Bearer eyJhbGciOiJIUzI1NiJ9...
Content-Type: application/json
Accept-Language: zh

请求体(Body): 随请求发送的数据(通常用于POST和PUT):

{
  "name": "新产品",
  "price": 99.99,
  "category": "electronics"
}

查询参数: 附加到URL的过滤器和选项:

GET /products?category=electronics&sort=price&page=1

API响应的结构

服务器的响应包含:

HTTP状态码:

  • 200 OK — 成功。
  • 201 Created — 创建成功。
  • 400 Bad Request — 请求无效。
  • 401 Unauthorized — 未认证。
  • 403 Forbidden — 禁止访问。
  • 404 Not Found — 资源不存在。
  • 429 Too Many Requests — 超过请求限制。
  • 500 Internal Server Error — 服务器错误。

响应体: 返回的数据,通常为JSON格式:

{
  "status": "success",
  "data": {
    "id": 123,
    "name": "新产品",
    "price": 99.99
  }
}

API认证

为保护API免受未授权访问,存在多种认证方法:

API密钥

最简单的方法——服务器向客户端颁发唯一字符串(API密钥)以验证身份。API密钥通常通过请求头或查询参数发送。

OAuth 2.0

最流行的Web和移动应用认证协议。允许您使用Google或Facebook账户登录应用,无需共享密码。

JWT(JSON Web Token)

包含用户信息的编码令牌,使用密钥签名。服务器可以验证令牌而无需查询数据库。

基本认证

通过HTTP头发送用户名和密码,使用Base64编码。简单但如不使用HTTPS则安全性较低。

良好的API设计——基本原则

清晰的端点命名

使用描述资源的复数名词:

✅ /api/v1/products
✅ /api/v1/users/123/orders
❌ /api/v1/getProducts
❌ /api/v1/create-new-order

使用版本控制

为API设定版本以避免更新时的破坏性变更:

/api/v1/products
/api/v2/products

分页

不要在单个响应中返回所有数据。使用分页减少负载:

/products?page=1&limit=20

速率限制

限制每个客户端在特定时间内的请求数量以保护服务器:

X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 999
X-RateLimit-Reset: 1640000000
在每个响应中包含速率限制信息
始终在响应中包含`X-RateLimit-*`头部——即使客户端远未达到限制。客户端需要知道剩余配额以自我调节。返回`429 Too Many Requests`并附带`Retry-After`头部,让客户端知道需要等待多长时间。

一致的错误处理

返回清晰一致的错误消息:

{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "'email'字段无效",
    "details": [
      {"field": "email", "message": "必须是有效的电子邮件"}
    ]
  }
}

API与代理——实际联系

在许多场景中,API和代理密切配合:

使用代理进行API采集

许多服务提供公共API但执行严格的速率限制。使用代理有助于将请求分散到多个IP,避免在高频调用API时被封锁。

API网关和反向代理

API网关充当微服务的反向代理,处理所有API请求的认证、速率限制、负载均衡和路由。

代理API

TMProxy这样的代理提供商提供API来以编程方式管理代理——通过API调用创建、删除、轮换IP和监控使用情况。

API开发和测试工具

  • Postman: 最流行的API测试工具,支持集合、环境和自动化测试。

  • Insomnia: 类似Postman,界面更轻量。支持REST、GraphQL和gRPC。

  • Swagger/OpenAPI: API描述标准,可自动生成交互式文档。

  • curl: 简单但强大的命令行工具,用于发送HTTP请求。

API性能基准测试
测试日期 2026-02-20 REST vs GraphQL vs gRPC
在相同数据集上的基准测试结果(1000个产品,10000个请求):
指标 REST API GraphQL gRPC
平均延迟 45ms 52ms 12ms
吞吐量 2200 req/s 1800 req/s 5500 req/s
负载大小 8.2 KB 3.1 KB 1.8 KB
实现难度

gRPC凭借HTTP/2和二进制格式速度最快,但实现难度较高。REST最简单,适合大多数场景。GraphQL优化了负载大小,但由于查询解析导致延迟较高。

日常生活中的API

您可能没有意识到,但API几乎存在于您每天进行的每项数字活动中:

天气应用

当您在手机上打开天气应用时,应用会调用气象服务(如OpenWeatherMap或WeatherAPI)的API,根据您当前的GPS坐标获取温度、湿度和天气预报数据。每次刷新都是一次API调用。

Google/Facebook登录(OAuth)

当您在网站上点击"使用Google登录"时,应用使用Google的OAuth 2.0 API来验证您的身份,无需创建新账户或共享密码。此过程涉及应用、Google授权服务器和Google资源服务器之间的多次API调用。

在线支付

当您在电商网站上付款时,网站调用支付网关的API(Stripe、PayPal、支付宝)来处理交易。API验证卡片、检查余额、执行交易并返回结果——所有这些都在几秒内完成。

打车应用

滴滴等打车应用同时使用数十个API:地图API用于地图和路线规划、内部API用于司机匹配、支付API用于交易处理、推送通知API用于实时提醒。

社交媒体分享

网站上的"分享到微博"按钮使用微博开放平台API将内容发布到您的时间线。微信API、抖音API的工作方式类似——允许第三方应用与平台交互而无需直接访问。

货币兑换

银行和金融应用使用汇率API获取实时外汇汇率。每次您查看美元/人民币汇率时,应用都在调用金融数据提供商的API。

生产环境REST API最佳实践

在生产环境中部署API时,请遵循以下最佳实践以确保性能、安全性和可扩展性:

强制使用HTTPS

所有生产API必须使用HTTPS。未加密的HTTP会将数据(包括API密钥、令牌和敏感信息)暴露给网络上的任何人。使用TLS 1.3获得最佳安全性,并将所有HTTP请求重定向到HTTPS。

永远不要通过HTTP发送API密钥
通过HTTP发送的API密钥或令牌可能被同一网络上的任何设备窃取(中间人攻击)。即使在开发/测试环境中——也要使用HTTPS。SSL/TLS证书的成本现在使用Let's Encrypt已经是**$0**。

使用ETag和Cache-Control实现缓存

使用HTTP缓存头来减少服务器负载并加速响应。ETag允许客户端在重新加载之前检查数据是否已更改。Cache-Control头为每种响应类型指定缓存持续时间,显著减少到达源服务器的请求数量。

启用压缩

为API响应启用gzip或Brotli压缩。对于JSON数据,压缩可以将有效负载大小减少60-80%,尤其在慢速连接上显著改善响应时间。大多数现代框架都支持自动压缩。

正确配置CORS

跨源资源共享(CORS)控制哪些域可以调用您的API。严格配置CORS——仅允许受信任的域,指定接受的方法和头部。避免在生产环境中使用通配符*,因为它允许任何域调用您的API。

使用OpenAPI/Swagger编写文档

没有文档的API是无用的API。使用OpenAPI规范(OAS)以标准化格式描述您的API。Swagger UI自动从OAS生成交互式文档,允许开发者直接测试API。API更改时始终保持文档更新。

使用有意义的HTTP状态码

使用正确的HTTP状态码:200表示成功,201表示已创建,204表示无内容,400表示客户端错误,401表示未授权,403表示禁止,404表示未找到,429表示速率限制,500表示服务器错误。不要对每个响应都返回200然后在正文中包含错误——这会使客户端难以处理错误。

值得关注的API趋势

API优先设计

越来越多的组织采用"API优先"方法——在编写代码之前设计API。API被视为产品,从一开始就有精心的设计、全面的文档和清晰的版本控制。这确保了团队间的一致性并减少了返工。

GraphQL持续增长

GraphQL正在获得更广泛的采用,特别是对于需要复杂数据查询的移动应用和仪表板。然而,REST凭借其简单性和丰富的工具生态仍占据大多数用例的主导地位。许多组织同时使用REST和GraphQL的组合。

API市场

RapidAPI等API市场平台允许开发者从一个地方发现、连接和管理数千个API。"API即产品"模式日益流行,公司通过API将数据和服务货币化。

无服务器和边缘API

API正被部署在无服务器平台(AWS Lambda、Cloudflare Workers、Vercel Edge Functions)上,以降低成本、增加可扩展性并减少延迟。边缘计算将API逻辑更靠近用户,显著改善全球用户的响应时间。

AI和机器学习API

AI/ML API正在蓬勃发展——从OpenAI的GPT API、Google Cloud AI到专门的图像识别、自然语言处理和自动翻译服务。AI API使开发者能够将AI能力集成到应用中,而无需从头构建模型。

总结: API是现代软件世界的连接基础。理解API——特别是REST API——是任何从事技术工作的人的必备技能。无论您是构建应用的开发者、集成工具的营销人员,还是希望连接系统的企业,API都是让一切协同工作的桥梁。

来源与参考文献
1. [MDN Web Docs — HTTP Overview](https://developer.mozilla.org/en-US/docs/Web/HTTP/Overview) 2. [RFC 7231 — HTTP/1.1 Semantics and Content](https://datatracker.ietf.org/doc/html/rfc7231) 3. [OpenAPI Specification](https://spec.openapis.org/oas/latest.html) 4. [GraphQL — Official Documentation](https://graphql.org/learn/) 5. [Google Cloud — API Design Guide](https://cloud.google.com/apis/design)

常见问题

什么是API,它是如何工作的?
API(Application Programming Interface,应用程序编程接口)是一组允许软件应用程序相互通信的规则。API充当'中间人'——接收客户端的请求,转发给服务器处理,然后将结果返回给客户端。
REST API和GraphQL有什么区别?
REST API使用固定的URL端点和HTTP方法(GET、POST、PUT、DELETE),返回固定数据。GraphQL使用单一端点,允许客户端精确指定所需数据,避免过度获取和获取不足。
API Key和OAuth 2.0有什么区别?
API Key是用于验证客户端身份的简单字符串。OAuth 2.0是更复杂的协议,允许委托访问而无需共享密码——常用于Google/Facebook登录。
为什么API需要速率限制?
速率限制在给定时间范围内限制每个客户端的请求数量,保护服务器免受过载和滥用。通常根据API类型限制为每分钟1000-10000个请求,超出时返回HTTP 429。
代理与API有什么关系?
代理帮助将API请求分散到多个IP,避免在高频调用API时被封锁。API网关充当微服务的反向代理。像TMProxy这样的代理提供商也提供API来以编程方式管理代理。

article.share