Releases: riceshowerX/SwiftAPI-Connect
Releases · riceshowerX/SwiftAPI-Connect
V1.3
1. API 密钥安全存储 (crypto.py)
改进前:
密钥直接存储在 .env 文件中,安全性较低,容易泄露。
# 改进前
if ENCRYPTION_KEY is None:
ENCRYPTION_KEY = Fernet.generate_key()
with open(".env", "a") as f:
f.write(f"\nENCRYPTION_KEY={ENCRYPTION_KEY.decode()}\n")
改进后:
密钥从环境变量中读取,避免了将敏感信息存储在代码或配置文件中。
# 改进后
ENCRYPTION_KEY = os.getenv("ENCRYPTION_KEY")
if ENCRYPTION_KEY is None:
raise ValueError("ENCRYPTION_KEY environment variable is not set.")
改进带来的好处:
- 提高了安全性,降低了密钥泄露的风险。
- 符合安全最佳实践,避免将敏感信息硬编码在代码中。
2. 进程监控功能增强 (process_monitor.py)
改进前:
监控频率固定为 1 秒,无法自定义;缺少资源使用阈值告警。
# 改进前
time.sleep(1)
改进后:
- 监控频率可通过 config.py 中的
MONITORING_INTERVAL
配置。 - 添加了 CPU 和内存使用率阈值,并在超过阈值时记录警告日志。
# 改进后
time.sleep(settings.MONITORING_INTERVAL)
# ...
if cpu_percent > settings.CPU_THRESHOLD:
logging.warning(f"{self.process_name} CPU usage exceeds threshold: {cpu_percent}%")
if memory_percent > settings.MEMORY_THRESHOLD:
logging.warning(f"{self.process_name} Memory usage exceeds threshold: {memory_percent}%")
改进带来的好处:
- 更加灵活,可以根据实际需求调整监控频率。
- 提供了资源使用阈值告警,及时提醒用户关注潜在的性能问题。
3. 配置项增强 (config.py)
改进前:
只有基本的服务器配置项。
改进后:
添加了监控频率、CPU 阈值和内存阈值的配置项。
# 改进后
class Settings(BaseSettings):
# ...
MONITORING_INTERVAL: int = int(os.getenv("MONITORING_INTERVAL", 5))
CPU_THRESHOLD: int = int(os.getenv("CPU_THRESHOLD", 80))
MEMORY_THRESHOLD: int = int(os.getenv("MEMORY_THRESHOLD", 80))
改进带来的好处:
- 提高了可配置性,方便用户根据实际需求调整应用程序行为。
4. 优雅地关闭程序 (run.py)
改进前:
直接结束进程,可能导致数据丢失或其他问题。
改进后:
使用 signal 模块处理 SIGINT 和 SIGTERM 信号,允许程序在关闭前执行必要的清理操作。
# 改进后
def signal_handler(sig, frame):
logging.info("Stopping SwiftAPI-Connect...")
# 在这里添加关闭资源的操作,例如关闭数据库连接等
exit(0)
if __name__ == "__main__":
signal.signal(signal.SIGINT, signal_handler)
signal.signal(signal.SIGTERM, signal_handler)
# ...
改进带来的好处:
- 提高了程序的可靠性和稳定性,避免了意外关闭导致的数据丢失或其他问题。
5. 自定义异常和日志记录 (encoding_helper.py 和 http_errors.py)
改进前:
只使用通用异常类型,错误信息不够详细。
改进后:
- 定义了自定义异常
DecodingError
和HTTPError
,用于更清晰地表示特定类型的错误。 - 添加了更详细的日志记录,包括尝试过的编码、请求方法、URL 和错误信息等,方便排查问题。
# encoding_helper.py
class DecodingError(Exception):
# ...
# http_errors.py
class HTTPError(Exception):
# ...
async def http_exception_handler(request: Request, exc: Union[HTTPException, HTTPError]):
"""全局 HTTP 异常处理"""
logging.error(f"Request: {request.method} {request.url} - Error: {exc}")
# ...
改进带来的好处:
- 提高了代码的可读性和可维护性。
- 方便排查问题,更快地定位和解决错误。
其他文件
progress_bar.py:
- 添加了回调函数,可以根据实际操作进度更新进度条。
request_form.py:
- 功能基本保持不变,但建议添加参数类型校验、默认值和删除参数的功能,提高易用性。
V1.2
代码结构:
- 高度模块化: 将核心功能 (
core
), 配置 (config
), 服务 (services
), UI 组件 (components
) 分别放置在独立的模块中,实现了高度模块化的代码结构。这使得代码更易于维护,扩展新功能也更加容易。 - 逻辑分离: 将 Streamlit UI 逻辑和 HTTP 请求逻辑分离,并将 UI 组件化,使得代码更易于理解、测试和维护。
核心功能加强:
- 加密工具: 新增
crypto.py
模块,提供加密请求的功能,增强了数据传输的安全性。 - 任务管理服务: 新增
task_manager.py
,可以管理和调度 HTTP 请求任务,例如定时任务,批处理任务等。 - 通知服务: 新增
notification.py
,可以提供请求完成的通知功能,例如邮件通知,webhook 等。
配置管理:
- 集中配置:
config.py
文件用于集中管理项目配置,例如 API 密钥,服务器地址,CORS 设置等。 这使得修改配置更加方便,也避免了敏感信息直接暴露在代码中。
安全性:
- API Key 安全存储: 将 API Key 存储在
st.session_state
中,避免了 API Key 直接暴露在代码中。同时,可以结合config.py
模块,将 API Key 存储在更安全的位置,例如环境变量或者密钥管理服务。 - 加密请求:
crypto.py
模块提供了加密请求的功能,可以有效保护敏感数据在传输过程中的安全。
性能:
- 多进程: 使用
multiprocessing
库创建进程池,并行运行 FastAPI 服务器和 Streamlit UI 应用,提高了应用程序的效率。 - 任务管理服务:
task_manager.py
可以优化任务调度,提高请求处理效率。
用户体验:
- 进度条: 使用
progress_bar.py
组件提供更美观、易用的进度条显示功能,提升用户体验。 - 自动检测编码: 使用
chardet
自动检测响应编码,避免了乱码问题,提高了用户体验。 - UI 组件化: 将 UI 组件化,可以创建更复杂、更美观的界面,提升用户体验。
代码风格:
- Pydantic V2: 将
@validator
装饰器更新为@field_validator
,符合 Pydantic V2 的规范。 - 函数命名: 优化了一些函数的命名,使其更清晰、更准确地反映函数的功能。
可维护性:
- 类型提示: 使用类型提示,提高了代码可读性和可维护性。
- 文档: 优化了部分函数和类的文档,使其更易于理解和使用。
V1.1
1. 安全性
- 限制 CORS 允许的来源:原代码中
fastapi_server.py
允许所有来源的 CORS 请求,存在安全风险。优化后的代码限制了允许的来源,只允许来自http://localhost:8501
的请求。 - 添加 API 密钥验证:原代码中没有身份验证机制。优化后的代码在
fastapi_server.py
中添加了 API 密钥验证中间件,要求请求包含x-api-key
头信息,并与.env
文件中设置的API_KEY
相匹配。 - 在 UI 中添加 API 密钥输入:优化后的
ui/app.py
文件中添加了 API 密钥输入框,用户需要输入 API 密钥才能发送请求。
2. 性能
- 使用异步处理:优化后的代码在
app/utils/request_helper.py
中使用了httpx
库的异步处理,提高了请求处理效率。
3. 可维护性
- 集中配置信息:原代码中配置信息散落在多个文件中。优化后的代码将配置信息集中到
.env
文件中,方便管理和修改。 - 使用 Pydantic 模型进行数据验证:优化后的代码在
app/schemas/request_schema.py
和app/schemas/response_schema.py
中使用 Pydantic 模型对请求和响应数据进行验证,提高了代码的可读性和可维护性。 - 使用
validate_arguments
装饰器验证请求参数:优化后的代码在app/routers/http_mock.py
中使用了validate_arguments
装饰器来验证请求参数,方便地使用 Pydantic 模型进行验证。 - 添加错误处理:优化后的代码在
app/routers/http_mock.py
中添加了更全面的错误处理,并返回更友好的错误信息。 - 添加日志记录:优化后的代码在
app/main.py
和fastapi_server.py
中添加了日志记录,方便调试和排查问题。
4. 功能性
- 使用
chardet
库自动检测编码:优化后的代码在ui/app.py
中使用chardet
库自动检测响应编码,并使用检测到的编码进行解码,提高了响应内容解码的准确性。 - 添加自定义功能:优化后的代码添加了一些自定义功能,例如:
- 在
ui/app.py
中添加了对响应数据的格式化展示,并显示响应头信息。 - 在
run.py
中添加了对进程状态的监控功能。
- 在
5. 其他
- 使用
retry
库处理网络错误:优化后的代码在app/routers/http_mock.py
中使用retry
库来处理网络错误,例如重试请求、设置超时时间等,提高了请求的稳定性和可靠性。 - 优化代码结构:优化后的代码结构更加清晰,代码逻辑更加合理,提高了代码的可读性和可维护性。
V1.0
使用 FastAPI 构建,提供快速和高效的 API 服务。
内置用户界面,可视化展示 HTTP 请求和响应,并提供简单易用的操作界面。
支持模拟 HTTP 请求,包括 GET、POST、PUT、DELETE 等各种方法。
提供详细的响应信息,便于检查和调试 API 响应。