Как ограничить запрос POST в Catalyst - PullRequest
4 голосов
/ 10 ноября 2011

Я очень новичок в Catalyst и только начинаю создавать веб-приложение для изучения некоторых вещей.

Одна вещь, которую я не понял, - это как ограничить запросы для данного метода контроллера POST (например).

Конкретным примером будет запрос, который инициирует создание объекта в базе данных. Поскольку я хочу, чтобы это приложение было довольно строгим в отношении глаголов REST, это должно быть возможно только через POST.

Я знаю, что могу использовать $ C-> метод проверить метод, использованный в запросе, и вернуть ошибку или что-то в этом роде, если я не найду того, что ищу, но я надеялся, что был ... более чистый способ.

Прямо сейчас у меня есть что-то вроде

sub create :Local :Args(0) {
    ...
}

Обречен ли я проверять метод внутри подпрограммы и делать это для каждого существующего метода?

Пожалуйста, имейте в виду, что я чрезвычайно новичок в Catalyst, так что это может быть глупым вопросом.

Спасибо за помощь!

Ответы [ 3 ]

6 голосов
/ 10 ноября 2011

Вы можете использовать модуль Catalyst :: Controller :: REST .

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

# Answer POST requests to "thing"
sub thing_POST {
   my ( $self, $c ) = @_;

   # Return a 200 OK, with the data in entity
   # serialized in the body
   $self->status_ok(
        $c,
        entity => {
            some => 'data',
            foo  => 'is real bar-y',
        },
   );
}
2 голосов
/ 13 декабря 2013
if ( $c->req->method eq 'POST' ) {
    $form->process( params => $c->req->params );
}
0 голосов
/ 04 января 2014

В Catalyst почти год использовался метод HTTP-сопоставления в ядре:

http://www.catalystframework.org/calendar/2013/3

Есть плюсы и минусы в использовании его через Catalyst :: Action :: REST.В основном это сводится к стилю, а также CAR делает лучшую работу, устанавливая HTTP-заголовок, принимающий (может быть важно для вас для основных ядерных REST-приложений)

Но для основ то, что вы получаете из коробки, вполне подойдет.

...