使用Flask+Python处理无效GET/POST请求参数的最佳方法?

使用Flask+Python处理无效GET/POST请求参数的最佳方法?,python,flask,Python,Flask,在Flask+Python中,处理GET或POST请求传入的无效参数的最佳方法是什么 假设为了参数起见,我使用Flask+Python处理一个GET请求,该请求需要一个需要为整数的参数,但客户端将其作为一个不能解释为整数的值提供。因此,很明显,当我尝试将该参数转换为整数时,将引发异常 我的问题是,我是否应该让异常传播,从而让Flask执行默认操作,将HTTP状态代码500返回给客户端?或者我应该处理它并将适当的IMO状态代码400返回给客户 第一个选项是两个选项中比较容易的一个。缺点是,由此产生

在Flask+Python中,处理GET或POST请求传入的无效参数的最佳方法是什么

假设为了参数起见,我使用Flask+Python处理一个GET请求,该请求需要一个需要为整数的参数,但客户端将其作为一个不能解释为整数的值提供。因此,很明显,当我尝试将该参数转换为整数时,将引发异常

我的问题是,我是否应该让异常传播,从而让Flask执行默认操作,将HTTP状态代码500返回给客户端?或者我应该处理它并将适当的IMO状态代码400返回给客户

第一个选项是两个选项中比较容易的一个。缺点是,由此产生的错误不清楚是谁的错。系统管理员可能会查看日志,但对Python或Flask一无所知,可能会认为代码中存在错误。然而,如果我返回一个400,那么问题可能出在客户端就更清楚了


大多数人在这种情况下会做什么?

HTTP 400对我来说似乎不错

在这种情况下返回500是错误的。它不向客户机提供任何信息,他们会认为问题出在服务器上,而不是客户机上

没有什么可以阻止您向400响应添加一个主体,该主体用无效值或任何问题来标识参数。使用客户端接受的任何表示形式,例如,如果是API,则可能返回JSON响应:

{"error": "parameter age: positive integer required"}

HTTP 400对我来说似乎很好

在这种情况下返回500是错误的。它不向客户机提供任何信息,他们会认为问题出在服务器上,而不是客户机上

没有什么可以阻止您向400响应添加一个主体,该主体用无效值或任何问题来标识参数。使用客户端接受的任何表示形式,例如,如果是API,则可能返回JSON响应:

{"error": "parameter age: positive integer required"}

如果您查看大多数RESTAPI,如果用户发送的请求参数的类型与预期的不同,它们将向客户端返回400条错误消息和相应的错误消息。
因此,您应该选择第二个选项。

如果查看大多数REST API,如果用户发送的请求参数的类型与预期的不同,它们将向客户端返回400条和相应的错误消息。
所以,你应该选择第二个选项。

状态代码为400意味着你告诉客户,嘿,你搞砸了,不要再尝试了。状态代码为500意味着你告诉客户,嘿,我搞砸了,等我修复了那个bug后,请随时再试一次


在您的情况下,您应该返回400,因为出错的一方是客户。

状态代码为400意味着您告诉客户嘿,您搞糟了,不要再尝试了。状态代码为500意味着你告诉客户,嘿,我搞砸了,等我修复了那个bug后,请随时再试一次


在您的情况下,您应该返回一个400,因为出错的一方是客户机。

来自Python之禅:错误永远不应该悄无声息地传递。除非显式静默。来自Python的禅宗:错误永远不会静默地传递。除非明确沉默。