【20.5 python中的FastAPI】

python中的FastAPI

FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,基于 Python 3.6+ 的类型提示。它利用了 Python 3.7+ 的新特性,如类型提示(Type Hints),来自动生成 API 文档(基于 OpenAPI 和 Swagger UI),以及进行参数校验和序列化/反序列化。FastAPI 旨在简化 API 开发,同时保持高性能。

FastAPI 的特点

  • 快速:极高的性能,可与 Node.js 和 Go 媲美。
  • 智能:基于 Python 类型提示自动完成许多工作,如数据验证、文档生成等。
  • 简单:设计简洁,易于学习和使用。
  • 标准:基于 OpenAPI(之前称为 Swagger)和 JSON Schema 的标准。
  • 基于 Pydantic:数据声明使用 Pydantic,提供数据验证和设置管理。
  • 依赖注入:强大的依赖注入系统。
  • 可测试:直接测试你的 API 函数,就像测试普通 Python 函数一样。
  • 可扩展:可以轻松扩展以支持多种数据库和其他后端服务。

示例代码

下面是一个简单的 FastAPI 示例,该示例创建了一个 API,用于获取和添加项目的列表。

首先,你需要安装 FastAPI 和 Uvicorn(一个轻量级的 ASGI 服务器,用于运行 FastAPI 应用程序):

pip install fastapi uvicorn

然后,你可以创建一个 Python 文件(例如 main.py),并编写以下代码:

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

# 定义项目的 Pydantic 模型
class Item(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None

# 获取项目列表的路由
@app.get("/items/")
async def read_items():
    return [{"name": "Foo", "price": 35.4}, {"name": "Bar", "price": 42.2}]

# 创建一个新项目的路由
@app.post("/items/")
async def create_item(item: Item):
    return item

最后,你可以使用 Uvicorn 运行你的 FastAPI 应用程序:

uvicorn main:app --reload

这条命令会启动你的应用程序,并监听在 http://127.0.0.1:8000--reload 参数意味着当代码更改时,服务器会自动重新加载。

现在,你可以使用浏览器或 Postman 等工具来测试你的 API。例如,访问 http://127.0.0.1:8000/items/ 会显示一个项目列表。你也可以通过 POST 请求到 http://127.0.0.1:8000/items/ 并附带 JSON 数据来创建一个新项目。

以上就是一个简单的 FastAPI 示例,展示了如何定义模型、路由和响应。

<think>好的,用户现在说“反了,是python提供可被外部调用的post接口”,看起来他之前的问题可能被误解了,或者他现在需要的是如何用Python创建一个可以被外部调用的POST接口。我需要先回顾之前的对话历史,确保理解上下文。 之前用户遇到了Pydantic的错误,我详细解释了如何解决那个问题。现在用户的新查询是关于Python提供POST接口,可能他之前的问题被错误地理解成Pydantic相关,但实际上他需要的是如何搭建一个POST接口。或者,用户可能在纠正之前的某个误解,比如之前提到的某个问题可能与POST接口有关,但方向搞反了。 现在需要明确用户的需求:如何用Python创建一个POST接口,允许外部调用。这可能涉及到使用Web框架,比如Flask或FastAPI。用户可能是在开发一个后端服务,需要处理POST请求,但之前的问题可能被导向了Pydantic模型配置的问题,而实际上用户的需求是搭建API接口。 接下来,我需要考虑用户可能的背景。他可能对Python有一定的了解,但不太清楚如何设置Web服务。可能他正在尝试构建一个简单的API,遇到了配置问题,或者在处理请求时遇到了错误,比如Pydantic相关的错误,但实际需要的是搭建接口的基础知识。 需要分步骤解释如何用Python创建POST接口,推荐常用的框架,并给出示例代码。同时,可能需要解释基本概念,比如HTTP方法、路由、请求处理等。如果用户之前提到的Pydantic错误是在这个上下文中出现的,可能需要将两者结合起来,比如在使用FastAPI时,如何结合Pydantic模型来验证POST请求的数据。 需要确保回答结构清晰,逐步引导用户完成设置,包括安装框架、编写代码、测试接口。同时,要指出常见的问题和解决方法,比如端口冲突、依赖安装、请求格式等。此外,可能需要区分不同的框架,如Flask和FastAPI,说明各自的优缺点,帮助用户选择适合的工具。 另外,用户提到“反了”,可能意味着之前的回答方向错误,所以需要确认当前的问题确实是如何创建POST接口,而不是之前的Pydantic错误。因此,回答应专注于搭建POST接口的方法,而不是继续讨论Pydantic的问题,除非两者有关联。 最后,需要确保语言简洁,示例代码正确,并指导用户如何测试接口,比如使用curl或Postman发送POST请求,验证接口是否正常工作。同时,提醒用户注意安全性和生产环境的最佳实践,比如使用HTTPS、输入验证、错误处理等。</think>了解!如果目标是 **使用 Python 创建一个可被外部调用的 POST 接口**(例如通过 HTTP 请求访问),通常需要借助 Web 框架(如 Flask、FastAPI 等)。以下是详细步骤和示例: --- ### **1. 选择框架** - **推荐框架**: - **Flask**:轻量级,适合简单接口。 - **FastAPI**:高性能,支持异步,内置数据验证(基于 Pydantic)。 - **Django**:功能全面,适合复杂项目。 这里以 **FastAPI** 为例(集成 Pydantic 更便捷)。 --- ### **2. 安装依赖** ```bash pip install fastapi uvicorn ``` --- ### **3. 编写 POST 接口代码** 创建一个 Python 文件(如 `main.py`): ```python from fastapi import FastAPI from pydantic import BaseModel # 定义请求体模型(使用 Pydantic) class Item(BaseModel): name: str price: float is_offer: bool = None # 可选字段 app = FastAPI() # 定义 POST 接口 @app.post("/items/") async def create_item(item: Item): # 处理接收到的数据 response = { "item_name": item.name, "item_price": item.price, "message": "Offer available!" if item.is_offer else "No offer." } return response ``` --- ### **4. 运行接口服务** ```bash uvicorn main:app --reload ``` - `--reload` 表示开发模式下自动重载代码(生产环境需移除)。 --- ### **5. 测试接口** #### **方法一:使用 `curl`** ```bash curl -X POST "http://localhost:8000/items/" \ -H "Content-Type: application/json" \ -d '{"name":"Book", "price":20.5, "is_offer":true}' ``` #### **方法二:使用浏览器工具(如 Postman)** - **URL**: `POST http://localhost:8000/items/` - **Body(JSON)**: ```json { "name": "Book", "price": 20.5, "is_offer": true } ``` #### **预期响应**: ```json { "item_name": "Book", "item_price": 20.5, "message": "Offer available!" } ``` --- ### **6. 关键点解释** - **路由**:`@app.post("/items/")` 定义了 POST 请求的路径。 - **请求体模型**:通过 Pydantic 的 `BaseModel` 自动验证请求数据格式。 - **数据类型**:FastAPI 会根据模型自动生成文档并验证输入(如 `name` 必须为字符串,`price` 必须为数字)。 --- ### **7. 常见问题** #### **问题1:接口返回 422 错误** - **原因**:请求体数据格式不符合 Pydantic 模型定义。 - **解决**:检查 JSON 字段名称和类型是否与模型匹配。 #### **问题2:端口冲突** - **解决**:修改启动端口: ```bash uvicorn main:app --port 8001 ``` --- ### **8. 扩展:添加安全验证** 若需限制接口访问,可添加 API 密钥验证: ```python from fastapi import FastAPI, Depends, HTTPException from pydantic import BaseModel app = FastAPI() # 模拟验证函数 async def verify_api_key(api_key: str = Header(...)): if api_key != "secret-key": raise HTTPException(status_code=403, detail="Invalid API Key") # 受保护的 POST 接口 @app.post("/secure-items/") async def create_secure_item( item: Item, api_key: str = Depends(verify_api_key) # 依赖注入验证 ): return item ``` --- ### **总结** 通过 FastAPI,只需几行代码即可快速创建安全、高性能的 POST 接口,并自动生成交互式 API 文档(访问 `http://localhost:8000/docs` 查看)。如果需要更轻量级的方案,可替换为 Flask(代码类似,但需手动处理验证)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wang151038606

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值