零基础学FastAPI:快速理解API开发的核心概念

什么是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会自动验证数据类型并返回结果。

核心概念三:处理请求数据的三种方式

  1. 路径参数: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}的信息"}
  1. 查询参数:URL末尾用?分隔的键值对(如/search?q=python
   @app.get("/search")
   def search(q: str, page: int = 1):
       return {"query": q, "page": page}
  1. 请求体:复杂数据(如表单、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简单且强大,只要多动手写接口,很快就能熟练掌握!

小夜