在Python接口项目开发中,规范的接口封装和合理的调用流程能大幅提升代码的可维护性和复用性,下面我们就从基础封装到实际调用完整走一遍流程。

接口封装基础准备
接口封装前需要先明确常用的请求方法,一般接口项目会用到GET、POST、PUT、DELETE这几种请求方式,我们可以借助requests库来实现统一的请求处理,避免重复编写请求代码。
首先安装依赖库:
pip install requests
封装通用请求方法
我们可以创建一个基础请求类,统一处理请求头、超时时间、异常捕获等通用逻辑,后续所有接口都可以继承这个类或者调用这个类的方法。
import requests
import json
class BaseApiClient:
def __init__(self, base_url, timeout=10):
# 基础请求地址
self.base_url = base_url
# 默认超时时间
self.timeout = timeout
# 默认请求头
self.headers = {
"Content-Type": "application/json"
}
def _send_request(self, method, endpoint, params=None, data=None):
# 拼接完整请求地址
url = self.base_url + endpoint
try:
if method.upper() == "GET":
response = requests.get(url, params=params, headers=self.headers, timeout=self.timeout)
elif method.upper() == "POST":
response = requests.post(url, json=data, headers=self.headers, timeout=self.timeout)
elif method.upper() == "PUT":
response = requests.put(url, json=data, headers=self.headers, timeout=self.timeout)
elif method.upper() == "DELETE":
response = requests.delete(url, params=params, headers=self.headers, timeout=self.timeout)
else:
raise ValueError("不支持的请求方法: {}".format(method))
# 检查响应状态码
response.raise_for_status()
return response.json()
except requests.exceptions.Timeout:
print("请求超时,请检查网络或接口地址")
return None
except requests.exceptions.HTTPError as e:
print("HTTP请求错误: {}".format(e))
return None
except json.JSONDecodeError:
print("响应内容不是合法的JSON格式")
return None
封装具体业务接口
有了基础请求类之后,我们可以针对具体业务封装对应的接口类,比如用户相关的接口,我们可以创建UserApi类,继承BaseApiClient,然后实现具体的接口方法。
class UserApi(BaseApiClient):
def __init__(self, base_url):
super().__init__(base_url)
def get_user_list(self, page=1, page_size=10):
# 获取用户列表接口
endpoint = "/api/users"
params = {
"page": page,
"page_size": page_size
}
return self._send_request("GET", endpoint, params=params)
def create_user(self, username, email, password):
# 创建用户接口
endpoint = "/api/users"
data = {
"username": username,
"email": email,
"password": password
}
return self._send_request("POST", endpoint, data=data)
def get_user_detail(self, user_id):
# 获取用户详情接口
endpoint = "/api/users/{}".format(user_id)
return self._send_request("GET", endpoint)
def update_user(self, user_id, username=None, email=None):
# 更新用户信息接口
endpoint = "/api/users/{}".format(user_id)
data = {}
if username:
data["username"] = username
if email:
data["email"] = email
return self._send_request("PUT", endpoint, data=data)
def delete_user(self, user_id):
# 删除用户接口
endpoint = "/api/users/{}".format(user_id)
return self._send_request("DELETE", endpoint)
接口调用实战
封装好接口之后,我们就可以在实际业务中直接调用对应的方法,不需要再关心请求的细节,只需要传入对应的参数即可。
# 初始化用户接口客户端,这里使用测试地址,实际项目替换为真实接口地址
user_client = UserApi(base_url="http://ipipp.com")
# 调用获取用户列表接口
user_list = user_client.get_user_list(page=1, page_size=5)
if user_list:
print("获取用户列表成功: {}".format(user_list))
# 调用创建用户接口
create_result = user_client.create_user(
username="test_user",
email="test@ipipp.com",
password="test123456"
)
if create_result:
print("创建用户成功: {}".format(create_result))
user_id = create_result.get("data", {}).get("id")
# 调用获取用户详情接口
if user_id:
user_detail = user_client.get_user_detail(user_id)
if user_detail:
print("用户详情: {}".format(user_detail))
# 调用更新用户接口
update_result = user_client.update_user(user_id, username="updated_user")
if update_result:
print("更新用户成功: {}".format(update_result))
# 调用删除用户接口
delete_result = user_client.delete_user(user_id)
if delete_result:
print("删除用户成功: {}".format(delete_result))
注意事项
- 实际项目中需要根据接口文档调整请求头、参数格式,比如有些接口需要鉴权,需要在请求头中添加
token字段 - 异常处理可以根据业务需求做更细化的处理,比如区分不同的HTTP状态码返回不同的提示
- 封装的接口方法可以补充参数校验逻辑,避免传入不合法的参数导致请求失败
- 如果有文件上传等特殊的请求需求,可以在基础请求类中补充对应的方法