发布日期: 2025年8月18日
版本: v1.0
作者: 源滚滚


📋 目录

  1. 项目概述
  2. 项目特色
  3. 如何安装
  4. 使用示例
  5. 总结

项目概述

yggpy_api 是一个现代化的高性能 Python API 框架,专为追求极致性能和开发效率的开发者设计。它基于 Starlette 和 Uvicorn 构建,集成了 orjson、Pydantic v2 等先进技术,为开发者提供了一个既简单易用又功能强大的 API 开发解决方案。

🎯 设计理念

  • 性能优先: 通过 orjson 集成实现 2-5 倍的 JSON 处理性能提升
  • 类型安全: 基于 Pydantic v2 的全面类型验证和转换
  • 开发友好: 直观的 API 设计和丰富的开发工具
  • 生产就绪: 完善的错误处理、中间件支持和监控功能

🏗️ 技术架构

┌─────────────────────────────────────────┐
│              yggpy_api                  │
├─────────────────────────────────────────┤
│  高性能 JSON (orjson)                   │
│  参数验证 (Pydantic v2)                 │
│  请求/响应处理                          │
│  中间件系统                             │
├─────────────────────────────────────────┤
│         Starlette Framework             │
├─────────────────────────────────────────┤
│           Uvicorn Server                │
└─────────────────────────────────────────┘

项目特色

🔥 极致性能

JSON 处理性能对比
数据大小 标准库 json orjson 性能提升
1KB 0.12ms 0.05ms 2.4x 更快
100KB 12.5ms 3.2ms 3.9x 更快
10MB 1.25s 0.31s 4.0x 更快
核心性能特性
  • orjson 集成: 自动选择最优 JSON 后端
  • 零拷贝操作: 最小化内存分配
  • 异步处理: 基于 asyncio 的高并发支持
  • 内存优化: 针对大数据结构优化

🛡️ 全面验证

参数验证功能
  • 多层次验证: 头部、路径、查询、表单、JSON、请求体
  • 类型转换: 自动类型转换和验证
  • 约束检查: 长度、范围、模式匹配等
  • 错误处理: 详细的验证错误信息
Pydantic v2 集成
from pydantic import BaseModel, Field

class User(BaseModel):
    name: str = Field(..., min_length=1, max_length=100)
    email: str = Field(..., pattern=r'^[^@]+@[^@]+\.[^@]+$')
    age: int = Field(..., ge=18, le=120)

🎯 开发体验

开发工具
  • 热重载: 代码修改自动重启服务
  • 环境管理: 内置 .env 文件支持
  • 错误追踪: 详细的错误信息和堆栈跟踪
  • API 文档: 自动生成的 API 文档
简洁 API
import yggpy_api as ggapi

app = ggapi.Api()

@app.get("/users/{user_id}")
async def get_user():
    user_id = ggapi.valid_path('user_id', int, ge=1)
    return ggapi.success("用户获取成功", data={"user_id": user_id})

🔧 生产特性

企业级功能
  • 中间件系统: 自定义中间件支持
  • 异常处理: 全局异常处理机制
  • 监控集成: 性能监控和指标收集
  • 优雅关闭: 安全的服务关闭流程
部署支持
  • 容器化: Docker 友好的部署方式
  • 负载均衡: 支持多实例部署
  • 健康检查: 内置健康检查端点
  • 日志管理: 结构化日志输出

如何安装

📦 系统要求

  • Python: 3.8 或更高版本
  • 操作系统: Windows, macOS, Linux
  • 内存: 建议 512MB 以上
  • 磁盘: 100MB 可用空间

🚀 快速安装

方法一:使用 pip 安装(推荐)
# 安装最新版本
pip install yggpy_api

# 安装指定版本
pip install yggpy_api==1.0.0

# 升级到最新版本
pip install --upgrade yggpy_api
方法二:从源码安装
# 克隆仓库
git clone https://github.com/YggAI/yggpy_api.git
cd yggpy_api

# 创建虚拟环境(推荐)
python -m venv venv
source venv/bin/activate  # Linux/macOS
# 或
venv\Scripts\activate     # Windows

# 安装依赖
pip install -e .
方法三:开发环境安装
# 安装开发依赖
pip install -e ".[dev]"

# 安装测试工具
pip install pytest pytest-cov

# 运行测试验证安装
pytest tests/

✅ 验证安装

创建一个简单的测试文件 test_install.py

import yggpy_api as ggapi

# 创建应用实例
app = ggapi.Api()

@app.get("/")
async def hello():
    return ggapi.success("yggpy_api 安装成功!")

if __name__ == "__main__":
    print("🚀 启动测试服务器...")
    app.run(port=8888)

运行测试:

python test_install.py

访问 http://localhost:8888 看到成功消息即表示安装完成。

🔧 可选依赖

# 高性能 JSON 处理(自动安装)
pip install orjson

# 开发工具
pip install black isort flake8 mypy

# 测试工具
pip install pytest pytest-asyncio pytest-cov

# 文档生成
pip install mkdocs mkdocs-material

使用示例

以下章节将通过 9 个完整的示例,详细介绍 yggpy_api 的各项功能和使用方法。每个示例都包含完整的代码、中文注释和运行结果说明。

4.1 基础API使用 (c01_basic)

📖 示例说明

这个示例展示了 yggpy_api 的基础功能,包括:

  • 创建 API 应用实例
  • 定义路由和处理函数
  • 处理不同的 HTTP 方法
  • 返回标准化响应
💻 完整代码
"""
yggpy_api 基础使用示例

本示例演示:
1. 创建 API 应用实例
2. 定义基础路由
3. 处理不同 HTTP 方法
4. 返回标准化响应
5. 启动开发服务器
"""

import sys
import os
from datetime import datetime

# 添加项目根目录到 Python 路径(开发环境)
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "../..")))

import yggpy_api as ggapi

# 创建 API 应用实例
app = ggapi.Api()

# 示例数据:模拟用户数据库
users_db = [
    {"id": 1, "name": "张三", "email": "zhangsan@example.com", "age": 25},
    {"id": 2, "name": "李四", "email": "lisi@example.com", "age": 30},
    {"id": 3, "name": "王五", "email": "wangwu@example.com", "age": 28}
]

# ========== 基础路由示例 ==========

@app.get("/")
async def 首页():
    """首页欢迎接口"""
    return ggapi.success("欢迎使用 yggpy_api!", data={
        "框架名称": "yggpy_api",
        "版本": "1.0.0",
        "当前时间": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
        "功能特点": [
            "高性能 JSON 处理",
            "全面参数验证",
            "简洁易用的 API",
            "生产就绪"
        ]
    })

@app.get("/hello")
async def 问候():
    """简单问候接口"""
    return ggapi.success("你好,世界!")

@app.get("/hello/{name}")
async def 个性化问候():
    """个性化问候接口"""
    # 获取路径参数
    name = ggapi.get_path('name', str)
    
    return ggapi.success(f"你好,{name}!", data={
        "问候对象": name,
        "问候时间": datetime.now().strftime("%H:%M:%S")
    })

# ========== 用户管理接口示例 ==========

@app.get("/users")
async def 获取用户列表():
    """获取所有用户列表"""
    return ggapi.success("用户列表获取成功", data={
        "用户总数": len(users_db),
        "用户列表": users_db
    })

@app.get("/users/{user_id}")
async def 获取单个用户():
    """根据ID获取单个用户信息"""
    # 获取路径参数并转换为整数
    user_id = ggapi.get_path('user_id', int)
    
    # 查找用户
    user = next((u for u in users_db if u["id"] == user_id), None)
    
    if user:
        return ggapi.success("用户信息获取成功", data=user)
    else:
        return ggapi.error404("用户不存在", data={"查询ID": user_id})

@app.post("/users")
async def 创建用户():
    """创建新用户"""
    # 获取 JSON 数据
    user_data = await ggapi.get_json()
    
    # 生成新用户ID
    new_id = max([u["id"] for u in users_db]) + 1 if users_db else 1
    
    # 创建新用户
    new_user = {
        "id": new_id,
        "name": user_data.get("name", "未知用户"),
        "email": user_data.get("email", ""),
        "age": user_data.get("age", 0)
    }
    
    # 添加到数据库
    users_db.append(new_user)
    
    return ggapi.success("用户创建成功", data=new_user)

@app.put("/users/{user_id}")
async def 更新用户():
    """更新用户信息"""
    user_id = ggapi.get_path('user_id', int)
    user_data = await ggapi.get_json()
    
    # 查找用户
    user = next((u for u in users_db if u["id"] == user_id), None)
    
    if not user:
        return ggapi.error404("用户不存在", data={"查询ID": user_id})
    
    # 更新用户信息
    user.update({
        "name": user_data.get("name", user["name"]),
        "email": user_data.get("email", user["email"]),
        "age": user_data.get("age", user["age"])
    })
    
    return ggapi.success("用户信息更新成功", data=user)

@app.delete("/users/{user_id}")
async def 删除用户():
    """删除用户"""
    user_id = ggapi.get_path('user_id', int)
    
    # 查找用户索引
    user_index = next((i for i, u in enumerate(users_db) if u["id"] == user_id), None)
    
    if user_index is None:
        return ggapi.error404("用户不存在", data={"查询ID": user_id})
    
    # 删除用户
    deleted_user = users_db.pop(user_index)
    
    return ggapi.success("用户删除成功", data={
        "已删除用户": deleted_user,
        "剩余用户数": len(users_db)
    })

# ========== 查询参数示例 ==========

@app.get("/search")
async def 搜索用户():
    """根据查询参数搜索用户"""
    # 获取查询参数
    name = ggapi.get_query('name', str, default='')
    min_age = ggapi.get_query('min_age', int, default=0)
    max_age = ggapi.get_query('max_age', int, default=100)
    
    # 过滤用户
    filtered_users = []
    for user in users_db:
        # 名称匹配(模糊搜索)
        name_match = name.lower() in user["name"].lower() if name else True
        # 年龄范围匹配
        age_match = min_age <= user["age"] <= max_age
        
        if name_match and age_match:
            filtered_users.append(user)
    
    return ggapi.success("搜索完成", data={
        "搜索条件": {
            "姓名关键词": name or "无",
            "最小年龄": min_age,
            "最大年龄": max_age
        },
        "匹配用户数": len(filtered_users),
        "用户列表": filtered_users
    })

# ========== 状态和信息接口 ==========

@app.get("/status")
async def 系统状态():
    """获取系统状态信息"""
    return ggapi.success("系统运行正常", data={
        "服务状态": "运行中",
        "当前时间": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
        "用户总数": len(users_db),
        "支持的HTTP方法": ["GET", "POST", "PUT", "DELETE"],
        "框架信息": {
            "名称": "yggpy_api",
            "基于": "Starlette + Uvicorn",
            "JSON后端": "orjson(高性能)"
        }
    })

@app.get("/health")
async def 健康检查():
    """健康检查接口"""
    return ggapi.success("服务健康", data={
        "健康状态": "正常",
        "检查时间": datetime.now().isoformat(),
        "服务可用": True
    })

if __name__ == "__main__":
    print("=" * 60)
    print("🚀 启动 yggpy_api 基础示例服务")
    print("=" * 60)
    print("📋 可用接口:")
    print("  GET  /                    - 首页欢迎")
    print("  GET  /hello               - 简单问候")
    print("  GET  /hello/{name}        - 个性化问候")
    print("  GET  /users               - 获取用户列表")
    print("  GET  /users/{user_id}     - 获取单个用户")
    print("  POST /users               - 创建用户")
    print("  PUT  /users/{user_id}     - 更新用户")
    print("  DELETE /users/{user_id}   - 删除用户")
    print("  GET  /search              - 搜索用户")
    print("  GET  /status              - 系统状态")
    print("  GET  /health              - 健康检查")
    print()
    print("💡 测试示例:")
    print("  curl http://localhost:8888/")
    print("  curl http://localhost:8888/hello/张三")
    print("  curl http://localhost:8888/users")
    print("  curl 'http://localhost:8888/search?name=张&min_age=20&max_age=30'")
    print("=" * 60)
    
    try:
        # 启动服务器
        app.run(host="0.0.0.0", port=8888)
    except KeyboardInterrupt:
        print("\n🛑 服务已停止")
    except Exception as e:
        print(f"\n❌ 服务启动失败: {e}")
🎯 运行结果

启动服务后,你将看到:

============================================================
🚀 启动 yggpy_api 基础示例服务
============================================================
📋 可用接口:
  GET  /                    - 首页欢迎
  GET  /hello               - 简单问候
  GET  /hello/{name}        - 个性化问候
  GET  /users               - 获取用户列表
  GET  /users/{user_id}     - 获取单个用户
  POST /users               - 创建用户
  PUT  /users/{user_id}     - 更新用户
  DELETE /users/{user_id}   - 删除用户
  GET  /search              - 搜索用户
  GET  /status              - 系统状态
  GET  /health              - 健康检查

💡 测试示例:
  curl http://localhost:8888/
  curl http://localhost:8888/hello/张三
  curl http://localhost:8888/users
  curl 'http://localhost:8888/search?name=张&min_age=20&max_age=30'
============================================================
INFO:     Started server process [12345]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8888 (Press CTRL+C to quit)
🧪 测试接口

1. 访问首页

curl http://localhost:8888/

响应:

{
  "success": true,
  "message": "欢迎使用 yggpy_api!",
  "data": {
    "框架名称": "yggpy_api",
    "版本": "1.0.0",
    "当前时间": "2025-01-18 14:30:25",
    "功能特点": [
      "高性能 JSON 处理",
      "全面参数验证", 
      "简洁易用的 API",
      "生产就绪"
    ]
  },
  "timestamp": "2025-01-18T14:30:25.123456"
}

2. 个性化问候

curl http://localhost:8888/hello/张三

响应:

{
  "success": true,
  "message": "你好,张三!",
  "data": {
    "问候对象": "张三",
    "问候时间": "14:30:25"
  },
  "timestamp": "2025-01-18T14:30:25.123456"
}

3. 获取用户列表

curl http://localhost:8888/users

响应:

{
  "success": true,
  "message": "用户列表获取成功",
  "data": {
    "用户总数": 3,
    "用户列表": [
      {"id": 1, "name": "张三", "email": "zhangsan@example.com", "age": 25},
      {"id": 2, "name": "李四", "email": "lisi@example.com", "age": 30},
      {"id": 3, "name": "王五", "email": "wangwu@example.com", "age": 28}
    ]
  },
  "timestamp": "2025-01-18T14:30:25.123456"
}
📚 学习要点
  1. API 实例创建: app = ggapi.Api() 创建应用实例
  2. 路由装饰器: @app.get(), @app.post() 等定义路由
  3. 参数获取: ggapi.get_path(), ggapi.get_query() 获取参数
  4. 标准响应: ggapi.success(), ggapi.error404() 返回标准格式
  5. 异步处理: 使用 async def 定义异步处理函数

4.2 请求处理 (c02_request)

📖 示例说明

这个示例深入展示了 yggpy_api 的请求处理功能,包括:

  • 获取各种类型的请求参数
  • 处理请求头信息
  • 解析 JSON 和表单数据
  • 文件上传处理
  • 请求体数据处理
💻 完整代码
"""
yggpy_api 请求处理示例

本示例演示:
1. 路径参数获取和验证
2. 查询参数处理
3. 请求头信息获取
4. JSON 数据解析
5. 表单数据处理
6. 文件上传处理
7. 原始请求体处理
"""

import sys
import os
from datetime import datetime
from typing import Dict, Any, Optional

# 添加项目根目录到 Python 路径
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "../..")))

import yggpy_api as ggapi

# 创建 API 应用实例
app = ggapi.Api()

# ========== 路径参数处理示例 ==========

@app.get("/users/{user_id}/posts/{post_id}")
async def 获取用户文章():
    """获取指定用户的指定文章"""
    # 获取路径参数
    user_id = ggapi.get_path('user_id', int)
    post_id = ggapi.get_path('post_id', int)

    return ggapi.success("文章信息获取成功", data={
        "用户ID": user_id,
        "文章ID": post_id,
        "文章标题": f"用户{user_id}的第{post_id}篇文章",
        "获取时间": datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    })

@app.get("/categories/{category}/items/{item_slug}")
async def 获取分类商品():
    """获取指定分类下的商品"""
    # 获取字符串路径参数
    category = ggapi.get_path('category', str)
    item_slug = ggapi.get_path('item_slug', str)

    return ggapi.success("商品信息获取成功", data={
        "商品分类": category,
        "商品标识": item_slug,
        "商品名称": f"{category}分类下的{item_slug}商品",
        "查询时间": datetime.now().isoformat()
    })

# ========== 查询参数处理示例 ==========

@app.get("/search/products")
async def 搜索商品():
    """商品搜索接口 - 演示各种查询参数类型"""
    # 字符串参数
    keyword = ggapi.get_query('keyword', str, default='')
    category = ggapi.get_query('category', str, default='全部')

    # 数值参数
    page = ggapi.get_query('page', int, default=1)
    page_size = ggapi.get_query('page_size', int, default=10)
    min_price = ggapi.get_query('min_price', float, default=0.0)
    max_price = ggapi.get_query('max_price', float, default=999999.0)

    # 布尔参数
    in_stock = ggapi.get_query('in_stock', bool, default=True)
    on_sale = ggapi.get_query('on_sale', bool, default=False)

    # 构建搜索结果
    search_result = {
        "搜索条件": {
            "关键词": keyword or "无",
            "商品分类": category,
            "页码": page,
            "每页数量": page_size,
            "价格范围": f"{min_price} - {max_price}",
            "仅显示有库存": in_stock,
            "仅显示促销商品": on_sale
        },
        "搜索结果": {
            "总商品数": 156,
            "当前页商品": [
                {"id": 1, "name": f"搜索到的商品1", "price": 99.9, "in_stock": True},
                {"id": 2, "name": f"搜索到的商品2", "price": 199.9, "in_stock": True},
                {"id": 3, "name": f"搜索到的商品3", "price": 299.9, "in_stock": False}
            ]
        },
        "分页信息": {
            "当前页": page,
            "每页数量": page_size,
            "总页数": 16
        }
    }

    return ggapi.success("商品搜索完成", data=search_result)

# ========== 请求头处理示例 ==========

@app.get("/api/protected")
async def 受保护的接口():
    """演示请求头获取和验证"""
    # 获取认证头
    auth_header = ggapi.get_header('Authorization', str, default='')

    # 获取用户代理
    user_agent = ggapi.get_header('User-Agent', str, default='未知客户端')

    # 获取内容类型
    content_type = ggapi.get_header('Content-Type', str, default='application/json')

    # 获取自定义头
    api_version = ggapi.get_header('X-API-Version', str, default='1.0')
    request_id = ggapi.get_header('X-Request-ID', str, default='未提供')

    # 简单的认证检查
    is_authenticated = auth_header.startswith('Bearer ') if auth_header else False

    return ggapi.success("请求头信息获取成功", data={
        "认证状态": "已认证" if is_authenticated else "未认证",
        "认证头": auth_header[:20] + "..." if len(auth_header) > 20 else auth_header,
        "用户代理": user_agent,
        "内容类型": content_type,
        "API版本": api_version,
        "请求ID": request_id,
        "处理时间": datetime.now().isoformat()
    })

@app.get("/api/headers/all")
async def 获取所有请求头():
    """获取所有请求头信息"""
    # 获取所有请求头
    all_headers = ggapi.get_headers()

    # 过滤敏感信息
    safe_headers = {}
    for key, value in all_headers.items():
        if key.lower() in ['authorization', 'cookie', 'x-api-key']:
            safe_headers[key] = value[:10] + "..." if len(value) > 10 else value
        else:
            safe_headers[key] = value

    return ggapi.success("所有请求头获取成功", data={
        "请求头数量": len(all_headers),
        "请求头列表": safe_headers,
        "常见请求头": {
            "Host": all_headers.get('host', '未提供'),
            "User-Agent": all_headers.get('user-agent', '未提供'),
            "Accept": all_headers.get('accept', '未提供'),
            "Accept-Language": all_headers.get('accept-language', '未提供')
        }
    })

# ========== JSON 数据处理示例 ==========

@app.post("/api/users")
async def 创建用户_JSON():
    """通过 JSON 数据创建用户"""
    # 获取 JSON 数据
    user_data = await ggapi.get_json()

    # 验证必需字段
    required_fields = ['name', 'email']
    missing_fields = [field for field in required_fields if field not in user_data]

    if missing_fields:
        return ggapi.error400("缺少必需字段", data={
            "缺少字段": missing_fields,
            "必需字段": required_fields
        })

    # 创建用户对象
    new_user = {
        "id": 12345,  # 模拟生成的ID
        "姓名": user_data.get('name'),
        "邮箱": user_data.get('email'),
        "年龄": user_data.get('age', 18),
        "性别": user_data.get('gender', '未指定'),
        "地址": user_data.get('address', ''),
        "电话": user_data.get('phone', ''),
        "创建时间": datetime.now().isoformat(),
        "状态": "活跃"
    }

    return ggapi.success("用户创建成功", data={
        "新用户信息": new_user,
        "接收到的原始数据": user_data
    })

@app.post("/api/data/complex")
async def 处理复杂JSON数据():
    """处理复杂的嵌套 JSON 数据"""
    # 获取复杂 JSON 数据
    complex_data = await ggapi.get_json()

    # 分析数据结构
    analysis = {
        "数据类型": type(complex_data).__name__,
        "数据大小": len(str(complex_data)),
        "顶级字段数": len(complex_data) if isinstance(complex_data, dict) else 0,
        "包含数组": any(isinstance(v, list) for v in complex_data.values()) if isinstance(complex_data, dict) else False,
        "包含嵌套对象": any(isinstance(v, dict) for v in complex_data.values()) if isinstance(complex_data, dict) else False
    }

    # 提取特定信息
    extracted_info = {}
    if isinstance(complex_data, dict):
        # 提取用户信息
        if 'user' in complex_data:
            extracted_info['用户信息'] = complex_data['user']

        # 提取配置信息
        if 'config' in complex_data:
            extracted_info['配置信息'] = complex_data['config']

        # 提取数组数据
        for key, value in complex_data.items():
            if isinstance(value, list):
                extracted_info[f'{key}数组长度'] = len(value)

    return ggapi.success("复杂数据处理完成", data={
        "数据分析": analysis,
        "提取信息": extracted_info,
        "处理时间": datetime.now().isoformat(),
        "原始数据": complex_data
    })

# ========== 表单数据处理示例 ==========

@app.post("/api/forms/contact")
async def 处理联系表单():
    """处理联系表单数据"""
    # 获取表单数据
    form_data = await ggapi.get_form()

    # 提取表单字段
    contact_info = {
        "姓名": form_data.get('name', ''),
        "邮箱": form_data.get('email', ''),
        "电话": form_data.get('phone', ''),
        "主题": form_data.get('subject', ''),
        "消息内容": form_data.get('message', ''),
        "联系方式偏好": form_data.get('contact_preference', 'email'),
        "是否订阅通讯": form_data.get('subscribe', 'off') == 'on'
    }

    # 验证表单数据
    errors = []
    if not contact_info['姓名']:
        errors.append("姓名不能为空")
    if not contact_info['邮箱']:
        errors.append("邮箱不能为空")
    if not contact_info['消息内容']:
        errors.append("消息内容不能为空")

    if errors:
        return ggapi.error400("表单验证失败", data={
            "错误列表": errors,
            "提交的数据": contact_info
        })

    return ggapi.success("联系表单提交成功", data={
        "联系信息": contact_info,
        "处理状态": "已接收,将在24小时内回复",
        "提交时间": datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    })

# ========== 原始请求体处理示例 ==========

@app.post("/api/data/raw")
async def 处理原始数据():
    """处理原始请求体数据"""
    # 获取原始请求体
    raw_body = await ggapi.get_body()

    # 分析数据
    body_info = {
        "数据类型": type(raw_body).__name__,
        "数据大小": len(raw_body),
        "是否为空": len(raw_body) == 0,
        "前100字符": raw_body[:100].decode('utf-8', errors='ignore') if raw_body else '',
        "可能的格式": "未知"
    }

    # 尝试判断数据格式
    if raw_body:
        try:
            # 尝试解析为 JSON
            import json
            json.loads(raw_body.decode('utf-8'))
            body_info["可能的格式"] = "JSON"
        except:
            # 检查是否为 XML
            if raw_body.startswith(b'<?xml') or raw_body.startswith(b'<'):
                body_info["可能的格式"] = "XML"
            # 检查是否为表单数据
            elif b'=' in raw_body and b'&' in raw_body:
                body_info["可能的格式"] = "URL编码表单"
            else:
                body_info["可能的格式"] = "纯文本或二进制"

    return ggapi.success("原始数据处理完成", data={
        "请求体信息": body_info,
        "处理时间": datetime.now().isoformat()
    })

# ========== 综合示例 ==========

@app.post("/api/comprehensive/{action}")
async def 综合请求处理示例():
    """综合演示各种请求数据获取"""
    # 路径参数
    action = ggapi.get_path('action', str)

    # 查询参数
    debug = ggapi.get_query('debug', bool, default=False)
    format_type = ggapi.get_query('format', str, default='json')

    # 请求头
    user_agent = ggapi.get_header('User-Agent', str, default='未知')
    content_type = ggapi.get_header('Content-Type', str, default='')

    # 根据内容类型处理数据
    request_data = None
    data_source = "无"

    if 'application/json' in content_type:
        request_data = await ggapi.get_json()
        data_source = "JSON"
    elif 'application/x-www-form-urlencoded' in content_type:
        request_data = await ggapi.get_form()
        data_source = "表单"
    else:
        raw_data = await ggapi.get_body()
        request_data = {"原始数据大小": len(raw_data)}
        data_source = "原始数据"

    # 构建响应
    response_data = {
        "请求分析": {
            "执行动作": action,
            "调试模式": debug,
            "响应格式": format_type,
            "数据来源": data_source,
            "用户代理": user_agent,
            "内容类型": content_type
        },
        "接收数据": request_data,
        "处理结果": {
            "状态": "成功",
            "处理时间": datetime.now().isoformat(),
            "数据完整性": "完好" if request_data else "无数据"
        }
    }

    return ggapi.success(f"综合请求处理完成 - {action}", data=response_data)

if __name__ == "__main__":
    print("=" * 70)
    print("🚀 启动 yggpy_api 请求处理示例服务")
    print("=" * 70)
    print("📋 可用接口:")
    print("  GET  /users/{user_id}/posts/{post_id}     - 路径参数示例")
    print("  GET  /categories/{category}/items/{slug}  - 字符串路径参数")
    print("  GET  /search/products                     - 查询参数示例")
    print("  GET  /api/protected                       - 请求头示例")
    print("  GET  /api/headers/all                     - 所有请求头")
    print("  POST /api/users                           - JSON数据处理")
    print("  POST /api/data/complex                    - 复杂JSON处理")
    print("  POST /api/forms/contact                   - 表单数据处理")
    print("  POST /api/data/raw                        - 原始数据处理")
    print("  POST /api/comprehensive/{action}          - 综合示例")
    print()
    print("💡 测试示例:")
    print("  curl http://localhost:8888/users/123/posts/456")
    print("  curl 'http://localhost:8888/search/products?keyword=手机&page=2&in_stock=true'")
    print("  curl -H 'Authorization: Bearer token123' http://localhost:8888/api/protected")
    print("  curl -X POST -H 'Content-Type: application/json' \\")
    print("       -d '{\"name\":\"张三\",\"email\":\"zhang@example.com\"}' \\")
    print("       http://localhost:8888/api/users")
    print("=" * 70)

    try:
        app.run(host="0.0.0.0", port=8888)
    except KeyboardInterrupt:
        print("\n🛑 服务已停止")
🎯 运行结果

启动服务后,可以测试各种请求处理功能:

1. 路径参数测试

curl http://localhost:8888/users/123/posts/456

响应:

{
  "success": true,
  "message": "文章信息获取成功",
  "data": {
    "用户ID": 123,
    "文章ID": 456,
    "文章标题": "用户123的第456篇文章",
    "获取时间": "2025-01-18 14:35:20"
  }
}

2. 查询参数测试

curl 'http://localhost:8888/search/products?keyword=手机&page=2&min_price=100&max_price=500&in_stock=true'

3. JSON 数据提交测试

curl -X POST -H 'Content-Type: application/json' \
     -d '{"name":"张三","email":"zhang@example.com","age":25}' \
     http://localhost:8888/api/users
📚 学习要点
  1. 路径参数: ggapi.get_path() 获取 URL 路径中的参数
  2. 查询参数: ggapi.get_query() 获取 URL 查询字符串参数
  3. 请求头: ggapi.get_header()ggapi.get_headers() 获取请求头
  4. JSON 数据: await ggapi.get_json() 解析 JSON 请求体
  5. 表单数据: await ggapi.get_form() 处理表单提交
  6. 原始数据: await ggapi.get_body() 获取原始请求体

4.3 响应构建 (c03_response)

📖 示例说明

这个示例展示了 yggpy_api 强大的响应构建功能,包括:

  • 多种格式的响应类型(JSON、HTML、文本、文件等)
  • 自定义响应头和状态码
  • 流式响应和文件下载
  • 响应模板和格式化
  • 错误响应处理
💻 完整代码
"""
yggpy_api 响应构建示例

本示例演示:
1. JSON 响应构建
2. HTML 响应生成
3. 文件响应和下载
4. 流式响应
5. 自定义响应头
6. 错误响应处理
7. 响应模板使用
"""

import sys
import os
import io
import csv
from datetime import datetime
from typing import Dict, Any, List

# 添加项目根目录到 Python 路径
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "../..")))

import yggpy_api as ggapi

# 创建 API 应用实例
app = ggapi.Api()

# 设置默认响应头
ggapi.set_default_headers({
    'X-API-Name': 'yggpy_api-响应示例',
    'X-Version': '1.0.0',
    'X-Powered-By': 'yggpy_api'
})

# ========== JSON 响应示例 ==========

@app.get("/api/json/simple")
async def 简单JSON响应():
    """返回简单的 JSON 响应"""
    data = {
        "消息": "这是一个简单的 JSON 响应",
        "时间戳": datetime.now().isoformat(),
        "状态": "成功",
        "数据": {
            "用户数": 1250,
            "活跃用户": 890,
            "今日访问": 3420
        }
    }

    return ggapi.resp_json(data)

@app.get("/api/json/formatted")
async def 格式化JSON响应():
    """返回格式化的 JSON 响应(美化输出)"""
    data = {
        "产品信息": {
            "名称": "yggpy_api 框架",
            "版本": "1.0.0",
            "特性": [
                "高性能 JSON 处理",
                "全面参数验证",
                "简洁易用 API",
                "生产就绪"
            ],
            "性能指标": {
                "JSON处理速度": "比标准库快 2-5 倍",
                "内存使用": "优化的内存分配",
                "并发支持": "高并发异步处理"
            }
        },
        "生成时间": datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    }

    # 使用 indent 参数美化 JSON 输出
    return ggapi.resp_json(data, indent=2)

@app.get("/api/json/custom-headers")
async def 自定义头部JSON响应():
    """带自定义响应头的 JSON 响应"""
    data = {
        "消息": "这是带自定义响应头的 JSON 响应",
        "服务器时间": datetime.now().isoformat()
    }

    # 自定义响应头
    custom_headers = {
        'X-Custom-Header': '自定义头部值',
        'X-Response-Time': str(datetime.now().timestamp()),
        'X-Server-Region': 'Asia-Shanghai',
        'Cache-Control': 'no-cache, no-store, must-revalidate'
    }

    return ggapi.resp_json(data, headers=custom_headers)

# ========== HTML 响应示例 ==========

@app.get("/web/home")
async def HTML首页():
    """返回 HTML 首页"""
    html_content = """
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>yggpy_api 响应示例</title>
        <style>
            body { font-family: 'Microsoft YaHei', Arial, sans-serif; margin: 40px; background: #f5f5f5; }
            .container { max-width: 800px; margin: 0 auto; background: white; padding: 30px; border-radius: 10px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); }
            h1 { color: #2c3e50; border-bottom: 3px solid #3498db; padding-bottom: 10px; }
            .feature { background: #ecf0f1; padding: 15px; margin: 10px 0; border-radius: 5px; border-left: 4px solid #3498db; }
            .highlight { color: #e74c3c; font-weight: bold; }
            .time { color: #7f8c8d; font-size: 0.9em; }
        </style>
    </head>
    <body>
        <div class="container">
            <h1>🚀 欢迎使用 yggpy_api</h1>
            <p>这是一个由 <span class="highlight">yggpy_api</span> 框架生成的 HTML 响应示例。</p>

            <div class="feature">
                <h3>🔥 高性能特性</h3>
                <p>集成 orjson,JSON 处理速度提升 2-5 倍</p>
            </div>

            <div class="feature">
                <h3>🛡️ 全面验证</h3>
                <p>基于 Pydantic v2 的类型安全验证系统</p>
            </div>

            <div class="feature">
                <h3>🎯 开发友好</h3>
                <p>直观的 API 设计,丰富的开发工具支持</p>
            </div>

            <div class="feature">
                <h3>🔧 生产就绪</h3>
                <p>完善的错误处理和中间件支持</p>
            </div>

            <p class="time">页面生成时间: {}</p>

            <hr>
            <p><strong>测试其他接口:</strong></p>
            <ul>
                <li><a href="/api/json/simple">简单 JSON 响应</a></li>
                <li><a href="/api/json/formatted">格式化 JSON 响应</a></li>
                <li><a href="/web/dashboard">仪表板页面</a></li>
                <li><a href="/files/download/sample.txt">文件下载示例</a></li>
            </ul>
        </div>
    </body>
    </html>
    """.format(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))

    return ggapi.resp_html(html_content)

@app.get("/web/dashboard")
async def HTML仪表板():
    """返回动态数据的 HTML 仪表板"""
    # 模拟仪表板数据
    dashboard_data = {
        "总用户数": 12580,
        "活跃用户": 8960,
        "今日新增": 156,
        "今日访问": 34520,
        "系统状态": "正常运行",
        "服务器负载": "23%",
        "内存使用": "67%",
        "磁盘使用": "45%"
    }

    html_content = f"""
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>系统仪表板 - yggpy_api</title>
        <style>
            body {{ font-family: 'Microsoft YaHei', Arial, sans-serif; margin: 0; padding: 20px; background: #f8f9fa; }}
            .dashboard {{ max-width: 1200px; margin: 0 auto; }}
            .header {{ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 20px; border-radius: 10px; margin-bottom: 20px; }}
            .stats-grid {{ display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 20px; margin-bottom: 20px; }}
            .stat-card {{ background: white; padding: 20px; border-radius: 10px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); }}
            .stat-number {{ font-size: 2em; font-weight: bold; color: #2c3e50; }}
            .stat-label {{ color: #7f8c8d; margin-top: 5px; }}
            .status-good {{ color: #27ae60; }}
            .status-warning {{ color: #f39c12; }}
            .refresh-time {{ text-align: center; color: #7f8c8d; margin-top: 20px; }}
        </style>
    </head>
    <body>
        <div class="dashboard">
            <div class="header">
                <h1>📊 系统仪表板</h1>
                <p>实时监控系统运行状态和关键指标</p>
            </div>

            <div class="stats-grid">
                <div class="stat-card">
                    <div class="stat-number">{dashboard_data['总用户数']:,}</div>
                    <div class="stat-label">总用户数</div>
                </div>
                <div class="stat-card">
                    <div class="stat-number status-good">{dashboard_data['活跃用户']:,}</div>
                    <div class="stat-label">活跃用户</div>
                </div>
                <div class="stat-card">
                    <div class="stat-number">{dashboard_data['今日新增']:,}</div>
                    <div class="stat-label">今日新增用户</div>
                </div>
                <div class="stat-card">
                    <div class="stat-number">{dashboard_data['今日访问']:,}</div>
                    <div class="stat-label">今日访问量</div>
                </div>
                <div class="stat-card">
                    <div class="stat-number status-good">{dashboard_data['系统状态']}</div>
                    <div class="stat-label">系统状态</div>
                </div>
                <div class="stat-card">
                    <div class="stat-number status-warning">{dashboard_data['服务器负载']}</div>
                    <div class="stat-label">服务器负载</div>
                </div>
                <div class="stat-card">
                    <div class="stat-number">{dashboard_data['内存使用']}</div>
                    <div class="stat-label">内存使用率</div>
                </div>
                <div class="stat-card">
                    <div class="stat-number">{dashboard_data['磁盘使用']}</div>
                    <div class="stat-label">磁盘使用率</div>
                </div>
            </div>

            <div class="refresh-time">
                最后更新时间: {datetime.now().strftime("%Y-%m-%d %H:%M:%S")}
                <br>
                <a href="/web/dashboard" style="color: #3498db;">🔄 刷新数据</a>
            </div>
        </div>
    </body>
    </html>
    """

    return ggapi.resp_html(html_content)

# ========== 文本响应示例 ==========

@app.get("/api/text/plain")
async def 纯文本响应():
    """返回纯文本响应"""
    text_content = f"""
yggpy_api 框架状态报告
====================

生成时间: {datetime.now().strftime("%Y-%m-%d %H:%M:%S")}

系统信息:
- 框架名称: yggpy_api
- 版本: 1.0.0
- 基于: Starlette + Uvicorn
- JSON 后端: orjson (高性能)

性能指标:
- JSON 处理: 比标准库快 2-5 倍
- 内存使用: 优化分配
- 并发支持: 异步高并发

功能特性:
✓ 高性能 JSON 处理
✓ 全面参数验证
✓ 简洁易用 API
✓ 生产环境就绪
✓ 热重载开发支持
✓ 优雅关闭处理

联系信息:
- 项目地址: https://github.com/YggAI/yggpy_api
- 文档地址: https://yggpy-api.readthedocs.io
- 问题反馈: https://github.com/YggAI/yggpy_api/issues

感谢使用 yggpy_api!
    """

    return ggapi.resp_text(text_content.strip())

@app.get("/api/text/log")
async def 日志格式响应():
    """返回日志格式的文本响应"""
    log_entries = [
        f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] INFO: 服务启动成功",
        f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] INFO: 加载配置文件",
        f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] INFO: 初始化数据库连接",
        f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] INFO: 注册路由处理器",
        f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] INFO: 启用热重载功能",
        f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] INFO: 服务器监听端口 8888",
        f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] INFO: 准备接收请求"
    ]

    log_content = "\n".join(log_entries)

    return ggapi.resp_text(log_content, headers={
        'Content-Type': 'text/plain; charset=utf-8',
        'X-Log-Type': 'application-startup'
    })

# ========== CSV 响应示例 ==========

@app.get("/api/export/users.csv")
async def 导出用户CSV():
    """导出用户数据为 CSV 格式"""
    # 模拟用户数据
    users_data = [
        {"ID": 1, "姓名": "张三", "邮箱": "zhangsan@example.com", "年龄": 25, "部门": "技术部"},
        {"ID": 2, "姓名": "李四", "邮箱": "lisi@example.com", "年龄": 30, "部门": "市场部"},
        {"ID": 3, "姓名": "王五", "邮箱": "wangwu@example.com", "年龄": 28, "部门": "人事部"},
        {"ID": 4, "姓名": "赵六", "邮箱": "zhaoliu@example.com", "年龄": 32, "部门": "财务部"},
        {"ID": 5, "姓名": "钱七", "邮箱": "qianqi@example.com", "年龄": 27, "部门": "技术部"}
    ]

    return ggapi.resp_csv(users_data, filename="用户列表.csv")

@app.get("/api/export/sales.csv")
async def 导出销售数据CSV():
    """导出销售数据为 CSV 格式"""
    # 模拟销售数据
    sales_data = [
        ["日期", "产品", "销售额", "数量", "销售员"],
        ["2025-01-15", "产品A", 15800, 20, "张三"],
        ["2025-01-15", "产品B", 23400, 15, "李四"],
        ["2025-01-16", "产品A", 18900, 25, "王五"],
        ["2025-01-16", "产品C", 31200, 8, "赵六"],
        ["2025-01-17", "产品B", 27600, 18, "钱七"]
    ]

    return ggapi.resp_csv(sales_data, filename="销售数据.csv")

if __name__ == "__main__":
    print("=" * 70)
    print("🚀 启动 yggpy_api 响应构建示例服务")
    print("=" * 70)
    print("📋 可用接口:")
    print("  GET  /api/json/simple           - 简单 JSON 响应")
    print("  GET  /api/json/formatted        - 格式化 JSON 响应")
    print("  GET  /api/json/custom-headers   - 自定义头部 JSON 响应")
    print("  GET  /web/home                  - HTML 首页")
    print("  GET  /web/dashboard             - HTML 仪表板")
    print("  GET  /api/text/plain            - 纯文本响应")
    print("  GET  /api/text/log              - 日志格式响应")
    print("  GET  /api/export/users.csv      - 导出用户 CSV")
    print("  GET  /api/export/sales.csv      - 导出销售数据 CSV")
    print()
    print("💡 测试示例:")
    print("  curl http://localhost:8888/api/json/simple")
    print("  curl http://localhost:8888/web/home")
    print("  curl http://localhost:8888/api/text/plain")
    print("  curl http://localhost:8888/api/export/users.csv")
    print("=" * 70)

    try:
        app.run(host="0.0.0.0", port=8888)
    except KeyboardInterrupt:
        print("\n🛑 服务已停止")
🎯 运行结果

启动服务后,可以测试各种响应类型:

1. JSON 响应测试

curl http://localhost:8888/api/json/simple

2. HTML 页面访问
在浏览器中访问 http://localhost:8888/web/home 查看精美的 HTML 页面

3. CSV 文件下载

curl http://localhost:8888/api/export/users.csv -o users.csv
📚 学习要点
  1. JSON 响应: ggapi.resp_json() 构建 JSON 响应,支持格式化
  2. HTML 响应: ggapi.resp_html() 返回 HTML 内容
  3. 文本响应: ggapi.resp_text() 返回纯文本
  4. CSV 响应: ggapi.resp_csv() 导出 CSV 文件
  5. 自定义头部: 通过 headers 参数添加自定义响应头
  6. 默认头部: ggapi.set_default_headers() 设置全局默认头部

4.4 标准化结果 (c04_result)

📖 示例说明

这个示例展示了 yggpy_api 的标准化结果模式,包括:

  • 统一的成功和错误响应格式
  • 不同类型的错误响应
  • 结果数据封装和格式化
  • 响应状态码管理
  • 国际化消息支持
💻 核心代码片段
# 成功响应示例
@app.get("/api/success")
async def 成功响应示例():
    return ggapi.success("操作成功", data={"用户ID": 123, "状态": "已激活"})

# 错误响应示例
@app.get("/api/error")
async def 错误响应示例():
    return ggapi.error400("请求参数错误", data={"错误字段": ["email", "phone"]})

# 自定义状态码
@app.get("/api/custom")
async def 自定义状态码():
    return ggapi.result(
        success=True,
        message="自定义成功响应",
        data={"处理时间": "0.05s"},
        status_code=201
    )
📚 学习要点
  1. 标准格式: 所有响应都遵循统一的 JSON 格式
  2. 状态管理: 明确的成功/失败状态标识
  3. 错误分类: 不同类型的错误响应(400, 404, 500等)
  4. 数据封装: 结构化的数据返回格式
  5. 时间戳: 自动添加响应时间戳

4.5 环境配置 (c05_env)

📖 示例说明

这个示例展示了 yggpy_api 的环境配置管理功能,包括:

  • .env 文件的创建和使用
  • 环境变量的读取和类型转换
  • 配置的动态加载和更新
  • 开发/生产环境的配置分离
💻 核心代码片段
from yggpy_api.env import load_env, get_env, set_env, save_env

# 加载环境配置
load_env()

# 获取配置值
database_url = get_env('DATABASE_URL', str, default='sqlite:///app.db')
debug_mode = get_env('DEBUG', bool, default=False)
max_connections = get_env('MAX_CONNECTIONS', int, default=100)

@app.get("/config")
async def 获取配置信息():
    return ggapi.success("配置信息", data={
        "数据库URL": database_url,
        "调试模式": debug_mode,
        "最大连接数": max_connections
    })
📚 学习要点
  1. 环境分离: 开发和生产环境配置分离
  2. 类型安全: 自动类型转换和验证
  3. 默认值: 提供合理的默认配置
  4. 动态加载: 运行时配置更新支持

4.6 优雅关闭 (c06_graceful)

📖 示例说明

这个示例展示了 yggpy_api 的优雅关闭功能,包括:

  • 信号处理和关闭流程
  • 资源清理和连接关闭
  • 正在处理请求的完成等待
  • 自定义清理处理器
💻 核心代码片段
from yggpy_api.graceful import register_cleanup

# 注册清理处理器
@register_cleanup
async def 清理数据库连接():
    print("正在关闭数据库连接...")
    # 清理数据库连接
    await asyncio.sleep(1)
    print("数据库连接已关闭")

@register_cleanup
def 清理临时文件():
    print("正在清理临时文件...")
    # 清理临时文件
    print("临时文件清理完成")

if __name__ == "__main__":
    print("启动服务,按 Ctrl+C 测试优雅关闭...")
    app.run()
📚 学习要点
  1. 信号处理: 自动处理 SIGINT 和 SIGTERM 信号
  2. 资源清理: 确保所有资源正确释放
  3. 请求完成: 等待正在处理的请求完成
  4. 自定义清理: 支持注册自定义清理函数

4.7 热重载开发 (c07_hot_reload)

📖 示例说明

这个示例展示了 yggpy_api 的热重载开发功能,包括:

  • 文件变化监控
  • 自动代码重载
  • 开发效率提升
  • 自定义监控路径
💻 核心代码片段
# 启用热重载
app.enable_hot_reload()

# 自定义监控路径
app.enable_hot_reload(watch_paths=['./src', './templates'])

@app.get("/")
async def 首页():
    return ggapi.success("热重载测试页面", data={
        "提示": "修改这个文件,服务器会自动重启",
        "时间": datetime.now().isoformat()
    })

if __name__ == "__main__":
    print("🔥 热重载模式启动")
    print("修改代码文件,服务器将自动重启")
    app.run(hot_reload=True)  # 或者在 run 时启用
📚 学习要点
  1. 自动重载: 代码修改后自动重启服务
  2. 文件监控: 智能监控相关文件变化
  3. 开发效率: 大幅提升开发调试效率
  4. 配置灵活: 可自定义监控路径和规则

4.8 参数验证 (c08_valid)

📖 示例说明

这个示例展示了 yggpy_api 强大的参数验证功能,包括:

  • 多层次参数验证(路径、查询、头部、JSON等)
  • Pydantic 模型集成
  • 自定义验证规则
  • 详细的错误信息
💻 核心代码片段
from pydantic import BaseModel, Field, EmailStr

class UserModel(BaseModel):
    name: str = Field(..., min_length=2, max_length=50, description="用户姓名")
    email: EmailStr = Field(..., description="邮箱地址")
    age: int = Field(..., ge=18, le=120, description="年龄")
    phone: str = Field(..., pattern=r'^1[3-9]\d{9}$', description="手机号")

@app.post("/users")
async def 创建用户():
    # 验证路径参数
    user_id = ggapi.valid_path('user_id', int, ge=1, description="用户ID")

    # 验证查询参数
    source = ggapi.valid_query('source', str, pattern=r'^(web|mobile|api)$', default='web')

    # 验证请求头
    auth_token = ggapi.valid_header('Authorization', str, required=True)

    # 验证 JSON 数据
    user_data = await ggapi.valid_json(UserModel)

    return ggapi.success("用户创建成功", data={
        "用户信息": user_data.model_dump(),
        "来源": source,
        "认证": "已验证"
    })
📚 学习要点
  1. 多层验证: 支持路径、查询、头部、JSON等多种参数验证
  2. 类型安全: 自动类型转换和验证
  3. Pydantic集成: 无缝集成 Pydantic 模型
  4. 约束检查: 支持长度、范围、模式等约束
  5. 错误详情: 提供详细的验证错误信息

4.9 高性能JSON (c09_orjson)

📖 示例说明

这个示例展示了 yggpy_api 的高性能 JSON 处理功能,包括:

  • orjson 自动集成
  • 性能基准测试
  • 大数据处理优化
  • Unicode 和特殊类型支持
💻 核心代码片段
# 获取 JSON 后端信息
@app.get("/json/backend")
async def JSON后端信息():
    info = ggapi.get_json_info()
    return ggapi.success("JSON后端信息", data=info)

# 性能基准测试
@app.get("/performance/benchmark")
async def 性能基准测试():
    test_data = {"用户": [{"姓名": f"用户{i}", "年龄": 20+i} for i in range(1000)]}
    results = ggapi.benchmark_json_performance(test_data)
    return ggapi.success("性能测试完成", data=results)

# 大数据处理
@app.get("/data/large/{size}")
async def 大数据处理(size: str):
    dataset = generate_large_dataset(size)
    return ggapi.resp_json(dataset)  # 自动使用 orjson 优化
🔥 性能对比
数据大小 标准库 json orjson 性能提升
1KB 0.12ms 0.05ms 2.4x 更快
100KB 12.5ms 3.2ms 3.9x 更快
10MB 1.25s 0.31s 4.0x 更快
📚 学习要点
  1. 自动优化: 自动选择最优 JSON 后端
  2. 性能提升: 2-5倍的处理速度提升
  3. 内存优化: 更高效的内存使用
  4. 兼容性: 完全兼容标准 JSON API
  5. 特殊类型: 原生支持 datetime、UUID 等类型

总结

通过以上 9 个详细的使用示例,我们全面展示了 yggpy_api 框架的强大功能和易用性。让我们来总结一下这个框架的核心优势:

🎯 核心优势总结

1. 极致性能 🔥
  • orjson 集成: JSON 处理速度提升 2-5 倍
  • 异步架构: 基于 Starlette + Uvicorn 的高性能异步处理
  • 内存优化: 智能内存分配,支持大数据处理
  • 零拷贝操作: 最小化性能开销
2. 开发效率
  • 简洁 API: 直观易懂的函数式 API 设计
  • 热重载: 代码修改自动重启,提升开发效率
  • 类型安全: 基于 Pydantic v2 的全面类型验证
  • 丰富示例: 9 个完整示例覆盖所有使用场景
3. 生产就绪 🛡️
  • 全面验证: 多层次参数验证和错误处理
  • 优雅关闭: 安全的服务关闭和资源清理
  • 环境管理: 灵活的配置管理和环境分离
  • 标准响应: 统一的响应格式和错误处理
4. 易于使用 🎯
  • 零学习成本: 熟悉 Python 即可快速上手
  • 完整文档: 详细的中文文档和示例
  • 最佳实践: 内置最佳实践和设计模式
  • 社区支持: 活跃的开源社区和技术支持

📊 适用场景

最适合的场景
  • 高性能 API 服务: 需要处理大量 JSON 数据的 API
  • 微服务架构: 轻量级、高性能的微服务开发
  • 数据处理服务: 需要高效数据序列化的服务
  • 原型开发: 快速原型开发和 MVP 验证
  • 企业应用: 需要类型安全和参数验证的企业级应用
🔧 技术栈集成
  • 数据库: 支持 SQLAlchemy、MongoDB、Redis 等
  • 认证: 集成 JWT、OAuth2、API Key 等认证方式
  • 监控: 支持 Prometheus、Grafana 等监控工具
  • 部署: 支持 Docker、Kubernetes、云平台部署
  • 测试: 完整的测试工具链支持

🚀 开始使用建议

1. 新手入门路径
基础示例 (c01) → 请求处理 (c02) → 响应构建 (c03) → 参数验证 (c08)
2. 进阶功能探索
环境配置 (c05) → 热重载 (c07) → 优雅关闭 (c06) → 高性能JSON (c09)
3. 生产部署准备
标准化结果 (c04) → 错误处理 → 监控集成 → 性能优化

💡 最佳实践建议

  1. 性能优化

    • 启用 orjson 后端获得最佳 JSON 性能
    • 使用异步函数处理 I/O 密集型操作
    • 合理设置连接池和并发限制
  2. 安全考虑

    • 始终验证输入参数
    • 使用 HTTPS 传输敏感数据
    • 实施适当的认证和授权机制
  3. 开发效率

    • 使用热重载功能提升开发效率
    • 编写完整的测试用例
    • 遵循 RESTful API 设计原则
  4. 运维监控

    • 配置健康检查端点
    • 实施日志记录和监控
    • 使用优雅关闭确保服务稳定性

🎉 结语

yggpy_api 是一个真正为现代 Python 开发者设计的高性能 API 框架。它不仅提供了卓越的性能,更重要的是提供了优秀的开发体验和生产就绪的特性。

无论你是正在开发高性能的微服务、构建数据密集型的 API,还是需要快速原型验证,yggpy_api 都能为你提供强大而简洁的解决方案。

立即开始你的 yggpy_api 之旅,体验高性能 Python API 开发的乐趣! 🚀


技术支持: 如有问题,欢迎访问 GitHub 仓库 或查看完整文档
社区交流: 加入我们的开发者社区,与其他开发者交流经验
持续更新: 关注项目动态,获取最新功能和性能优化

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐