获取Falcon应用程序中定义的所有路线的列表



我在Falcon应用程序中有RESTful路由,定义如下简化代码。我的问题是如何获得所有路由及其映射处理程序的列表?

我在谷歌上的搜索结果几乎没有帮助——Flask应用程序在这里解决了一个类似的问题,但没有关于Falcon的页面。

api = falcon.API(middleware=middleware)
api.add_route('/v1/model_names1', SomeHandlerMappingResource1())
api.add_route('/v1/model_names2', SomeHandlerMappingResource2())
class SomeHandlerMappingResource1:
def on_get(self, req, resp):
pass # some biz logic of GET method
def on_post(self, req, resp):
pass # some biz logic of POST method
# etc.
class SomeHandlerMappingResource2:
pass # similar to handler resource 1 above 

下面的代码将返回一个元组列表,其中包含URL和它们各自的资源:

def get_all_routes(api):
routes_list = []
def get_children(node):
if len(node.children):
for child_node in node.children:
get_children(child_node)
else:
routes_list.append((node.uri_template, node.resource))
[get_children(node) for node in api._router._roots]
return routes_list

输出

[
('/v1/things', <v1.v1_app.ThingsResource object at 0x7f555186de10>), 
('/v2/things', <v2.v2_app.ThingsResource object at 0x7f5551871470>), 
('/v3/things/{name}', <v3.v3_app.ThingsResource object at 0x7f5551871ba8>)
]

我已经阅读了这个包并派生了它,但是,我不知道有任何内置方法会返回这个结果。


如果您不喜欢上面的函数,您可以通过扩展API类来实现类似的功能。

我制作了一个Github repo,用于对Falcon应用程序进行版本控制,从中您可以了解如何分离URL及其相关资源。Github链接

你可以有一个路线列表,并通过扩展API类添加它们

URL和资源将类似于:

from v1.v1_app import things
urls = [
('/things', things),
]

相关内容

  • 没有找到相关文章

最新更新