新闻动态

良好的口碑是企业发展的动力

fastapi教程

发布时间:2024-12-01 08:49:37 点击量:34
公司网站网页模板

 

FastAPI 是一个用于构建 Web API 的现代化、高性能框架。它建立在 Starlette 和 Pydantic 之上,利用 Python 的异步特性来实现高效的处理。FastAPI 以其快速开发、自动生成文档和出色的性能而受到广泛关注,特别是在数据密集型应用程序中,如机器学习和数据科学项目。

FastAPI 的特点

  1. 高性能:FastAPI 基于 ASGI(Asynchronous Server Gateway Interface),采用 Python 的异步特性,性能与 Node.js、Go 等相媲美。
  2. 自动生成文档:利用 OpenAPI 和 JSON Schema,FastAPI 可以自动生成交互式 API 文档。
  3. 类型检查:基于 Python 3.6+ 的类型标注,FastAPI 通过 Pydantic 提供自动的请求验证和数据解析。
  4. 高效的错误处理:快速捕获和处理请求中的错误。
  5. 支持异步:默认支持 Python 的 asyncawait 功能,便于处理异步请求。

快速入门

下面我们来构建一个简单的 FastAPI 应用来了解其基本用法。

# 首先确保安装了 fastapi 和 uvicorn
# pip install fastapi uvicorn

from fastapi import FastAPI

# 创建 FastAPI 实例
app = FastAPI()

# 定义一个路径操作装饰器,处理 GET 请求
@app.get("/")
async def read_root():
    return {"Hello": "World"}

# 定义带有路径参数的 API
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}

# 运行应用
# 使用命令: uvicorn main:app --reload

在上述代码中,我们创建了一个简单的 FastAPI 应用,它包含两个路径操作:根路径 / 和带参数的 /items/{item_id} 路径。该应用可以通过 Uvicorn 运行,并且随着代码的更新自动重载。

路径参数和查询参数

FastAPI 对路径参数和查询参数提供了灵活的支持。如上例,item_id 是路径参数,而 q 是查询参数。如果不传 q,它的默认值为 None

请求体和数据验证

FastAPI 使用 Pydantic 模型来定义请求体。Pydantic 提供了强大的数据验证和解析功能,使请求的数据验证简单明了。

from pydantic import BaseModel

# 定义 Pydantic 模型
class Item(BaseModel):
    name: str
    price: float
    is_offer: bool = None

# 处理 POST 请求
@app.post("/items/")
async def create_item(item: Item):
    return item

在这个例子中,我们定义了一个 Item 模型,其中包含 namepriceis_offer 三个字段。FastAPI 会自动验证请求的 JSON 数据,确保其符合 Item 模型的定义。

网络服务的运行

使用 uvicorn 可以高效地运行 FastAPI 应用。Uvicorn 是一个支持 ASGI 的轻量级 Web 服务器。

运行命令:

uvicorn main:app --reload

其中 main 是 Python 文件的名称,app 是 FastAPI 实例的变量名。--reload 参数使服务器在检测到代码变化时自动重新启动,非常适合开发环境。

交互式文档

FastAPI 内置了自动生成 API 文档的功能,可以在 /docs 路径访问基于 Swagger UI 的交互式界面。同时在 /redoc 路径访问 ReDoc 提供的文档。

异步编程模型

FastAPI 强烈支持异步编程,通过使用 asyncawait,开发者可以利用 Python 异步 I/O 操作,比如数据库查询或调用外部服务。

@app.get("/async-items/")
async def get_items():
    # 假设这是一个异步数据库操作
    items = await some_async_db_query()
    return items

这一特性对于 I/O 密集型的应用来说非常理想,使得应用能够处理更高的并发请求数。

中间件(Middleware)

FastAPI 允许添加中间件来拦截请求和响应,从而执行如日志记录、鉴权等操作。

from fastapi.middleware.cors import CORSMiddleware

app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

使用依赖注入

FastAPI 提供了强大的依赖注入功能,通过函数参数类型和注解实现。在处理复杂业务逻辑时(如权限控制、数据库会话管理),可以极大简化代码。

from fastapi import Depends

def get_db():
    # 假设这是一个数据库会话生成器
    db = create_db_session()
    try:
        yield db
    finally:
        db.close()

@app.get("/users/")
async def read_users(db: Session = Depends(get_db)):
    users = db.query(User).all()
    return users

小结

FastAPI 是一个功能强大且富有表现力的 Web 框架,专注于易于使用的开发体验和高性能。它的类型验证、自动文档生成、异步支持及现代化设计使得它非常适合构建高效的 API 服务。随着对异步编程需求的增长,FastAPI 的优势愈加明显,尤其是在构建实时应用和微服务中。

免责声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,也不承认相关法律责任。如果您发现本社区中有涉嫌抄袭的内容,请发送邮件至:dm@cn86.cn进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。本站原创内容未经允许不得转载。
上一篇: 360编辑器
下一篇: json转数组