课程 18:应用程序接口(API)

学习目标

1. API基础与发展

1.1 什么是API?

定义: API(Application Programming Interface)是应用程序编程接口,规定了不同软件组件之间如何交互。
历史与意义: API推动了软件模块化、服务化和互联网协作,是现代软件开发的基石。
区别: API是接口,SDK是开发包,库是代码集合,协议是通信规则。

1.2 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. 常见错误与调试

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)

8. 编程练习与挑战

练习1:基础操作

练习2:进阶技巧

练习3:实战项目

9. 综合作业与项目

作业18:API综合应用

任务1:API数据采集与分析

实现一个程序,定时采集某个公开API的数据(如天气、新闻、汇率),并进行简单分析和可视化。

任务2:自定义API设计与文档

设计一个自定义API(如学生信息管理),写好文档字符串,支持增删查改,并编写调用示例和单元测试。

任务3:API集成项目

实现一个小型应用,集成多个API(如天气+翻译+定时提醒),提升综合能力。

任务4(可选扩展):

用Postman/curl等工具调试和测试你实现的API。

学习建议:API是现代编程的重要基础,建议多查文档、多实践,遇到问题要学会调试和查阅官方资料。推荐多用help()、官方文档、第三方文档网站、Postman等辅助学习和调试。
思考题:API的设计有哪些最佳实践?如何保证API的安全性和稳定性?在实际开发中,如何高效集成和管理多个API?API限流、认证、异常处理有哪些常见方案?