router = APIRouter ( prefix = "/items" , tags = [ "tag_items" ] )
@ router . get ( "/" )
async def read_items ( ) :
return { "__all__" }
@ router . delete ( "/{item_id}" )
def delete_item ( item_id : int ) :
return { "action" : "delete" , "item_id" : item_id }
app/routers/users.py
from fastapi import APIRouterrouter = APIRouter()@router.get("/users/{username}", tags=["users"])def read_user(username: str):return {"username": username}@router.post("/users/{username}", tags=["users"])async def add_user(username: str):return {"action": "add", "username": username, "userid": "new_id"}
router = APIRouter ( )
@ router . get ( "/users/{username}" , tags = [ "users" ] )
def read_user ( username : str ) :
return { "username" : username }
@ router . post ( "/users/{username}" , tags = [ "users" ] )
async def add_user ( username : str ) :
return { "action" : "add" , "username" : username , "userid" : "new_id" }
在每个单独定义路由的文件里用到的是 APIRouter , 它相当是一个迷你的 FastAPI , 也类似于 Flask 的 Blueprint . 上面分别演示了两种 APIRouter 的声明方式 , 声明时带不带 prefix 和 tags 。同时在为函数定义路由时也可指定 tags , 在后面我们将会注意到 tags 只是为 API 文档分类用的 。
app/main.py
from fastapi import FastAPIfrom .internal import adminfrom .routers import users, itemsapp = FastAPI()app.include_router(users.router)app.include_router(items.router)app.include_router(admin.router, prefix="/admin", tags=["admin"])@app.get("/")def index():return "index"
from . internal import admin
from . routers import users , items
app = FastAPI ( )
app . include_router ( users . router )
app . include_router ( items . router )
app . include_router ( admin . router , prefix = "/admin" , tags = [ "admin" ] )
@ app . get ( "/" )
def index ( ) :
return "index"
这里实际上使用了三种定义路径前缀与 tags(API 分类) 的方式
- user.router: 在每个 API 中定义完整 API 路径(如 /users 为 URL 前缀) 以及 tags
- item.router: 声明 APIRouter 时统一指定 URL 前缀和 tags
- admin.router: 注册 APIrouter 到 app(FastAPI) 时指定 URL 前缀和 tags
$ uvicorn app.main:app --reload
查看 SwaggerUIhttp://localhost:8000/docs
文章插图
到目前为止我重点关注 FastAPI 的就是以上那两个特性:自动 API 文档与大程序多文件(Blueprint) 功能 。其他的特性可查阅 FastAPI 的 Features。比如:
- 自动的 JSON 反序列化
- 数据校验功能
- HTTP Basic, OAuth2, API keys 的支持
- WebSocket, 进程内后台任务 , 启动/关闭事件 , CORS, GZIP, 静态文件 , 流响应数据 , Session/Cookie
- 轻松与 GraphQL 集成
推荐阅读
- 发型|换发型就像换脸,看看这17位美女发型前后对比,让你收获良多
- 头条创作100天,与改变方法后的收益对比,太有用了
- B2B和B2C谷歌SEO网站优化和运营异同对比
- 4K投影机要买越贵才越好?未必!买来了两台投影机做了一个对比
- ios15续航对比ios14.8-iphone11升级ios14.4续航-_1
- vue3,对比 vue2 有什么优点?
- 真假金花茶图片对比,金花茶苗木图样
- 云焰普洱沉香香烟,茶烟和香烟的对比
- 余承东|华为新旗舰Mate Xs 2发布!拍照对比iPhone 13 Pro Max:清晰度提升25%
- 邓艾和诸葛瞻兵力对比,诸葛亮能不能打得过邓艾