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

时间:2017-09-29 12:36:40

标签: python flask

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

让我们说为了参数我使用Flask + Python处理GET请求,该请求需要一个需要为整数的参数,但客户端将其作为一个不能解释为整数的值提供。因此,显然,当我尝试将该参数转换为整数时,将抛出异常。

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

第一种选择是两者中的更容易。不利的一面是,由此产生的错误并不清楚这里的错误。系统管理员可能会查看日志,而不了解Python或Flask的任何内容可能会导致代码中存在错误。但是,如果我返回400,那么问题可能会在客户端结束时变得更加清晰。

大多数人在这些情况下做了什么?

3 个答案:

答案 0 :(得分:2)

HTTP 400对我来说似乎很好。

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

没有什么可以阻止你在400响应中添加一个主体来识别带有无效值的参数(或者问题是什么)。使用客户接受的任何表示,例如如果它是API,您可能会返回JSON响应:

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

状态代码400意味着你告诉客户“嘿,你搞砸了,不要再尝试了”。状态代码为500意味着您告诉客户“嘿,我已经搞砸了,以后我可以在我修复该错误后再试一次”。

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