Python Connexion — Control "Type" 键入 400 响应错误

Python Connexion — Control "Type" Key in 400 Response Errors

我正在使用 connexion,一个用于 REST API 的 python 库,具有 swagger 定义。它对实际请求工作正常,但是当出现错误情况时,例如验证失败,它 returns 响应如下:

{
  "type": "about:blank",
  "title": "Bad Request",
  "status": 400,
  "detail": "None is not of type 'string'"
} 

标题、状态和详细信息都很好,也很有意义,但是我有没有办法控制 type 键的值,以便我可以提供更多有用的信息,而不是简单地让 about:blank 在那里?

在幕后,connexion 似乎使用了 requests 和 flask,所以也许我可以从中利用一些东西?

我从未使用过底层框架,但通过快速扫描,该模块公开了 Flask 应用程序构造函数。这样,您就可以使用 swagger 文件定义一个新应用程序

app = connexion.App(__name__, specification_dir='swagger/')

然后添加自定义错误处理程序。例如对于 400 错误你可以做

from flask import jsonify

@app.errorhandler(400)
def page_not_found(e):
    custom_data = {
        'type': 'Advanced type'
        # etc
    }
    return jsonify(custom_data)

阅读有关 Flask 错误处理程序的更多信息 here

我也通过将 null 归因于某些模型 属性 来解决这个问题。如果您不想创建错误处理程序,只需添加标签 x-nullable: true 在 属性 中进行验证。