FastAPI 基础

FastAPI 是一个快速的Web框架,用于构建 API



1. FastAPI 主要特点

  1. 高性能: FastAPI 使用 Starlette 作为其底层 Web 框架,并利用 Pydantic 进行数据验证和序列化。基于 Starlette 和 Pydantic 的高性能,FastAPI 在处理请求和响应时速度非常快。

  2. 基于类型提示: FastAPI 完全利用 Python 的类型提示(Type Hinting)功能,API 设计更加直观且易于维护。

  3. 自动生成文档: FastAPI 自动生成 Swagger UI 和 ReDoc 文档界面,可以快速测试和了解 API 功能。

  4. 支持异步编程: FastAPI 原生支持异步编程,可以使用 asyncawait 关键字编写异步代码。

  5. 依赖注入: FastAPI 提供了一个强大的依赖注入系统,可以定义和管理依赖关系,简化了应用程序的开发和测试过程。

  6. 高效的请求和响应处理: 通过 Pydantic 模型进行请求体和响应体的验证和序列化,FastAPI 提供了高效的数据处理能力,确保 API 接收和返回的数据符合预期。

2. FastAPI 基本用法

安装依赖:

pip3 install fastapi
pip3 install "uvicorn[standard]"

简单的 FastAPI 应用程序示例:

from fastapi import FastAPI
from pydantic import BaseModel

# 创建 FastAPI 实例
app = FastAPI()

# 定义数据模型
class Item(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None

# 定义路由
@app.get("/")
def read_root():
    return {"Hello": "World"}

@app.post("/items/")
def create_item(item: Item):
    return {"item": item}

启动 FastAPI 应用:

# 使用 Uvicorn 或其他 ASGI 服务器来启动
$ uvicorn main:app --reload

INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [28720]
INFO:     Started server process [28722]
INFO:     Waiting for application startup.
INFO:     Application startup complete.

其中,main 是 Python 文件名(不包括 .py 后缀),app 是 FastAPI 实例的名称,--reload 使得代码变动时自动重载服务器。

3. 请求 FastAPI 服务器

这里写一个简单的FastAPI 应用脚本:

# main.py
from fastapi import FastAPI

app = FastAPI()

@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)

然后,启动这个 FastAPI 应用:

uvicorn main:app --reload

在 FastAPI 应用运行的情况下,可以用 requests 库从另一个 Python 脚本发送请求:

requests 是一个 Python 库,用于简化 HTTP 请求的处理,能够以简单的方式发送 HTTP 请求,并处理响应,可以用 pip 安装。

# 发送 GET 请求
import requests

# 假设 FastAPI 应用运行在 http://localhost:8000
url = "http://localhost:8000/items/42?q=test"
response = requests.get(url)

print("Status Code:", response.status_code) # 返回 HTTP 响应的状态码(例如 200 表示成功)
print("Response JSON:", response.json()) # 返回响应内容
# 如果FastAPI应用有一个POST端点,发送 POST 请求
import requests

url = "http://localhost:8000/items"
data = {"item_id": 42, "q": "test"}
response = requests.post(url, json=data)

print("Status Code:", response.status_code)
print("Response JSON:", response.json()) # 以 JSON 格式获取响应内容
# 如果需要添加请求头或者查询参数
import requests

# 添加请求头
# headers:一个字典,包含要添加的请求头信息
headers = {'Authorization': 'Bearer YOUR_TOKEN'}
response = requests.get("http://localhost:8000/items/42", headers=headers)

print("Status Code:", response.status_code)
print("Response JSON:", response.json())

# 添加查询参数
# params:一个字典,包含 URL 查询参数
params = {'q': 'test'}
response = requests.get("http://localhost:8000/items/42", params=params)

print("Status Code:", response.status_code)
print("Response JSON:", response.json())
# 使用 requests 时,可能会遇到各种异常,如网络错误、超时等,可以用异常处理来处理这些错误
import requests
from requests.exceptions import HTTPError, Timeout

try:
    response = requests.get("http://localhost:8000/items/42", timeout=5)
    response.raise_for_status()  # 如果状态码是 4xx 或 5xx,抛出 HTTPError
except HTTPError as http_err:
    print(f'HTTP error occurred: {http_err}')
except Timeout as timeout_err:
    #  timeout:设置请求的超时时间,防止请求长时间阻塞
    print(f'Timeout error occurred: {timeout_err}') #
except Exception as err:
    print(f'Other error occurred: {err}')
else:
    print('Success!')
    print("Response JSON:", response.json())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值