2021年11月21日 22:22 by wst
python高级1. 2021 年最佳开源软件榜单 上榜
2. 非常高的性能,与 NodeJS 和 Go 相当
3. 自带接口文档 (个人添加,有点牵强,但特别有用)
FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 3.6+ 并基于标准的 Python 类型提示。
快速:可与 NodeJS 和 Go 比肩的极高性能(归功于 Starlette 和 Pydantic)。最快的 Python web 框架之一。
高效编码:提高功能开发速度约 200% 至 300%。*
pip install fastapi
你还会需要一个 ASGI 服务器,生产环境可以使用 Uvicorn 或者 Hypercorn。
pip install uvicorn[standard]
创建一个 main.py
文件并写入以下内容:
from typing import Optional
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
return {"item_id": item_id, "q": q}
uvicorn main:app --reload
uvicorn main:app
命令含义如下:
main
:main.py
文件(一个 Python "模块")。app
:在main.py
文件中通过app = FastAPI()
创建的对象。--reload
:让服务器在更新代码后重新启动。仅在开发时使用该选项。
使用浏览器访问 http://127.0.0.1:8000/items/5?q=somequery。
你将会看到如下 JSON 响应:
{"item_id": 5, "q": "somequery"}
你已经创建了一个具有以下功能的 API:
/
和 /items/{item_id}
接受 HTTP 请求。GET
操作(也被称为 HTTP 方法)。/items/{item_id}
路径 有一个 路径参数 item_id
并且应该为 int
类型。/items/{item_id}
路径 有一个可选的 str
类型的 查询参数 q
。现在访问 http://127.0.0.1:8000/docs。
你会看到自动生成的交互式 API 文档(由 Swagger UI生成):
现在修改 main.py
文件来从 PUT
请求中接收请求体。
我们借助 Pydantic 来使用标准的 Python 类型声明请求体。
from typing import Optional
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
price: float
is_offer: Optional[bool] = None
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
return {"item_id": item_id, "q": q}
@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
return {"item_name": item.name, "item_id": item_id}
服务器将会自动重载(因为在上面的步骤中你向
uvicorn
命令添加了--reload
选项)
总的来说,你就像声明函数的参数类型一样只声明了一次请求参数、请求体等的类型。
你使用了标准的现代 Python 类型来完成声明。
你不需要去学习新的语法、了解特定库的方法或类,等等。
只需要使用标准的 Python 3.6 及更高版本。
举个例子,比如声明 int
类型:
item_id: int
或者一个更复杂的 Item
模型:
item: Item
......在进行一次声明之后,你将获得:
str
、 int
、 float
、 bool
、 list
等)datetime
对象UUID
对象官方文档:https://fastapi.tiangolo.com/zh/
微信文章:https://mp.weixin.qq.com/s/QDLoKcPSW_KWlLMClMEpnA