2

我定义了几个 REST 资源端点,例如/user/group/event,作为单独的控制器。它们都继承自根控制器 ( App::Web::Controller::Root)。是否可以在能够识别资源类型的根控制器中为所有这些资源创建一个通用端点?

我的主要用例是.../list,我想对其进行一般性定义,它将识别其父资源并返回一个资源实体数组。例如,

/user/list      # Array list of user entities
/group/list     # Array list of group entities
/event/list     # Array list of event entities

我可以轻松地创建一个反转资源的动作(例如,/list/event自然地由 处理sub list_GET)。

谢谢!

4

1 回答 1

0

我用来识别资源的一种方法是让每个资源控制器在存储中定义其资源,然后让通用操作引用该存储值。

例如,在每个资源控制器中:

package App::Web::Controller::User;

sub begin :Auto {
    my ($self, $c) = @_;
    $c->stash(resource => 'User');
}

然后,在根控制器中:

package App::Web::Controller::Root;

sub list :Path('list') :ActionClass('REST') {}

sub list_GET {
    my ($self, $c) = @_;
    my $resource = $c->stash->{resource};
    return $self->status_ok($c, entity => {
        list => [ $c->model('App::' . $resource)->find->all ]
    });
}

我对此不太满意,因为它不够通用,因为它要求每个控制器都定义其资源。

于 2012-08-03T17:42:56.423 回答