##【今日python】用FastAPI构建高性能API:现代Web框架的最佳选择!
今儿个,猫哥带你玩转FastAPI,这玩意儿可是构建高性能API的利器,比Flask和Django更带劲!让你体验飞一般的开发速度!咱们会讲到路由、请求体、数据校验等等,保证你快速上手!
##路由:你的API地图
路由就像你家的门牌号,告诉FastAPI该怎么找到你写的函数。用@app.get("/")、@app.post("/")、@app.put("/")、@app.delete("/")这些装饰器,就能给不同的HTTP请求方法指定不同的处理函数。
fromfastapiimportFastAPI
app=FastAPI()
@app.get("/")
asyncdefread_root():
return{"Hello":"World"}
@app.get("/items/{item_id}")
asyncdefread_item(item_id:int):
return{"item_id":item_id}
你看,多简单!/路径返回"Hello,World",/items/{item_id}路径返回你传的item_id。
##请求体:接收客户端的数据
客户端经常需要给服务器传数据,比如注册用户信息、提交订单啥的。FastAPI用Pydantic这个库来定义数据模型,方便又安全。
fromfastapiimportFastAPI
frompydanticimportBaseModel
app=FastAPI()
classItem(BaseModel):
name:str
price:float
is_offer:bool=None
@app.post("/items/")
asyncdefcreate_item(item:Item):
returnitem
这里定义了个Item模型,包含name、price和is_offer三个字段。@app.post("/items/")装饰器里的item:Item就表示接收一个Item类型的请求体。
##数据校验:别让脏数据搞垮你
FastAPI自动校验请求体数据,不符合Item模型定义的数据,直接给你报错,省心!比如price必须是浮点数,name必须是字符串。
温馨提示:Pydantic的校验功能非常强大,可以定义各种类型、限制条件,甚至自定义校验规则。
##查询参数:灵活的请求过滤
除了路径参数和请求体,FastAPI还支持查询参数,方便你对数据进行过滤和排序。
fromfastapiimportFastAPI
app=FastAPI()
fake_items_db=[{"item_name":"Foo"},{"item_name":"Bar"},{"item_name":"Baz"}]
@app.get("/items/")
asyncdefread_item(skip:int=0,limit:int=10):
returnfake_items_db[skip:skip+limit]
这个例子中,/items/?skip=0&limit=2会返回fake_items_db中的前两个元素。
##异步:提升性能的秘诀
FastAPI基于Starlette和Uvicorn,天生支持异步,处理并发请求效率杠杠的,甩Flask和Django几条街。
##依赖注入:优雅的代码复用
FastAPI的依赖注入机制可以让你轻松复用代码、管理数据库连接、处理权限认证等等。这玩意儿有点抽象,先简单了解一下,以后再深入研究。
fromfastapiimportFastAPI,Depends
app=FastAPI()
asyncdefcommon_parameters(q:str=None,skip:int=0,limit:int=10):
return{"q":q,"skip":skip,"limit":limit}
@app.get("/items/")
asyncdefread_items(commons:dict=Depends(common_parameters)):
returncommons
common_parameters函数作为依赖项,可以在多个路由中复用。
##中间件:请求的拦截器
中间件可以拦截请求,做一些预处理或后处理,比如记录日志、处理CORS等等。
##异常处理:优雅地处理错误
代码难免会出bug,FastAPI提供了异常处理机制,让你可以优雅地处理错误,返回友好的错误信息给客户端。
如果item_id不存在,就抛出一个404错误。
温馨提示:FastAPI的异常处理机制非常灵活,可以自定义各种异常类型。
今儿个就先聊到这儿,FastAPI的功能远不止这些,还有好多好玩的等着你去探索。猫哥下次再接着唠!
领取专属 10元无门槛券
私享最新 技术干货