fastapi之响应状态码

164 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第20天,点击查看活动详情

HTTP状态码

  • HTTP状态码又叫响应状态码,它是HTTP协议的一部分,用来表示具体含义的响应信息。

  • HTTP响应状态码本质上就是一个数字,不过根据响应的情况分成了四大系列:

    • 1xx:1开头的三位数字,表示普通信息,这里响应没有响应体数据。
    • 2xx:2开头的三位数字,表示请求成功的响应信息,比如常用的200 OK; 201表示Created等等。
    • 3xx:3开头的三位数字,表示重定向。
    • 4xx:4开头的三位数字,表示客户端请求失败,比如404表示请求的数据/资源不存在。
    • 5xx:5开头的三位数字,表示服务端出错了。

响应状态码

  • 和响应模型一样,我们也可以在路径操作装饰器中通过status_code设置这个路径函数的默认响应状态码
 from fastapi import FastAPI
 ​
 app = FastAPI()
 ​
 ​
 @app.post("/items/", status_code=201)   # 默认该接口响应状态码是201
 async def create_item(name: str):
     return {"name": name}
  • 设置status_code会在两个地方有反馈:

    • 给客户端的响应状态码是201
    • 在openapi文档上有对应的显示效果。

注意,status_code 是「装饰器」方法(getpost 等)的一个参数。不像之前的所有参数和请求体,它不属于路径操作函数

状态码常量

  • 直接使用状态码数字有时可能表意不明显,此时可以使用字面意思清楚的常量。
  • fastapi提供了这个HTTP状态码常量,本质上之直接使用starlette的状态码常量。
  • 这样的好处有两点:字面意思清晰;编辑器有代码补全提示。
 from fastapi import FastAPI, status
 ​
 app = FastAPI()
 ​
 ​
 @app.post("/items/", status_code=status.HTTP_201_CREATED)
 async def create_item(name: str):
     return {"name": name}

你也可以使用 from starlette import status

为了给你(即开发者)提供方便,FastAPI 提供了与 starlette.status 完全相同的 fastapi.status。但它直接来自于 Starlette。