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

时间:2018-11-30 14:08:15

标签: python routes falconframework

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

我的google search导致rpage的帮助不大-Flask应用here解决了一个类似的问题,但是没有页面谈论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 

1 个答案:

答案 0 :(得分:1)

下面的代码将返回一个带有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存储库,用于对Falcon应用程序进行版本控制,从中您可以了解分离URL及其相对资源的想法。 Github Link

您可以拥有list of routes并通过扩展API class

添加它们

URL和资源如下:

from v1.v1_app import things

urls = [
    ('/things', things),
]