我需要在使用Flask-Rebar
构建的restapi中验证Flask
规则。我试过以下方法:
@registry.handles(
rule='/horses/<int:horse_id>',
method='GET',
marshal_schema=GetHorseByIdSchema()
)
def getHorseById(horse_id):
return {"horse_id": horse_id}
这是使用指定的<int:my_var>
语法here。当输入一个整数值作为horse_id
时,一切正常。问题来自于输入一个非整数值,即a
;当我期望一个400 Bad Request
时,这会抛出一个404 Not Found
状态代码。在
我不认为我可以使用任何编组模式来实现这一点,所以我不确定下一步要做什么,任何帮助都将不胜感激。在
谢谢, 亚当
这就是Flask/Werkzeug的行为方式,因此它有点超出了Flask Rebar的控制范围。也就是说,下面还将为
/horses/a
返回404:下面是一些解决方法:
(1)自定义URL转换器:http://flask.pocoo.org/docs/1.0/api/#flask.Flask.url_map
这看起来像:
^{pr2}$但是,路由是在应用程序上下文之外完成的,所以我们不能使用烧瓶.jsonify也不能通过烧瓶Rebar的错误来引发漂亮的JSON错误。在
(2)检查handler函数内的类型
这有点不太优雅,但很管用。 Swagger文档将默认为horse_id参数的字符串类型,但我们也可以解决这个问题:
^{4}$(3)接受烧瓶/Werkzeug行为
根据你需要400而不是404的程度,最实际的做法可能是什么都不做,只是屈服于Flask/Werkzeug是如何做到的。在
相关问题 更多 >
编程相关推荐