FastAPI实战:用GET和POST方法构建RESTful API

FastAPI是一个现代、快速(高性能)的Python Web框架,专为构建RESTful API设计。它基于标准Python类型提示,自动生成交互式API文档(Swagger UI和ReDoc),并且支持异步操作,非常适合初学者快速上手。

一、环境搭建

在开始之前,我们需要先安装FastAPI和一个ASGI服务器(Uvicorn)。打开终端,执行以下命令:

pip install fastapi uvicorn

安装完成后,我们就可以开始编写代码了。

二、第一个GET接口:获取用户列表

GET方法用于从服务器获取资源。这里我们将创建一个接口,用于返回一个模拟的用户列表。

代码示例:

from fastapi import FastAPI

# 创建FastAPI应用实例
app = FastAPI()

# 模拟数据库数据
users = [
    {"id": 1, "name": "张三", "age": 20},
    {"id": 2, "name": "李四", "age": 25}
]

# 定义GET接口,路径为"/users"
@app.get("/users")
def get_users():
    """获取所有用户信息"""
    return users  # 返回用户列表,FastAPI会自动转为JSON格式

代码解释:

  1. 导入FastAPIfrom fastapi import FastAPI 导入核心框架类。
  2. 创建应用实例app = FastAPI() 实例化FastAPI对象,后续的接口定义都通过这个实例完成。
  3. 模拟数据users 列表模拟数据库中的用户数据,便于测试。
  4. 定义GET接口@app.get("/users") 装饰器指定接口的访问路径为/users,请求方法为GET。def get_users() 是处理该请求的函数,返回值会自动序列化为JSON格式返回给客户端。

效果测试:

运行代码后,在终端执行:

uvicorn main:app --reload

(注:main是你的Python文件名,app是创建的FastAPI实例名,--reload参数表示代码修改后自动重启服务器)

打开浏览器访问 http://localhost:8000/docs,你会看到FastAPI自动生成的交互式API文档(Swagger UI)。点击GET /users接口旁的”Try it out”,然后点击”Execute”,即可看到返回的用户列表。

三、第二个POST接口:创建新用户

POST方法用于向服务器提交数据,这里我们将创建一个接口,接收新用户的信息并返回创建的用户。

代码示例:

from fastapi import FastAPI
from pydantic import BaseModel  # 用于定义请求数据格式

app = FastAPI()

# 模拟数据库数据
users = [
    {"id": 1, "name": "张三", "age": 20},
    {"id": 2, "name": "李四", "age": 25}
]

# 定义请求数据模型:用户信息
class UserCreate(BaseModel):
    name: str  # 姓名,字符串类型
    age: int   # 年龄,整数类型

# 定义POST接口,路径为"/users"
@app.post("/users")
def create_user(user: UserCreate):
    """创建新用户"""
    # 生成新用户ID(假设最大ID+1)
    new_id = max([u["id"] for u in users]) + 1 if users else 1
    new_user = {"id": new_id, **user.dict()}  # **user.dict() 解包字典
    users.append(new_user)
    return new_user  # 返回创建后的用户信息

代码解释:

  1. Pydantic模型UserCreate类继承自BaseModel,用于定义POST请求需要接收的数据格式。这里要求必须提供name(字符串)和age(整数),FastAPI会自动验证输入数据类型,避免无效数据。
  2. POST接口定义@app.post("/users") 装饰器指定请求路径为/users,方法为POST。def create_user(user: UserCreate) 中的user: UserCreate表示请求体的数据类型为UserCreate模型,FastAPI会自动解析请求中的JSON数据并传入该参数。
  3. 逻辑处理:根据现有用户的最大ID生成新用户ID,将新用户信息添加到users列表中,并返回创建后的用户。

效果测试:

在Swagger UI中点击POST /users接口,填写请求体:

{
  "name": "王五",
  "age": 30
}

点击”Execute”后,即可看到新用户被创建并返回。此时再访问GET /users接口,就能看到王五的信息已被加入列表。

四、总结

通过以上两个示例,我们完成了一个简单的RESTful API框架:

  1. GET方法:用于获取资源(如用户列表),代码简洁,直接返回数据。
  2. POST方法:用于提交数据(如创建新用户),通过Pydantic模型实现数据验证,确保输入格式正确。
  3. FastAPI优势:自动生成API文档,无需手动写文档;类型提示和数据验证,减少错误;高性能和异步支持,未来可扩展性强。

接下来,你可以尝试扩展接口:
- 添加路径参数(如/users/{user_id}获取单个用户)
- 实现PUT(更新)和DELETE(删除)方法
- 结合数据库(如SQLite)存储真实数据

FastAPI的学习曲线很平缓,文档完善且交互式,非常适合作为API开发的入门框架。现在,动手实践吧!

小夜