perl Catalyst REST操作无法正常工作

时间:2018-03-26 14:22:09

标签: 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 : ActionClass('REST') { }

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

这很有效。还有yay 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": []
}

想法?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

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

然而,就我所读到的那些文档而言,没有提及。

幸运的是,#催化剂对我大吼大叫。然后我向上滚动了plackup输出。