API 请求如何运作
使用 Web API 时,客户端会向端点发送 HTTP 请求。URL 用于标识资源,请求方法说明要执行的操作,请求头则携带认证方式、响应格式等信息。
GET /v1/products/42 HTTP/1.1
Host: api.example.com
Authorization: Bearer TOKEN
Accept: application/json
HTTP/1.1 200 OK
Content-Type: application/json
{"id":42,"name":"Desk lamp","price":29.99}
服务器会验证请求、执行操作,并返回状态码和响应体,响应体通常采用 JSON 格式。API 文档会说明可用端点、必填字段和认证规则。
并非所有 API 都基于 Web。软件库、操作系统和数据库也会提供 API,但数据采集流程通常使用 Web API。
API 与网页采集
| API | 网页采集 | |
|---|---|---|
| 来源 | 文档中列明的端点 | 公开网页 |
| 数据格式 | 通常为结构化的 JSON 或 XML | 需要提取数据的 HTML |
| 访问控制 | 密钥、权限范围和配额 | 网站规则和爬虫控制 |
| 变更风险 | 版本变更或弃用 | 页面布局和标记变更 |
如果官方 API 能根据可接受的条款提供所需数据,应优先使用。网页采集可以收集 API 未提供的公开信息,但爬虫必须遵守网站条款、robots.txt 指令和请求限制。
数据采集中的 API
可靠的 API 客户端通常需要处理:
- **认证:**按照文档发送 API 密钥、OAuth 令牌或签名请求。
- **分页:**根据页码、游标或继续令牌依次请求,直至获取完整结果集。
- **限速:**遵守服务规定的每分钟请求数或账号配额。
- **错误:**临时故障可以重试,但遇到无效认证信息或格式错误的请求时应停止。
如果限速导致返回 429 Too Many Requests 响应,响应中如有 Retry-After,应按其要求等待,并降低请求频率。
通过代理访问 API
HTTP 客户端可将代理 URL 设置为 http://USERNAME:PASSWORD@HOST:PORT,通过代理发送 API 流量。代理会改变 API 看到的源 IP,可用于地区测试或统一管理网络出口。
代理不会改变 API 密钥、权限或账号配额。使用轮换 IP 规避 API 限制可能违反其条款,而且往往无效,因为限制可能与账号或令牌绑定。如果代理服务器不接受所提供的认证凭据,会在请求到达 API 前返回 407 Proxy Authentication Required。
常见问题
API 是什么的缩写?
API 是 Application Programming Interface(应用程序编程接口)的缩写,指软件向其他组件或服务请求数据或功能时所遵循的规则。
API 比网页采集更好吗?
如果官方 API 能提供所需数据,通常更好。API 返回的字段更稳定,而当获准使用的公开数据只存在于网页中时,网页采集会更实用。
可以通过轮换代理访问 API 吗?
可以,但前提是 API 允许代理流量。IP 轮换可能干扰 IP 白名单或与 IP 绑定的会话,也不会重置与 API 密钥或账号关联的限制。