【问题标题】:Generic endpoint for REST resources in Perl CatalystPerl Catalyst 中 REST 资源的通用端点
【发布时间】:2012-08-01 17:52:11
【问题描述】:

我定义了几个 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 处理)。

谢谢!

【问题讨论】:

    标签: perl rest catalyst


    【解决方案1】:

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

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

    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 ]
        });
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多