Perl Hackers Hub

第70回 Raisin入門 ―Rest APIマイクロフレームワークを使ってみよう!(2)

この記事を読むのに必要な時間:およそ 3 分

前回の(1)こちらから。

パラメータの操作

(2)の本節では,パラメータの操作方法を説明します。

paramsでパラメータの検証

パラメータを検証するにはparamsを,強制オプションを定義するにはrequiresを使います。

次の例では,ユーザーを追加するAPIにusersパラメータを必須として定義しています。

raisin.pl
use Types::Standard qw(HashRef Str);
(省略)
params(
    requires(
        'users',
        type => HashRef,
        desc => 'User object',
        group {
            requires(
                'name',
                type => Str,
                desc => 'User Name'
            ),
            optional(
                'email', type => Str,
                default => undef,
                regex => qr/.+\@.+/,
                desc => 'User email'
            ),
    }),
);
post sub { ... }

必須ではないパラメータはoptionalで宣言できます。regexを使うと正規表現で形式を指定できます。

空のJSONをPOSTすると,usersがないためエラーを返却できていることが確認できます。エラーメッセージも自動で返却されます。

$ curl -X POST -H 'Content-Type: application/json' \
  http://localhost:5000/users -d '{}'
- Invalid Parameters

エラーログにも警告メッセージが自動で表示されます。ステータスコード400(Bad Request)で返却できていることを確認できます。

WARN 2021-08-08T04:37:52.787 `users` is required
127.0.0.1 - - [09/Aug/2021:15:10:16 +0900]
"POST /users HTTP/1.1" 400 25 "-" "curl/7.64.1"

include_missingですべてのパラメータの取得

すべてのパラメータを取得するにはinclude_missingを使います。デフォルトでは値のないパラメータは取得できないため注意してください。

raisin.pl
(省略)
post sub {
    my $all_params = include_missing(shift);
};

route_paramでルートパラメータの取得

ルートパラメータを取得するにはroute_paramを使用します。何も指定しない場合はどんな値でも入るため,requiresを使用した強制オプションの定義を推奨します。

raisin.pl
(省略)
use HTTP::Status qw(:constants);

my %USERS = (
    1 => {
        name => 'Sample Taro',
        email => 'taro@sample.com',
    },
    2 => {
        name => 'Sample Jiro',
        email => 'jiro@sample.com',
    },
);
(省略)
params requires(
    'id',
    type => Int,
    desc => 'User ID'
);
route_param 'id' => sub {
    get sub {
        my $params = shift;
        $USERS{ $params->{id} };
    };

    del sub {
        my $params = shift;
        delete $USERS{ $params->{id} };
        res->status(HTTP_NO_CONTENT);
        undef;
    };
}

著者プロフィール

礒部浩行(いそべひろゆき)

フロント・バックエンドとWebメインに幅広く活動中。広告業界からオタク業界へ転職し,現在は通販サイトの開発を行っている。

大阪生まれ大阪育ちだが,東京に染まりすぎて最近関西弁が話せなくなった。

所属:虎の穴ラボ(株)
GitHub:mikenekoko