我有一个使用Python FastAPI实现的服务器,我通过POST请求获得了sending large data (~2 GB) to the server.一旦请求在服务器端被处理,我想向客户端返回一个201 "Created"响应.

一个201响应应该有一个主体,所以我不应该发送一个带有空主体的响应(https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST),但同时,I don't want to send back the newly created resource as it is so large,客户端不需要在POST请求点的资源.或者,我会try 用204 "No Content"来响应,但它似乎不是成功的POST请求的推荐响应.

假设发送的响应为201,则为what should be the body of the response to avoid large data sent back for no reason?

以下是描述我的问题的最小代码,当前返回201响应,但正文为空:

from fastapi import FastAPI, HTTPException, Response, status

app = FastAPI()


@app.post("/data", status_code=status.HTTP_201_CREATED)
async def send_data(data, response: Response):
    try:
        # process data on the server
        # ...
        pass
    except Exception as e:
        raise HTTPException(status.HTTP_500_INTERNAL_SERVER_ERROR, e)
    return response  # response with empty body

推荐答案

按照MDN documentation

201 created

HTTP 201 created成功状态响应代码指示请求已成功并导致创建 一个资源.新资源or a description and link to the new resource在响应被发送回之前被有效地创建, 新创建的项目在消息主体中返回, 位于请求的URL或值中的URL Location header

此状态代码的常见用例是 POST个请求.

同样,如RFC 9110: HTTP Semantics所述

201 (Created)状态码表示请求已被 已完成并导致创建一个或多个新资源. 请求创建的主要资源是identified byLocation响应中的报头字段,或者,如果否,则Location header字段由目标URI接收.

201 response content typically describes and links to the resource(s) created号.中发送的任何验证器字段(Section 8.8 响应传递新表示的当前验证器 由请求创建.注意,PUT方法(Section 9.3.4)具有 可能会阻止发送此类验证器的其他要求.

因此,简而言之,我们将创建的资源的not really have to return the actual data返回给客户端,而不是a description and/or a link to the new resource in the 100 header would be sufficient.响应中的描述可以包括服务器接收的数据的长度,从而通知用户上传确实成功.

Python相关问答推荐

Pandas 第二小值有条件

将整组数组拆分为最小值与最大值之和的子数组

rame中不兼容的d类型

更改键盘按钮进入'

海上重叠直方图

如何在Polars中从列表中的所有 struct 中 Select 字段?

字符串合并语法在哪里记录

Pandas Data Wrangling/Dataframe Assignment

判断solve_ivp中的事件

在Docker容器(Alpine)上运行的Python应用程序中读取. accdb数据库

Python日志(log)模块如何在将消息发送到父日志(log)记录器之前向消息添加类实例变量

一个telegram 机器人应该发送一个测验如何做?""

如何在Django模板中显示串行化器错误

read_csv分隔符正在创建无关的空列

python3中np. divide(x,y)和x/y有什么区别?'

我如何处理超类和子类的情况

对于数组中的所有元素,Pandas SELECT行都具有值

来自任务调度程序的作为系统的Python文件

对当前的鼹鼠进行编码,并且我的按键获得了注册

Python键盘模块不会立即检测到按键