perl Catalyst REST操作不工作

perl Catalyst REST操作不工作,rest,perl,action,catalyst,Rest,Perl,Action,Catalyst,所以我正在编写一个简单的API服务器,显然C::C::R是正确的答案。我有一个动作可以让“物品清单”正常工作: package stuff::Controller::Thingy; use Moose; use namespace::autoclean; BEGIN { extends 'Catalyst::Controller::REST'; } __PACKAGE__->config(namespace => ''); sub thingy : Local : ActionCl

所以我正在编写一个简单的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": []
}
想法?

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

子例程thing_在lib/foo/Controller/Thingy.pm第40行重新定义

然而,就我所读到的那些文件却没有提及

幸运的是,catalyst对我大喊大叫。我向上滚动plackup输出。

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

子例程thing_在lib/foo/Controller/Thingy.pm第40行重新定义

然而,就我所读到的那些文件却没有提及


幸运的是,catalyst对我大喊大叫。我向上滚动了plackup输出。

您的第二个
thingy\u GET
函数需要一个不同的函数名。可能是
thingy\u-GET\u列表
thingy\u-GET\u资源
,或者您想要的任何东西。

您的第二个
thingy\u-GET
函数需要不同的函数名。可能是
thingy\u GET\u list
thingy\u GET\u resource
,或者您想要的任何东西。

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


使用
\uuuu PACKAGE\uuu->config(action=>{…
来配置操作。

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


使用
\uuuu PACKAGE\uuu->config(action=>{…
来配置操作。

如果我调用正确,您需要使用
:Args(n)
sub thingy
上的
sub thingy\u GET
不能有参数。它不是一个动作,它只是一个sub。因此,如果你想要几个不同的行为,你必须实现一个
sub thingy
和一个
sub thingies
,两者都可以有
:Path('/thingy')
,但不同的
:Args(n)
。这是我认为正确的,所以我现在还没有写出来。我知道如果你想链接其中的几个,你可以链接
子内容:ActionClass('REST')
位,而不是
你得到的
东西。应该以同样的方式在这里工作。如果我没记错,你需要有
:Args(n)
sub thingy
上的
sub thingy\u GET
不能有参数。它不是一个动作,它只是一个sub。因此,如果你想要几个不同的行为,你必须实现一个
sub thingy
和一个
sub thingies
,两者都可以有
:Path('/thingy')
,但不同的
:Args(n)
。这是我认为正确的,所以我现在还没有写出来。我知道如果你想链接其中的几个,你应该链接
子内容:ActionClass('REST')
位,而不是
你得到的
东西。