0

使用最新版本的 Flask 和 Flask-RESTful,我定义了一些非常基本的路由:

def build_uri_rules(uri_map):
    for cls, uri in uri_map.iteritems():
        api.add_resource(cls, uri)


uris = {
    SampleController: '/samples/<string:hash_or_id>',
    SampleFamilyController: '/samples/<string:hash_or_id>/family',
}

build_uri_rules(uris)

这适用于“正确”请求的 uris,但是如果 /samples/ 端点在没有参数的情况下被命中,或者 sample*family 端点被空样本 id 命中怎么办?目前,这会导致 404 错误。这工作得很好,但我相信这里正确的做法是抛出 400 错误,因为他们找到了正确的 URL,但他们的数据结构不正确。有没有办法可以强制这种行为?

作为旁注:查看 Werkzeug 文档,我看到 werkzeug.routing 允许某些 url 参数的最小长度,但我也看到它的最小值为 1。诚然,我没有寻找为什么这是情况,但这会是合适的树吗?还是我应该简单地创建一个全局 404 处理程序来检查参数的长度并从那里引发适当的错误?

谢谢!

编辑:为了代码的正确性。

4

1 回答 1

1

我会说点击/samples/or /samples/family(或什至/samples//family应该导致 404,因为该端点没有任何内容。

但是,如果您不想这样做,最简单的处理方法是为just /samples/创建一个 404 处理程序,并/samples/family返回一个注释,其中包含有关您的 API 的使用者最有可能做错什么的更多信息。

uris = {
    Explanitory400Controller: '/samples/',
    SampleController: '/samples/<string:hash_or_id>',
    Explanitory400Controller: '/samples/family',
    SampleFamilyController: '/samples/<string:hash_or_id>/family',
}
于 2013-05-23T02:17:53.437 回答