【问题标题】:perl Catalyst REST action not workingperl Catalyst REST 操作不起作用
【发布时间】:2018-03-28 18:29:29
【问题描述】:

所以我正在编写一个简单的 API 服务器,显然 C::C::R 是正确的答案。我有一个动作可以让“事物列表”正常工作:

package stuff::Controller::Thingy;
use Moose;
use namespace::autoclean;
BEGIN { extends 'Catalyst::Controller::REST'; }
__PACKAGE__->config(namespace => '');

sub thingy : Local : ActionClass('REST') { }

sub thingy_GET :Args(0) :Path("/thingy") {
}

这很好用。还有 HashrefInflator 和 JSON 视图。使代码非常小。

但是!如果我添加第二个动作来获得一个东西,我原来的动作就会停止工作:

sub thingy_GET :Args(1) :Path("/thingy") {
    my ( $self, $c, $thingy_id ) = @_;
}

当 plackup 开始时,我得到:

[debug] Loaded Path actions:
    .-------------------------------------+--------------------------------------.
| Path                                | Private                              |
+-------------------------------------+--------------------------------------+
| /...                                | /default                             |
| /bar/thingy/...                      | /bar/thingy                         |
| /thingy/*                            | /thingy_GET                           |
| /thingy/...                          | /thingy                               |
'-------------------------------------+--------------------------------------'

如果我打电话给/thingy,我会得到:

{
    "data": []
}

想法?

【问题讨论】:

  • 如果我没记错的话,您需要在sub thingy 上添加:Args(n)sub thingy_GET 不能有参数。这不是一个动作,它只是一个潜艇。因此,如果您想要几种不同的行为,您必须实现sub thingysub thingies,它们都可以有:Path('/thingy') 但不同的:Args(n)。这是我认为是正确的,所以我还没有写出来。我知道如果你想链接其中的几个,你链接sub thingy : ActionClass('REST')位,而不是thingy_GET。此处的行为方式应相同。

标签: rest perl action catalyst


【解决方案1】:

您的第二个 thingy_GET 函数需要不同的函数名称。也许thingy_GET_listthingy_GET_resource,或者任何你想要的。

【讨论】:

    【解决方案2】:

    Subs 不能有相同的名称,不同的属性是不够的,Sub::Multi 在这里没有帮助。

    改用__PACKAGE__->config(action => { … 来配置操作。

    【讨论】:

      【解决方案3】:

      好的,这(相对)简单。不要将潜艇称为同一件事。我的屏幕太小,我错过了:

      在 lib/foo/Controller/Thingy.pm 第 40 行重新定义了子程序 thing_GET。

      然而,就我阅读的文档而言,它们没有提及。

      幸运的是#catalyst 对我大喊大叫。然后我向上滚动了 platup 输出。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-31
        • 2012-08-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多