api_client.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. """
  2. API客户端模块
  3. 用于与外部API交互
  4. """
  5. import requests
  6. from typing import Dict, Any, Optional
  7. class APIClient:
  8. """API客户端基类"""
  9. def __init__(self, base_url: str, api_key: Optional[str] = None):
  10. """
  11. 初始化API客户端
  12. Args:
  13. base_url: API基础URL
  14. api_key: API密钥
  15. """
  16. self.base_url = base_url
  17. self.api_key = api_key
  18. self.session = requests.Session()
  19. if api_key:
  20. self.session.headers.update({
  21. 'Authorization': f'Bearer {api_key}'
  22. })
  23. def get(self, endpoint: str, params: Optional[Dict[str, Any]] = None) -> Dict[str, Any]:
  24. """
  25. 发送GET请求
  26. Args:
  27. endpoint: API端点
  28. params: 查询参数
  29. Returns:
  30. 响应数据
  31. """
  32. # TODO: 添加重试逻辑
  33. url = f"{self.base_url}/{endpoint}"
  34. response = self.session.get(url, params=params)
  35. response.raise_for_status()
  36. return response.json()
  37. def post(self, endpoint: str, data: Dict[str, Any]) -> Dict[str, Any]:
  38. """
  39. 发送POST请求
  40. Args:
  41. endpoint: API端点
  42. data: 请求数据
  43. Returns:
  44. 响应数据
  45. """
  46. # TODO: 添加错误处理
  47. url = f"{self.base_url}/{endpoint}"
  48. response = self.session.post(url, json=data)
  49. response.raise_for_status()
  50. return response.json()
  51. def put(self, endpoint: str, data: Dict[str, Any]) -> Dict[str, Any]:
  52. """
  53. 发送PUT请求
  54. Args:
  55. endpoint: API端点
  56. data: 请求数据
  57. Returns:
  58. 响应数据
  59. """
  60. url = f"{self.base_url}/{endpoint}"
  61. response = self.session.put(url, json=data)
  62. response.raise_for_status()
  63. return response.json()
  64. def delete(self, endpoint: str) -> None:
  65. """
  66. 发送DELETE请求
  67. Args:
  68. endpoint: API端点
  69. """
  70. # TODO: 添加确认机制
  71. url = f"{self.base_url}/{endpoint}"
  72. response = self.session.delete(url)
  73. response.raise_for_status()