python3 fastapi 简介
所属分类 python
浏览量 16
FastAPI 是一个用于构建 API 的现代、快速(高性能)的 Web 框架,
使用 Python 语言并基于标准的 Python 类型提示
旨在提供简洁、高效且易于使用的 API 开发体验
主要特点
快速性能
基于 Starlette 和 Pydantic 构建,性能接近 Node.js 和 Go,适合高性能需求的应用
类型提示驱动
使用 Python 的类型提示(Type Hints)进行参数校验、请求解析和响应数据格式化,减少运行时错误
自动文档
自动生成交互式 API 文档(基于 Swagger UI 和 ReDoc),支持在线测试 API 端点
简洁易用
代码简洁,开发效率高,支持依赖注入、中间件等高级特性
标准兼容
完全兼容 ASGI(异步服务器网关接口),支持异步编程,充分利用 Python 的 async/await 特性
核心组件
Pydantic:用于数据验证和序列化,确保请求和响应数据的格式正确
Starlette:轻量级 ASGI 框架,提供路由、中间件、WebSocket 等功能
Uvicorn:高性能 ASGI 服务器,用于运行 FastAPI 应用
典型应用场景
微服务架构
API 网关
数据处理服务
与前端框架(如 React、Vue)集成的后端服务
需要高性能的 Web 应用
简单示例
python --version
Python 3.11.4
pip --version
pip 23.2.1 from /Users/dugang/anaconda3/lib/python3.11/site-packages/pip (python 3.11)
pip install fastapi uvicorn
pip list | grep fastapi
fastapi 0.116.1
pip list | grep uvicorn
uvicorn 0.35.0
fastapi:核心框架
uvicorn:ASGI 服务器,用于运行 FastAPI 应用
main.py
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import List, Optional
# 创建 FastAPI 应用实例
app = FastAPI(title="示例 API", description="一个简单的 FastAPI 应用", version="1.0.0")
# 定义数据模型
class Item(BaseModel):
id: int
name: str
price: float
is_available: Optional[bool] = True
# 模拟数据库
items_db = [
Item(id=1, name="苹果", price=5.99),
Item(id=2, name="香蕉", price=3.99),
Item(id=3, name="橙子", price=4.59)
]
# 根路径,返回欢迎信息
@app.get("/")
def read_root():
return {"Hello": "World"}
# 获取所有商品列表
@app.get("/items/", response_model=List[Item])
def read_items():
return items_db
# 根据 ID 获取单个商品
@app.get("/items/{item_id}", response_model=Item)
def read_item(item_id: int):
item = next((item for item in items_db if item.id == item_id), None)
if item is None:
raise HTTPException(status_code=404, detail="商品未找到")
return item
# 添加新商品
@app.post("/items/", response_model=Item)
def create_item(item: Item):
# 检查 ID 是否已存在
if any(existing_item.id == item.id for existing_item in items_db):
raise HTTPException(status_code=400, detail="商品 ID 已存在")
items_db.append(item)
return item
# 更新商品信息
@app.put("/items/{item_id}", response_model=Item)
def update_item(item_id: int, updated_item: Item):
for index, item in enumerate(items_db):
if item.id == item_id:
items_db[index] = updated_item
return updated_item
raise HTTPException(status_code=404, detail="商品未找到")
# 删除商品
@app.delete("/items/{item_id}")
def delete_item(item_id: int):
global items_db
items_db = [item for item in items_db if item.id != item_id]
return {"message": "商品已删除"}
# 运行应用(仅用于开发环境)
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)
python main.py
http://127.0.0.1:8000/
http://127.0.0.1:8000/items/
http://127.0.0.1:8000/items/1
上一篇
下一篇
大模型面试题 200 问
RAG 7大核心概念
杭州市民卡预付账卡户和电子钱包账户区别
Python __name__ 使用
flask hello
python字节码缓存 .pyc 文件