使用最新版本的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 /端点,或者使用空样本ID命中样本*族端点怎么办?目前,这会导致404错误。这很好用,但我相信这里正确的做法是抛出一个400错误,因为他们发现了一个正确的URL,但他们的数据结构不正确。有没有办法可以强迫这种行为?
作为旁注: 通过Werkzeug文档,我看到werkzeug.routing允许某些url参数的最小长度,但我也看到它至少有1个。不可否认,我不知道为什么会这样,但是这个是正确的树吠?或者我应该简单地创建一个全局404处理程序来检查参数的长度并从那里引发正确的错误?
谢谢!
已编辑:代码正确无误。
答案 0 :(得分:1)
我会说,点击/samples/
或/samples/family
(或甚至/samples//family
)应该会产生404,因为该端点没有任何内容。
但是,如果您不想这样做,处理它的最简单方法是为 /samples/
和/samples/family
创建一个404处理程序,它返回一个注释有关API的消费者最有可能出错的更多信息。
uris = {
Explanitory400Controller: '/samples/',
SampleController: '/samples/<string:hash_or_id>',
Explanitory400Controller: '/samples/family',
SampleFamilyController: '/samples/<string:hash_or_id>/family',
}