モダンPerl連載第22回

本文中にも書いた通り、本当はまだ取り上げる予定はなかったんですが、いろいろあったので今年の締めくくりもMojo(というかMojolicious::Lite)にしてみた次第。どうせすぐに連載記事がでるからと思ってここではアナウンスしていなかったのですが、年頭に書いた特集記事のコードもあわせて更新してありますので興味のある方はご確認くださいませ。日付がおかしい理由は本文/注釈にも書いたとおり「なんでこんなんが二ヶ月も放置されてるかなあ」というバグを踏んでしまって前回原稿を落としてしまったからです。

http://gihyo.jp/dev/serial/01/modern-perl/0022
http://gihyo.jp/dev/feature/01/mojo/

それはそれとして、Mojolicious::Liteアプリのサンプルは掲示板的なものよりこんな感じのAPIサーバにした方がよかったのかもしらんなあと思ったのでさらしておく。別にJSONじゃなくてXMLなりなんなりを返すのでもいいんだけど、おきまりのJSON返したいだけなのにいまどきのCatalystでごりごり書くのはだるいよなあと思うので。

#!/usr/bin/env perl

use Mojolicious::Lite;
use MyDB;

app->log->level('error');
app->renderer->default_format('json');

my $db = MyDB->connect('...');

get '/' => sub {
    my $self = shift;
    $self->render(format => 'html');
} => 'index';

get '/user/:id' => sub {
    my $self = shift;

    my $user = $db->find_user(id => $self->stash('id'));

    $self->stash(json => $user);
} => 'user';

shagadelic;
__DATA__

@@ index.html.ep
<html><body>this is an api server</body></html>

@@ user.json.ep