你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益:
- 了解大厂经验
- 拥有和大厂相匹配的技术等
希望看什么,评论或者私信告诉我!
文章目录
- 一、前言
- 二、FastAPI
- 2.1 FastAPI安装
- 2.2 FastAPI基本使用
- 2.2.1 get方法
- 2.2.2 put方法
- 2.2.3 中间件 app.middleware
- 2.2.4 异常处理 app.exception\_handle
- 三、总结
- 四、参考
一、前言
最近在做公司内部的RAG,也就是基于大模型的检索增强,专门针对公司内部的私有化数据。在这个过程中,使用了 FastAPI 来做整个 服务端 的开发。接下来我们就整体了解一下 FastAPI,争取做到基本入门
二、FastAPI
FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 3.8+ 并基于标准的 Python 类型提示。
关键特性:
-
快速:可与 NodeJS 和 Go 并肩的极高性能(归功于 Starlette 和 Pydantic)。最快的 Python web 框架之一。
-
高效编码:提高功能开发速度约 200% 至 300%。*
-
更少 bug:减少约 40% 的人为(开发者)导致错误。*
-
智能:极佳的编辑器支持。处处皆可自动补全,减少调试时间。
-
简单:设计的易于使用和学习,阅读文档的时间更短。
-
简短:使代码重复最小化。通过不同的参数声明实现丰富功能。bug 更少。
-
健壮:生产可用级别的代码。还有自动生成的交互式文档。
-
标准化:基于(并完全兼容)API 的相关开放标准:OpenAPI (以前被称为 Swagger) 和 JSON Schema。
2.1 FastAPI安装
pip install fastapi
pip install uvicorn
Uvicorn 为 ASGI 服务器,其主要为了解决传统的同步服务器在处理大量并发请求而性能降低的问题
2.2 FastAPI基本使用
2.2.1 get方法
from typing import Unionfrom fastapi import FastAPIapp = FastAPI()@app.get("/")def read_root():return {"Hello": "World"}@app.get("/items/{item_id}")def read_item(item_id: int, q: Union[str, None] = None):return {"item_id": item_id, "q": q}
使用浏览器访问 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
。
2.2.2 put方法
from typing import Unionfrom fastapi import FastAPIapp = FastAPI()@app.put("/items/{item_id}")def read_item(item_id: int, q: Union[str, None] = None):return {"item_id": item_id, "q": q}
2.2.3 中间件 app.middleware
from fastapi import FastAPI, Requestapp = FastAPI()@app.middleware("http")async def log_requests(request: Request, call_next):print(f"Received request: {request.method} {request.url}")response =await call_next(request)print(f"Sent response: {response.status_code}")return response@app.get("/")def root():return {"message": "Hello, World!"}
在 FastAPI 中,app.middleware
是一个装饰器,用于注册中间件函数。中间件函数可以在请求处理函数执行前或执行后对请求和响应进行处理,例如添加请求头、记录日志、验证身份等。
其中,middleware_function
是中间件函数的名称,"http"
是中间件的类型,表示它是一个 HTTP 请求中间件。request
是请求对象,call_next
是一个回调函数,用于调用下一个中间件或请求处理函数。在中间件函数中,我们可以在调用 call_next(request)
前后对请求和响应进行处理。
在这个示例中,我们定义了一个名为 log_requests
的中间件函数,它会在每个请求处理前和处理后打印请求和响应的信息。然后我们使用 app.middleware
装饰器将其注册到应用程序中。最后,我们定义了一个 GET 请求处理函数 root
,它返回一个 JSON 格式的响应。
2.2.4 异常处理 app.exception_handle
from fastapi import FastAPI, HTTPExceptionapp = FastAPI()@app.exception_handler(ValueError)
async def value_error_handler(request, exc):raise HTTPException(status_code=400, detail=str(exc))@app.get("/")
async def root():raise ValueError("Invalid query parameter")
@app.exception_handler
是 FastAPI 框架中的一个装饰器,用于处理应用程序中未处理的异常。当应用程序抛出未处理的异常时,FastAPI 将自动调用由 @app.exception_handler
装饰的函数,并将异常作为参数传递给该函数。这使得开发人员可以在应用程序中集中处理异常,而不必在每个路由处理程序中编写重复的异常处理代码。
在上面的代码中,当 root
路由处理程序抛出 ValueError
异常时,FastAPI 将自动调用 value_error_handler
函数,并将异常作为参数传递给该函数。value_error_handler
函数将异常转换为 HTTPException
并将其重新引发,从而返回一个带有 400 状态码和异常详细信息的 HTTP 响应。
三、总结
FastAPI 是一个现代、快速的 web 框架,使用 Python 3.8+ 并基于标准的 Python 类型提示。它具有极高的性能、高效的编码、更少的 bug、智能的编辑器支持、简单易学的设计、健壮的生产可用级别代码以及基于开放标准的标准化特性。文章详细介绍了 FastAPI 的安装、基本使用、HTTP 方法、中间件和异常处理。
四、参考
fastapi