The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

DESCRIPTION

This is a framework based on Mojo, with easy syntax
like Mojolicious::Lite, intended for making applications
which are part of an HTTP-based cluster.

When used with Rose::DB::Planter, Clustericious
allows for the easy conversion of a database
schema into a RESTful interface and a web
frontend.

EXAMPLE

Let's turn a database schema below into a RESTful
web service with a web front end.

Step 1.  Make your schema :

    create table artist (
        id serial primary key,
        name varchar
    );

    create table album (
        id serial primary key,
        artist integer references artist,
        title varchar,
        year integer
    );

    create table song (
        id serial primary key,
        album integer references album(id),
        title varchar,
        length integer
    );

    create table performance (
        id serial primary key,
        location varchar
    );

    create table song_performance (
        song integer references song(id),
        performance integer references performance (id),
        primary key (song, performance)
    );


Note we have several 1-many relationships and one
many-many relationship.

Save the above as schema.sql.

Step 2.

    clustericious generate mbd_app Musicrest --schema schema.sql

Now skip to step 7 if you just want to see it work.

Step 4.  Try the test suite :

    cd Musicrest
    perl Build.PL
    ./Build
    ./Build test

Step 5.  Add a test :

    cat > t/002_music.t

    #!/usr/bin/env perl

    use Test::More;
    use Test::Clustericious;
    use Test::MBD '-autostart';

    my $t = Test::Clustericious->new(app => 'Musicrest');
    $t->create_ok( '/artist' => { name => 'Prince' } );
    my $id = $t->tx->res->json->{id};
    ok $id, "Added artist, id is $id";
    $t->remove_ok( "/artist/$id" );
    done_testing();

Step 6.  Run ./Build test to see it work.

Step 7.  Prepare to distribute your application and schema.

    ./Build dbdist
    ./Build manifest
    ./Build dist
    # (and commit and tag)

Step 8.  Install and configure

    ./Build fakeinstall
    ./Build dbfakeinstall

    ./Build install
    ./Build dbinstall

Check the db that was installed :
    psql --list
    psql musicrestserver
    \dt

Step 9.  Configure

    mkdir ~/etc
    cp eg/*.conf ~/etc

Step 10. Start it up

    musicrest start

Step 11.  Try it :

    curl -v http://localhost:3000

Now for some sample REST calls :

Note for testing, you can use the server
as a client, e.g. :
    musicrest get -v /status

    add an artist
    add an album
    add some songs
    add a performance

    get a list of artists
    get the songs for an artist
    get the performances by an artist