jiateng_ws/utils/api_utils.py

135 lines
4.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import requests
import json
from .config_loader import ConfigLoader
class ApiUtils:
def __init__(self):
"""初始化 API 工具类"""
self.config_loader = ConfigLoader.get_instance()
self.base_url = self.config_loader.get_value("app.base_url", "")
self.apis = self.config_loader.get_value("apis", {})
def get_full_url(self, url):
"""
根据 API 键获取完整 URL
Args:
url: API 配置中的键名
Returns:
str: 完整的 URL
"""
if url not in self.apis:
return None
return f"{self.base_url}{self.apis[url]}"
def request(self, method, url, params=None, data=None, json_data=None, headers=None):
"""
发送 HTTP 请求
Args:
method: 请求方法,如 'GET', 'POST'
url: API 配置中的键名
params: URL 参数
data: 表单数据
json_data: JSON 数据
headers: 请求头
Returns:
dict: 响应数据
"""
full_url = self.get_full_url(url)
if not full_url:
return {"success": False, "message": f"未找到 API 配置: {url}"}
# 处理托盘号参数
# 如果是托盘查询接口并且有tp_note参数将其附加到URL末尾
if url == "get_tray_info" and params and "tp_note" in params:
full_url = f"{full_url}{params['tp_note']}"
# 从params中移除tp_note因为已经添加到URL中
params = {k: v for k, v in params.items() if k != "tp_note"}
default_headers = {
"Content-Type": "application/json"
}
if headers:
default_headers.update(headers)
try:
response = requests.request(
method=method,
url=full_url,
params=params,
data=data,
json=json_data,
headers=default_headers
)
response.raise_for_status()
return response.json()
except requests.exceptions.RequestException as e:
return {"success": False, "message": f"请求异常: {str(e)}"}
except json.JSONDecodeError:
return {"success": False, "message": "响应数据不是有效的 JSON 格式"}
def get(self, url, params=None, headers=None):
"""
发送 GET 请求
Args:
url: API 配置中的键名
params: URL 参数
headers: 请求头
Returns:
dict: 响应数据
"""
return self.request("GET", url, params=params, headers=headers)
def post(self, url, json_data=None, data=None, headers=None):
"""
发送 POST 请求
Args:
url: API 配置中的键名
json_data: JSON 数据
data: 表单数据
headers: 请求头
Returns:
dict: 响应数据
"""
return self.request("POST", url, data=data, json_data=json_data, headers=headers)
def put(self, url, json_data=None, data=None, headers=None):
"""
发送 PUT 请求
Args:
url: API 配置中的键名
json_data: JSON 数据
data: 表单数据
headers: 请求头
Returns:
dict: 响应数据
"""
return self.request("PUT", url, data=data, json_data=json_data, headers=headers)
def delete(self, url, params=None, headers=None):
"""
发送 DELETE 请求
Args:
url: API 配置中的键名
params: URL 参数
headers: 请求头
Returns:
dict: 响应数据
"""
return self.request("DELETE", url, params=params, headers=headers)