FastAPI入门指南
FastAPI是一个用于构建API的现代、快速(高性能)的web框架,基于标准Python类型提示。它旨在提供简单、直观、易用的API开发体验。在本文中,我们将介绍FastAPI的主要功能、安装方法、基本使用、接口设计、部署以及总结。
1. 功能介绍
FastAPI具有以下几个核心特点:
- 高性能:基于Starlette和Pydantic,提供了出色的性能。
- 直观:基于Python 3.6+的类型提示,代码简洁直观。
- 自动文档:自动生成API文档,支持OpenAPI(以前称为Swagger)。
- 数据验证:使用Pydantic进行数据验证和序列化,确保数据的准确性和一致性。
- 安全性:支持CORS、HTTPS、API密钥认证等。
- 可扩展性:基于Starlette,可以轻松扩展FastAPI以满足各种需求。
2. 安装
使用pip安装FastAPI非常简单:
pip install fastapi
如果你还希望使用uvicorn作为服务器和ASGI工具来运行你的FastAPI应用,可以额外安装:
pip install uvicorn[standard]
3. 简单例子
下面是一个简单的FastAPI应用示例:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {
"Hello": "World"}
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str = None):
return {
"item_id": item_id, "q": q}
在这个例子中,我们定义了两个路由:一个根路由/
和一个带参数的路由/items/{item_id}
。通过装饰器@app.get()
,我们指定了HTTP方法和路由路径。函数参数将自动从查询参数、路径参数、请求头等中提取,并进行数据验证。
4. 用FastAPI设计一个接口
下面是一个稍微复杂一些的FastAPI接口示例,包括数据验证和自定义响应:
from fastapi import FastAPI, Depends, HTTPException, status
from pydantic import BaseModel
from typing import Optional
app = FastAPI()
class Item(BaseModel):
name: str
description: Optional[str] = None
price: float
tax: Optional[float] = None
@app.post("/items/")
async def create_item(item: Item):
if item.tax is None:
item.tax = 0.2
return item
@app.get("/items/{item_id}")
async def read_item(item_id: int, item: Item = Depends(lambda: Item(id=item_id))):
if item_id != item.id:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Item not found")
return item
在这个例子中,我们定义了一个Item
模型,用于数据验证和序列化。在create_item
函数中,我们使用了Pydantic模型进行数据验证。在read_item
函数中,我们展示了如何使用Depends
依赖项来根据路径参数创建一个Item
实例,并进行条件检查以处理错误情况。
5. uvicorn部署FastAPI应用
要运行FastAPI应用,你可以使用uvicorn作为服务器。在命令行中,使用以下命令启动你的应用:
uvicorn main:app --reload
这里假设你的FastAPI应用位于名为main.py
的文件中,并且你创建了一个名为app
的FastAPI实例。--reload
选项允许在代码更改时自动重新加载应用。
6. 总结
FastAPI是一个强大而灵活的web框架,它利用Python 3.6+的类型提示和Pydantic库来简化API开发过程。通过自动数据验证、文档生成和可扩展性,FastAPI使API开发变得简单而高效。通过本文的介绍,你应该已经对FastAPI有了基本的了解,并能够开始使用它来构建自己的API应用。