如何用Python开发API接口?FastAPI快速入门

来源:APP编程网作者:梧桐头衔:草根站长
导读:本期聚焦于小伙伴创作的《如何用Python开发API接口?FastAPI快速入门》,敬请观看详情。把同步框架的思维直接套到异步框架上,是初学FastAPI时最容易踩的坑。FastAPI基于ASGI标准构建,依靠类型注解自动生成OpenAPI文档并完成请求校验,这点和传统Flask路由写法差别很大。本文从环境准备讲起,演示如何用不到二十行代码启动一个带参数校验的接口,并说明路径参数、查询参数的声明方式。你会看到Pydantic模型如何接管数据校验逻辑,以及依赖注入如何抽离共用逻辑。掌握这些后,本地调试用自带Swagger页面即可完成,不必额外装接口测试工具。

用Python写接口服务,过去大家习惯拿Flask或Django加插件凑一套RESTful出来。FastAPI出现后,情况变了:它天生支持异步,靠类型标注就能把参数校验、文档生成全包办。下面直接看怎么从零搭一个能跑的接口。

如何用Python开发API接口?FastAPI快速入门

一、环境准备与最小应用

FastAPI依赖ASGI服务器才能运行,官方推荐用uvicorn。先建个虚拟环境把包装好,避免污染全局Python。

python -m venv venv
source venv/bin/activate
pip install fastapi uvicorn

装完之后,写一个最小例子。注意这里没有用任何装饰器去声明参数类型,仅用函数返回字典,FastAPI就会把它转成JSON响应。

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"msg": "hello"}

启动命令是uvicorn main:app --reload,其中main是文件名,app是实例名。浏览器打开根路径就能看到JSON。这种写法比Flask还短,但背后已经走了完整的ASGI生命周期。

二、路径参数与查询参数

FastAPI通过函数签名区分路径参数和查询参数。路径参数写在大括号里,函数形参标注类型;查询参数直接写形参即可,框架会自动从URL问号后解析。

from fastapi import FastAPI

app = FastAPI()

@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}

上面代码中,item_id被标成int,如果有人传字符串,FastAPI直接返回422错误,不用你手写判断。q是可选查询参数,不传就是None。这种强制类型声明让接口更稳,也省了校验代码。

对比Flask要用request.args.get再转换,FastAPI在入口就完成了转换和校验。如果参数多,还可以用Pydantic模型收口,后面会讲。

三、用Pydantic做请求体校验

当接口需要接收JSON body时,定义一个Pydantic模型,FastAPI会自动解析并校验字段类型,缺字段也会报422。

from fastapi import FastAPI
from pydantic import BaseModel

class Item(BaseModel):
    name: str
    price: float
    is_offer: bool = False

app = FastAPI()

@app.post("/items/")
def create_item(item: Item):
    return {"name": item.name, "price": item.price}

这里Item继承BaseModel,字段带默认值。客户端发来的JSON若price写成字符串,框架直接拒绝。你拿到的item对象已是Python类型,不用自己json.loads再加try。

这种做法把数据契约显式写出来,前端对照模型就知道该传什么。文档里也会列出字段说明,减少沟通成本。

四、依赖注入分离公共逻辑

接口常要鉴权或读配置。FastAPI用依赖注入把这部分抽出来,不污染业务函数。

from fastapi import FastAPI, Depends, HTTPException

app = FastAPI()

def check_token(token: str = None):
    if token != "secret":
        raise HTTPException(status_code=401, detail="bad token")
    return token

@app.get("/secure/")
def secure_data(token: str = Depends(check_token)):
    return {"data": "ok"}

check_token是个普通函数,框架在调secure_data前先跑它。失败就抛异常,成功把返回值注入形参。这样多个接口复用同一逻辑时,只写一次。

依赖还能嵌套,比如先查用户再查权限。比起中间件,它更细粒度,只作用于声明了的接口。

五、自带文档与调试

启动后访问 /docs 就是Swagger UI,能直接发请求看响应。访问 /redoc 是另一种文档样式。这两者都是根据类型标注和模型自动生成的。

路径用途
/docs交互式Swagger调试页
/redoc静态文档页
/openapi.json原始OpenAPI描述

不用装Postman也能测接口。前端同事看/docs就知道参数格式,后端改模型文档实时变。

总体看,FastAPI把Python类型系统变成了接口定义语言。写少了校验代码,跑起来是异步性能,文档还自动有。新手从上面几段例子起步,半天就能交付一个合规的API服务。

FastAPIPython_APIASGI修改时间:2026-08-04 03:42:26

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。