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
上一篇 15小时前
下一篇 7小时前

相关推荐

  • 2025年最新DataGrip永久破解教程(亲测有效激活至2099年)🔥

    ✨本教程适用于JetBrains全家桶(IDEA/PyCharm/DataGrip/Goland等),支持Windows/macOS/Linux全平台! 先给大家看看最新成功破解的效果图,有效期直接拉到2099年,简直不要太爽!💯 下面将用最详细的图文步骤,手把手教你完成DataGrip的永久激活。这个方法同样适用于历史版本哦!👍 第一步:下载DataGri…

    2025 年 5 月 20 日
    36800
  • 🚀 2025最新PyCharm永久激活教程(附2099年有效激活码)| 破解全攻略 💻

    🔥 本教程适用于Jetbrains全家桶(IDEA、PyCharm、DataGrip、Goland等),亲测有效! 先给大家看看最新PyCharm版本破解成功的实锤截图👇 有效期直接拉到2099年,简直不要太爽! 下面就用最详细的图文步骤,手把手教你激活PyCharm到2099年✨ 💡 划重点:这个方法全版本通用!✅ Windows/Mac/Linux全平台…

    2025 年 6 月 16 日
    59100
  • 『玩转Streamlit』–查看K线的小工具

    在金融市场分析中,查看不同交易对的 K 线数据是一项基础且重要的工作。 今天,我们就来学习如何使用 Streamlit 构建一个简单的 K 线查看小工具,让你能够方便地查看不同交易对在不同时间范围内的 K 线数据。 1. 环境准备 首先,确保已经安装了必要的库。 除了 Streamlit 用于构建界面,还需要pandas 用于数据处理,plotly 用于绘制…

    2025 年 1 月 14 日
    34000
  • 2025年最新DataGrip永久破解教程(附激活码/注册码)🔥

    🚀 本教程适用于JetBrains全家桶,包括IDEA、PyCharm、DataGrip、GoLand等所有产品! 先给大家看看最新版本的破解成果,直接续命到2099年,简直不要太爽!✨ 下面我就用详细的图文教程,手把手教你如何永久激活DataGrip。这个方法同样适用于旧版本哦! 💡 无论你用的是Windows、Mac还是Linux系统,都能完美破解! 第…

    DataGrip激活码 2025 年 6 月 19 日
    18700
  • 2025年最新IDEA激活码分享 | 永久破解IDEA至2099年教程

    JetBrains全家桶通用破解指南(含IDEA/PyCharm/DataGrip等) 先给大家展示最新IDEA版本成功破解的截图,如图所示,软件已完美激活至2099年! 下面将用详细的图文教程,手把手教你如何将IDEA激活到2099年。这个方法不仅适用于最新版本,对旧版本也同样有效! 全平台通用:无论你使用Windows、Mac还是Linux系统,都能按照…

    IDEA破解教程 1天前
    3000

发表回复

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

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信