【问题标题】:Best way to handle invalid GET/POST request parameters with Flask+Python?使用 Flask+Python 处理无效 GET/POST 请求参数的最佳方法?
【发布时间】:2017-09-29 12:36:40
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 来自 Python 之禅:“错误永远不应该静默传递。除非明确地静默。”

标签: python flask


【解决方案1】:

HTTP 400 对我来说似乎不错。

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

没有什么可以阻止您向 400 响应添加正文,以标识具有无效值的参数(或任何问题)。使用客户接受的任何表示,例如如果是 API,您可能会返回 JSON 响应:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      状态码 400 表示您告诉客户“嘿,您搞砸了,不要再试了”。状态码 500 表示您告诉客户“嘿,我搞砸了,等我修复了那个错误后,请随时重试”。

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

      【讨论】:

        猜你喜欢
        • 2017-09-12
        • 2017-05-22
        • 2017-09-10
        • 2017-04-20
        • 1970-01-01
        • 2014-08-30
        • 1970-01-01
        • 2020-09-30
        • 1970-01-01
        相关资源
        最近更新 更多