GraphQL类型体系助力FastAPI高效开发

GraphQL类型系统推动FastAPI高效开发

cmdragon_cn.png
cmdragon_cn.png

扫描二维码
关注或微信搜索:编程智域 前端至全栈交流与成长

发现千余款提升效率与开发的AI工具及实用程序https://tools.cmdragon.cn/

1. GraphQL类型系统基础

  • 标量类型 :FastAPI支持String、Int、Float、Boolean、ID等基础数据类型
  • 对象类型 示例:
# 用pydantic定义数据模型
from pydantic import BaseModel

class UserProfile(BaseModel):
    id: int
    username: str
    age: int = Field(ge=18, description="需年满18岁")
    email: str = Field(pattern=r"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$")
  • 枚举类型 定义方式:
from enum import Enum

class UserStatus(str, Enum):
    ACTIVE = "active"
    INACTIVE = "inactive"
    SUSPENDED = "suspended"

2. Schema定义规范

图形化展示Schema根类型关系:GraphQL的Schema根包含Query(查询)和Mutation(变更),Query下的字段包含参数和返回类型。

3. 类型系统高级特性

  • 输入类型与输出类型分离原则
# 输入模型(接收客户端数据)
class UserCreate(BaseModel):
    username: str
    password: str

# 输出模型(返回响应数据)  
class UserOut(BaseModel):
    id: int
    username: str
    create_time: datetime

4. 与RESTful对比

# RESTful端点示例
@app.get("/users/{user_id}")
def get_user(user_id: int):
    # ...

# GraphQL等效查询
type Query {
    getUser(userId: Int!): User
}

5. 完整示例

# 安装依赖:fastapi==0.95.2 strawberry-graphql==0.155.3 pydantic==1.10.7

from fastapi import FastAPI
import strawberry
from strawberry.asgi import GraphQL

@strawberry.type
class Product:
    id: int
    name: str
    price: float

@strawberry.type
class Query:
    @strawberry.field
    def get_product(self, id: int) -> Product:
        # 实际应从数据库获取数据
        return Product(id=id, name="Sample", price=99.9)

schema = strawberry.Schema(query=Query)
app = FastAPI()
app.add_route("/graphql", GraphQL(schema))

课后Quiz

Q1:如何定义符合手机号格式的字段?
A) 使用String类型
B) 使用正则表达式校验
C) 创建自定义标量类型
正确答案:C。通过定义标量类型实现格式验证:

@strawberry.scalar
class PhoneNumber:
    @staticmethod
    def serialize(value: str) -> str:
        if not re.match(r'^1[3-9]\d{9}$', value):
            raise ValueError("Invalid phone number")
        return value

报错处理
问题:查询返回"ValueError: Expected 'User' type"
解决办法:

  1. 检查模型继承是否正确
  2. 确认字段类型与数据库存储类型匹配
  3. 验证数据序列化过程
    预防建议:

  4. 使用mypy进行静态类型检查

  5. 编写单元测试验证类型转换

余下文章内容请跳转至个人博客页面或扫码关注微信公众号:编程智域 前端至全栈交流与成长,阅读完整文章:GraphQL类型系统如何让FastAPI开发更高效?

往期文章归档:

免费热门在线工具

文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/12995.html

(0)
LomuLomu
上一篇 2025 年 7 月 27 日
下一篇 2025 年 7 月 27 日

相关推荐

  • 2024 PyCharm最新激活码,PyCharm永久免费激活码2025-01-11 更新

    PyCharm 2024最新激活码 以下是最新的PyCharm激活码,更新时间:2025-01-11 🔑 激活码使用说明 1️⃣ 复制下方激活码 2️⃣ 打开 PyCharm 软件 3️⃣ 在菜单栏中选择 Help -> Register 4️⃣ 选择 Activation Code 5️⃣ 粘贴激活码,点击 Activate ⚠️ 必看!必看! 🔥 获取最…

    2025 年 1 月 11 日
    83200
  • 🚀 2025年最新IDEA激活码分享:永久破解IDEA终极教程(附破解补丁)

    🔥 还在为IDEA试用期到期而烦恼?本教程将手把手教你如何永久激活JetBrains全家桶(包括IDEA、PyCharm、DataGrip、Goland等),有效期直达2099年! 先来看看成功破解后的效果图,有效期显示到2099年,简直不要太爽!😎 💻 准备工作:下载IDEA安装包 如果你已经安装过IDEA,可以跳过这一步~ 访问JetBrains官网:h…

    2025 年 6 月 7 日
    60200
  • 2025最新PyCharm永久破解教程(亲测有效,支持2099年)🔥

    适用于JetBrains全家桶(IDEA、PyCharm、DataGrip、Golang等)的终极破解方案!💯 先给大家看看最新PyCharm版本破解成功的实锤截图👇,有效期直接拉到2099年,简直不要太爽! 本教程将手把手教你如何激活PyCharm至2099年,而且这个方法对旧版本同样有效!✨ 无论你的系统是Windows、Mac还是Linux 无论你安装…

    2025 年 5 月 31 日
    46400
  • AI老照片焕新:算法对比与参数调节妙招

    文章标题: AI老照片焕新:算法对比与参数调节妙招 文章内容: 用AI给老照片添彩:算法对比与调参窍门 一、前言 二、传统上色算法及局限性 2.1 基于直方图匹配的上色途径 2.2 基于特征匹配的上色方式 三、基于深度学习的上色算法 3.1 基于CNN的端到端上色算法 3.2 基于GAN的上色算法 3.3 基于Transformer的上色算法 四、实用调参窍…

    2025 年 9 月 19 日
    5600
  • 2025年最新DataGrip激活码及永久破解教程(支持2099年)

    前言 本教程适用于JetBrains系列开发工具,特别是DataGrip数据库管理软件,同时也兼容PyCharm、IDEA等其他产品。首先展示DataGrip成功激活至2099年的效果截图: 本文将详细讲解如何通过简单几步实现DataGrip的永久激活。这个方法适用于最新版本,同时向下兼容旧版,无论您使用的是Windows、Mac还是Linux操作系统,都能…

    DataGrip激活码 2025 年 7 月 31 日
    20100

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信