【问题标题】:How can I enumerate all of the endpoints in a Catalyst app?如何枚举 Catalyst 应用程序中的所有端点?
【发布时间】:2019-07-22 22:11:14
【问题描述】:

我有一个大型 Catalyst 应用程序,并且想要获取它支持的所有端点的列表(如果它可以告诉我请求方法是否可以加分)。是否有一些简单的方法可以让 Catalyst 列出它们?

【问题讨论】:

  • 如果您在调试模式下运行应用程序,那不是启动输出的一部分吗?
  • 你说的是自省还是远程探测? (我也不知道答案。)
  • @melpomene 嗯,我通常在启动应用程序时关闭调试,我会看看是否能得到足够的信息。
  • @ikegmai 我主要是试图识别死端点(基于去年的访问日志),但它还有其他应用程序(确保我们对每个端点都有正确的速率限制级别等)。
  • 自省,然后。 melpomene 的建议应该可以解决问题。如果它不够好,您可以调整显示信息的代码以满足您的需求。

标签: perl catalyst


【解决方案1】:

Catalyst 不知道完整的路径集。真正的调度路径是动态解析的,遍历 DispatchType 类,直到对match 的调用做出积极响应。

调试选项一次性枚举控制器允许的所有可能性。如果你想干涉这个,你必须看看Catalyst::Dispatcher::_display_action_tables

这是一种树遍历算法,它遍历它在“/”处找到的每条路线,并遵循$controller->actions 返回的每条后续路线。它不容易阅读,但是您可以想象实现一个 _display_action_tables 版本,它不仅可以打印到表格,还可以执行其他操作。然后在实时应用程序中以 $c 作为参数调用它,看看会发生什么!

【讨论】:

    猜你喜欢
    • 2010-10-22
    • 2013-02-16
    • 2012-06-13
    • 1970-01-01
    • 2015-03-26
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    相关资源
    最近更新 更多