回顾
还记得我们之前编写了一个register接口吗?可那只是个空壳,直接返回了注册成功的响应体。
接下来我们要做的事情是规范接口,大家可能经常在服务中见到这种的接口返回:
{ "code": 200, "msg": "xxxxx", "data": { } }
所以,我们尽可能的贴近规范。接下来我们要做的是定制接口的Response返回。
好处
定制接口的好处有以下几点:
- 灵活性:使用自定义 Response 可以更好地控制 HTTP Response 的内容,格式和状态码。这样可以根据具体的需求来定制 Response,例如为 API 增加新的响应头、修改响应内容或者自定义错误页面等。
- 可读性:使用自定义 Response 可以使代码更加易读和易于维护。由于 FastAPI 的 Response 类提供了许多有用的方法和属性,可以使代码更加清晰和易于理解。
- 可测试性:自定义 Response 也可以使测试更加容易。使用自定义 Response 可以模拟 HTTP 响应,从而更容易测试 API 的输出。
设计
在我的想法中,我准备先编写一个继承了JSONResponse的返回来定制化返回json类型,以后我们和前端的交互,除了一些文件交互之类的,都会优先选择json来进行交互。当然,后面肯定也是会有formdata等其它类型的定制化Response。
编码
新增文件abandon-server/src/app/customized/customized_response.py
import time
from fastapi.responses import JSONResponse # 导入 FastAPI 的 JSONResponse 响应类
from src.app.custom.custom_code import CustomCode # 导入自定义的响应码类
from src.app.custom.custom_msg import CustomMessage # 导入自定义的响应信息类
class AbandonJSONResponse(JSONResponse): # 定义一个继承自 JSONResponse 的类,用于自定义响应
@staticmethod # 静态方法装饰器,用于声明 success 方法为类方法,而不是对象方法
def success(data=None, code=CustomCode.SUCCESS, msg=CustomMessage.SUCCESS, timestamp=int(time.time())):
# 定义 success 方法,接受三个参数,data 表示要返回的数据,code 表示响应码,msg 表示响应信息
return JSONResponse(dict(code=code, msg=msg, data=data, timestamp=timestamp))
# 返回一个 JSONResponse 对象,其中包含响应码、响应信息、数据和时间戳
相应的,我们现在可以对我们的register接口进行改造,以下是改造内容:
from fastapi import APIRouter
from src.app.customized.customized_response import AbandonJSONResponse
router = APIRouter(prefix="/auth")
# router注册的函数都会自带/auth,所以url是/auth/register
@router.post("/register")
async def register():
data: dict = [{"token": "xxxxx", "user": {}}]
return AbandonJSONResponse.success(data)
@router.post("/login")
async def login():
return "登陆成功"
现在看起来route路由部分是不是简洁很多!以后我们想要成功返回json,就直接调用AbandonJSONResponse.success就可以了!当然后面还会有更多功能,在路由中只需要直接引用即可!
验证
使用Postman请求127.0.0.1:9923/auth/register地址查看返回即可。