Skip to content

Releases: riceshowerX/SwiftAPI-Connect

V1.3

06 Jun 09:08
2127f02
Compare
Choose a tag to compare

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)

改进前:
只使用通用异常类型,错误信息不够详细。

改进后:

  • 定义了自定义异常 DecodingErrorHTTPError,用于更清晰地表示特定类型的错误。
  • 添加了更详细的日志记录,包括尝试过的编码、请求方法、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

21 May 07:41
09bc46a
Compare
Choose a tag to compare

代码结构:

  • 高度模块化: 将核心功能 (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

21 May 02:21
f6148b2
Compare
Choose a tag to compare

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.pyapp/schemas/response_schema.py 中使用 Pydantic 模型对请求和响应数据进行验证,提高了代码的可读性和可维护性。
  • 使用 validate_arguments 装饰器验证请求参数:优化后的代码在 app/routers/http_mock.py 中使用了 validate_arguments 装饰器来验证请求参数,方便地使用 Pydantic 模型进行验证。
  • 添加错误处理:优化后的代码在 app/routers/http_mock.py 中添加了更全面的错误处理,并返回更友好的错误信息。
  • 添加日志记录:优化后的代码在 app/main.pyfastapi_server.py 中添加了日志记录,方便调试和排查问题。

4. 功能性

  • 使用 chardet 库自动检测编码:优化后的代码在 ui/app.py 中使用 chardet 库自动检测响应编码,并使用检测到的编码进行解码,提高了响应内容解码的准确性。
  • 添加自定义功能:优化后的代码添加了一些自定义功能,例如:
    • ui/app.py 中添加了对响应数据的格式化展示,并显示响应头信息。
    • run.py 中添加了对进程状态的监控功能。

5. 其他

  • 使用 retry 库处理网络错误:优化后的代码在 app/routers/http_mock.py 中使用 retry 库来处理网络错误,例如重试请求、设置超时时间等,提高了请求的稳定性和可靠性。
  • 优化代码结构:优化后的代码结构更加清晰,代码逻辑更加合理,提高了代码的可读性和可维护性。

V1.0

21 May 01:08
6db7994
Compare
Choose a tag to compare

使用 FastAPI 构建,提供快速和高效的 API 服务。
内置用户界面,可视化展示 HTTP 请求和响应,并提供简单易用的操作界面。
支持模拟 HTTP 请求,包括 GET、POST、PUT、DELETE 等各种方法。
提供详细的响应信息,便于检查和调试 API 响应。