什么是API?¶
想象你用手机上的外卖APP下单,APP需要向餐厅服务器请求“返回菜品列表”“提交订单信息”,这个“请求-响应”的过程就是API在工作。简单说,API是不同软件系统之间“沟通的桥梁”,让数据能在客户端(如手机、网页)和服务器之间安全高效地传递。
为什么选择FastAPI?¶
在Python的Web框架中,FastAPI是个“后起之秀”,但凭借几个优势迅速流行:
- 简单易用:语法接近Python原生,不需要复杂配置
- 高性能:速度快(性能接近Node.js和Go),适合高并发场景
- 自动文档:自带Swagger UI和ReDoc,开发后能立即生成交互式API文档
- 类型提示支持:结合Python的类型注解,自动生成代码提示和数据验证
- 异步友好:支持异步编程,处理长时间任务(如数据库查询)更高效
快速入门:安装与第一个“Hello World”¶
安装FastAPI和服务器¶
首先安装FastAPI和运行服务器工具Uvicorn:
pip install fastapi uvicorn
编写第一个接口¶
创建一个main.py文件,写入以下代码:
from fastapi import FastAPI
# 初始化FastAPI应用
app = FastAPI()
# 定义路由和处理函数
@app.get("/") # 当用户访问根路径"/"时,使用GET方法
def read_root():
return {"message": "Hello, FastAPI!"} # 返回JSON格式数据
运行接口¶
在终端执行:
uvicorn main:app --reload
main:app表示运行main.py文件中的app实例,--reload让代码修改后自动重启。
此时访问 http://localhost:8000,就能看到返回的 {"message": "Hello, FastAPI!"}。
核心概念一:路由与视图函数¶
路由就像给接口“贴标签”——当用户访问某个URL时,FastAPI会根据标签找到对应的“处理函数”(视图函数)。
例如:
@app.get("/hello") # 路由路径为"/hello",请求方法为GET
def say_hello():
return {"message": "Hello, FastAPI!"}
访问 http://localhost:8000/hello,就会触发say_hello函数,返回结果。
核心概念二:请求方法(GET/POST等)¶
不同的请求方法对应不同的业务场景:
- GET:获取数据(如查询列表、详情),参数放在URL中
- POST:提交数据(如新增用户、上传文件),参数放在请求体中
GET请求示例(查询参数)¶
@app.get("/items/") # 路径为"/items/"
def get_items(limit: int = 10, offset: int = 0): # 可选参数limit和offset
return {"limit": limit, "offset": offset}
访问 http://localhost:8000/items/?limit=20&offset=5,会返回 {"limit": 20, "offset": 5}。
POST请求示例(请求体)¶
POST需要在请求体中提交数据,用Pydantic模型定义数据格式(后续会详细讲):
from pydantic import BaseModel
# 定义数据模型(指定字段类型)
class Item(BaseModel):
name: str
price: float
is_offer: bool = None # 可选字段
@app.post("/items/") # POST请求,提交Item数据
def create_item(item: Item):
return {"item": item.dict(), "message": "Item created!"}
此时向/items/提交JSON数据(如{"name": "手机", "price": 999.99}),FastAPI会自动验证数据类型并返回结果。
核心概念三:处理请求数据的三种方式¶
- 路径参数:URL中的动态部分(如
/user/{user_id})
@app.get("/user/{user_id}")
def get_user(user_id: int): # user_id是整数类型
return {"user_id": user_id, "message": f"用户{user_id}的信息"}
- 查询参数:URL末尾用
?分隔的键值对(如/search?q=python)
@app.get("/search")
def search(q: str, page: int = 1):
return {"query": q, "page": page}
- 请求体:复杂数据(如表单、JSON),通过Pydantic模型接收
(见上文POST示例,Item模型会自动解析请求体的JSON数据)
核心概念四:构建响应与状态码¶
返回数据¶
FastAPI会自动将函数返回的Python数据(如字典、列表)转为JSON格式,无需手动序列化。
自定义状态码¶
默认返回200 OK,但可通过status_code参数指定:
from fastapi import status
@app.post("/items/", status_code=status.HTTP_201_CREATED)
def create_item(item: Item):
return {"item": item} # 创建成功返回201状态码
核心概念五:数据验证(Pydantic模型)¶
Pydantic是FastAPI的“数据管家”,通过类型注解自动验证请求数据:
class User(BaseModel):
name: str # 必须是字符串
age: int # 必须是整数
email: str | None = None # 可选字段,默认None
@app.post("/register/")
def register(user: User):
if user.age < 18:
return {"error": "年龄必须≥18"}
return {"user": user.dict(), "message": "注册成功"}
若提交数据不合法(如age为字符串),FastAPI会返回清晰的错误提示。
核心概念六:自动API文档¶
FastAPI自带Swagger UI和ReDoc,开发完接口后可直接测试:
- 访问 http://localhost:8000/docs(Swagger UI,交互式调试界面)
- 访问 http://localhost:8000/redoc(ReDoc,更美观的文档)
这些文档会自动生成接口说明、参数示例和响应格式,无需手动写文档!
总结与下一步¶
通过以上内容,你已掌握FastAPI的核心基础:
- 用路由+视图函数定义接口
- 处理GET/POST等请求方法和数据
- 通过Pydantic验证数据合法性
- 利用自动文档快速调试
下一步可以学习:
- 异步接口开发(async def)
- 中间件与依赖注入(如数据库连接、认证)
- 与数据库集成(SQLAlchemy)
FastAPI简单且强大,只要多动手写接口,很快就能熟练掌握!