【实战演练】使用FastAPI构建API服务
发布时间: 2024-06-26 07:25:54 阅读量: 83 订阅数: 94
![【实战演练】使用FastAPI构建API服务](https://images.datacamp.com/image/upload/v1664210695/A_simple_API_architecture_design_f98bfad9ce.png)
# 2.1.1 路由的定义和使用
路由是 FastAPI 中用于定义请求路径和处理函数的机制。它允许开发人员将特定的 HTTP 方法(例如 GET、POST、PUT、DELETE)映射到特定的视图函数。
```python
from fastapi import FastAPI, Request
app = FastAPI()
@app.get("/")
async def root(request: Request):
return {"message": "Hello, World!"}
```
在上面的代码中,我们定义了一个根路由,它使用 `@app.get("/")` 装饰器将 GET 请求映射到根路径 `/`。当客户端向根路径发送 GET 请求时,`root` 视图函数将被调用,并返回一个 JSON 响应。
路由可以定义在应用程序的任何位置,并且可以具有任意数量的参数。参数可以是路径参数、查询参数或正文参数。
# 2. FastAPI的基本使用
### 2.1 路由和视图函数
#### 2.1.1 路由的定义和使用
在FastAPI中,路由用于将HTTP请求映射到相应的视图函数。路由的定义使用`@app.route()`装饰器,其中`app`是FastAPI应用程序实例。装饰器参数指定HTTP方法(例如`GET`、`POST`)和路由路径。
```python
from fastapi import FastAPI, Request
app = FastAPI()
@app.get("/")
async def root(request: Request):
return {"message": "Hello, World!"}
```
在这个例子中,`@app.get("/")`装饰器定义了一个GET路由,当客户端向根路径(`"/"`)发送GET请求时,它将调用`root`视图函数。
#### 2.1.2 视图函数的编写和响应返回
视图函数是处理HTTP请求并返回响应的Python函数。它们通常被装饰为FastAPI路由处理程序。视图函数的参数可以包括HTTP请求对象、路径参数、查询参数等。
`root`视图函数返回一个字典,该字典将作为JSON响应发送回客户端。FastAPI会自动将字典序列化为JSON格式。
### 2.2 数据验证和错误处理
#### 2.2.1 数据验证的原理和使用
FastAPI提供了一个数据验证框架,用于验证HTTP请求中的数据。验证器可以定义为Python类或函数,并使用`@app.validator()`装饰器注册到特定的数据类型或字段上。
```python
from fastapi import FastAPI, Body, Request
app = FastAPI()
class User:
name: str
age: int
@app.post("/users")
async def create_user(user: User = Body(...)):
return user
```
在这个例子中,`User`类定义了两个字段:`name`和`age`。当客户端向`/users`路径发送POST请求时,`create_user`视图函数将验证请求体中的数据是否符合`User`模型。如果验证失败,FastAPI将返回一个422错误响应。
#### 2.2.2 错误处理的机制和常见错误
FastAPI提供了一个错误处理框架,用于处理视图函数中发生的异常。错误处理程序可以定义为Python函数,并使用`@app.exception_handler()`装饰器注册到特定的异常类型上。
```python
from fastapi import FastAPI, Request, HTTPException
app = FastAPI()
@app.exception_handler(HTTPException)
async def http_exception_handler(request: Request, exc: HTTPException):
return {"error": str(exc)}
```
在这个例子中,`http_exception_handler`错误处理程序将处理所有HTTPException异常。它将返回一个字典,其中包含异常消息。
### 2.3 依赖注入和中间件
#### 2.3.1 依赖注入的原理和实现
依赖注入是一种设计模式,它允许在不直接创建实例的情况下获取对象。在FastAPI中,依赖项可以通过`@app.dependency()`装饰器定义,并注入到视图函数或其他依赖项中。
```python
from fastapi import FastAPI, Depends, Request
app = FastAPI()
async def get_current_user(request: Request):
# 从数据库或其他来源获取当前用户
return {"id": 1, "name": "John Doe"}
@app.get("/users/me")
async def get_current_user_data(current_user: dict = Depends(get_current_user)):
return current_user
```
在这个例子中,`get
0
0