探索 Python 库:FastAPI
介绍
FastAPI是一个现代 Python Web 框架,具有许多优点,包括:
- 它是目前速度最快的(高性能)Web 框架之一。
- 它利用Python 3.6+ 的类型注释支持来获得更好的数据验证和编辑器支持。
- 它利用 Python 的异步功能,这对于构建异步 API 很有用。
- 它基于OpenAPI和JSON Schema等开放标准生成标准。
- 它功能强大并且易于使用和学习。
因此,在本指南中,您将探索最新、最好的 Python Web 框架库之一。
入门
安装、创建和运行 FastAPI 只需三个基本步骤。
安装
pip install fastapi
您还需要一个ASGI(异步服务器网关接口)服务器,例如Uvicorn。
pip install uvicorn
创建您的应用程序
要查看最简单的 FastAPI 应用程序的外观,请创建一个名为main.py的新 Python 文件
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"hello": "world"}
运行你的应用程序
要运行该应用程序,只需执行以下操作:
uvicorn main:app --reload
运行上述命令后,服务器启动如下:
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL
+C to quit)
INFO: Started reloader process [4136] using
statreload
INFO: Started server process [12988]
INFO: Waiting for application startup.
INFO: Application startup complete.
深入探索
路径参数
您可以将 API 调用的参数声明为函数参数的变量。在这里,我使用course_id作为参数。请注意,参数的类型为int。
@app.get("/course/{course_id}")
def my_course(course_id: int):
return {"course_id": course_id}
如果您提供的 URL 不正确,例如course/100s,您将收到以下验证错误。
{
"detail": [
{
"loc": [
"path",
"course_id"
],
"msg": "value is not a valid integer",
"type": "type_error.integer"
}
]
}
如果你针对course/100之类的 URL 运行该示例,调用将得到以下响应:
{"course_id":100}
查询参数
向 API 调用提供参数的另一种方式是将其作为查询参数提供。例如:/my/page/items/?page=1&limit=10&order=0。
以下是如何在 FastAPI 中实现该功能。
dummy_data = [i for i in range(100)]
@app.get("/my/page/items/")
async def read_item(page: int = 0, limit: int = 0, skip: int = 1):
return dummy_data[page*10: page*10 + limit: skip]
在上面的示例中,设置了三个参数。因此,对于https://127.0.0.1:8000/my/page/items/?page=2&limit=29&skip=2这样的 URL ,参数将是:
- 页数(整数): 2
- 限制(整数):29
- 跳过(int):2
因此上述 URL 的响应将是:
20
请求正文
当你需要从客户端向服务器发送数据时,可以使用请求体。
注意:要使用请求主体发送数据,请使用POST方法。您不能在请求主体中使用GET方法。
要声明请求主体,请使用Pydantic模型并将请求主体声明为:
from pydantic import BaseModel
class MyItem(BaseModel):
name: str
info: str = None
price: float
qty: int
@app.post("/purchase/item/")
async def create_item(item: MyItem):
return {"amount": item.qty*100, "success": True}
在上面的例子中,我创建了一个名为MyItem的模型,该模型具有某些属性。现在,当端点/purchase/item/上有POST请求时,它将捕获属性值并成功返回。
让我们使用CURL测试这个 API 调用。
curl -X POST "http://127.0.0.1:8000/purchase/item/" -H "accept: application/json" -H "Content-Type: application/json" -d "{\"name\":\"sample item\",\"info\":\"This is info for the item\",\"price\":40,\"qty\":2}"
它将给出答复:
{"amount":200,"success":true}
表单数据
在许多情况下,您可能需要接收表单字段而不是 JSON。在这种情况下,Form可以解决问题。HTML 表单( <form></form> )发送数据的方式与 JSON 不同,但 FastAPI 可确保正确解析数据。
要使用表单数据,首先安装附加库python-multipart。
pip install python-multipart
为了这个演示,我创建了一个登录视图,将用户名和密码作为表单字段。
from fastapi import Form
@app.post("/accounts/login/")
async def login_view(username: str = Form(...), password: str = Form(...)):
return {"success": True}
自动文档
FastAPI 附带一个电池,可在美观的 Web 用户界面中自动生成 API 文档。fastAPI 附带两个默认的自动文档。
Swagger 用户界面
这是对您的 API 调用的交互式探索。在这里,您可以在一个美观且用户友好的界面中查看和测试您的 API 调用。点击此处了解更多信息。
重新文档
或者,您可以使用redoc作为您的 API 文档。
查看更多相关信息。
探索功能
表现
在 Uvicorn 下运行的 FastAPI 应用使用速度最快的 Python Web 框架之一,仅次于 Starlette 和 Uvicorn 本身(FastAPI 内部使用)。查看基准测试。
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~