课程 18:应用程序接口(API)
1. API基础与发展
1.1 什么是API?
定义: API(Application Programming Interface)是应用程序编程接口,规定了不同软件组件之间如何交互。
历史与意义: API推动了软件模块化、服务化和互联网协作,是现代软件开发的基石。
区别: API是接口,SDK是开发包,库是代码集合,协议是通信规则。
1.2 API的类型与场景
- 操作系统API:如文件、网络、进程管理
- 库API:如math、datetime、json、os、sys等
- Web API:如天气、翻译、支付、地图等服务
- 第三方API:如微信、支付宝、百度、谷歌等
2. 标准库API与常用用法
2.1 math、datetime、json、os等
import math, datetime, json, os
print(math.sqrt(16))
print(datetime.datetime.now())
data = {'a': 1, 'b': 2}
print(json.dumps(data))
print(os.getcwd())
2.2 help与文档查阅
help(math.sqrt)
help(os.listdir)
查文档技巧:
• help()函数、官方文档、第三方文档网站
• 阅读参数、返回值、异常说明,关注示例代码
3. Web API详解
3.1 GET/POST/PUT/DELETE请求
import requests
# GET请求
r = requests.get('https://api.github.com')
print(r.status_code, r.json())
# POST请求
r = requests.post('https://httpbin.org/post', data={'key': 'value'})
print(r.json())
# 传递headers和认证
token = 'your_token'
headers = {'Authorization': f'Bearer {token}'}
r = requests.get('https://api.example.com/data', headers=headers)
# 处理超时和异常
try:
r = requests.get('https://api.github.com', timeout=3)
r.raise_for_status()
except requests.RequestException as e:
print('请求失败:', e)
调试技巧: 可用Postman、curl等工具测试API,便于调试和抓包。
4. API数据解析与调试
4.1 解析JSON/XML等数据
import requests, json
r = requests.get('https://api.github.com')
data = r.json()
from pprint import pprint
pprint(data)
4.2 日志与调试输出
import logging
logging.basicConfig(level=logging.INFO)
logging.info('API请求结果: %s', data)
常见问题:
• 数据格式不符:检查API文档和返回内容
• 认证失败、限流、超时:关注状态码和错误信息,合理重试和降级
5. 自定义API设计与测试
5.1 设计自定义API(函数/RESTful)
def add(a: int, b: int) -> int:
"""返回a和b的和"""
return a + b
print(add(3, 5))
# RESTful接口设计(伪代码)
# URL: /api/v1/add, Method: POST, Body: {"a": 1, "b": 2}
5.2 单元测试与文档
def test_add():
assert add(2, 3) == 5
assert add(-1, 1) == 0
print('测试通过')
print(add.__doc__)
建议: 设计API时要写好docstring,明确参数类型、返回值和异常,便于他人调用和维护。
6. API实际应用案例
6.1 天气查询API
# 以和风天气API为例(需注册Key)
import requests
url = 'https://devapi.qweather.com/v7/weather/now?location=101010100&key=你的key'
r = requests.get(url)
if r.status_code == 200:
print(r.json())
else:
print('获取失败')
6.2 翻译助手API
# 百度翻译API(伪代码)
import requests
url = 'https://fanyi.baidu.com/api/trans/vip/translate'
params = {'q': 'hello', 'from': 'en', 'to': 'zh', 'appid': '你的appid', 'salt': '随机数', 'sign': '签名'}
r = requests.get(url, params=params)
print(r.json())
6.3 自动化办公API
# 用requests+os下载文件
def download_file(url: str, filename: str):
import requests, os
r = requests.get(url)
with open(filename, 'wb') as f:
f.write(r.content)
print(f'已保存到{os.path.abspath(filename)}')
download_file('https://www.example.com/logo.png', 'logo.png')
6.4 数据采集API
# 爬取新闻API
url = 'https://api.example.com/news'
r = requests.get(url)
if r.ok:
for item in r.json()['data']:
print(item['title'])
7. 常见错误与调试
- 网络请求失败:检查URL、网络、API Key等
- 参数错误:查阅API文档,确认参数类型和必填项
- 数据解析失败:注意返回格式(如JSON)
- API限流/认证失败/超时:关注状态码,合理重试、降级、日志记录
import time
for i in range(3):
try:
r = requests.get('https://api.github.com/unknown', timeout=2)
r.raise_for_status()
break
except requests.RequestException as e:
print('请求失败:', e)
time.sleep(1)
学习建议:API是现代编程的重要基础,建议多查文档、多实践,遇到问题要学会调试和查阅官方资料。推荐多用help()、官方文档、第三方文档网站、Postman等辅助学习和调试。
思考题:API的设计有哪些最佳实践?如何保证API的安全性和稳定性?在实际开发中,如何高效集成和管理多个API?API限流、认证、异常处理有哪些常见方案?