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