> > I need to set up JSON web services (server side) as a simple interface to 
> > an existing database infrastructure.  Can anyone recommend any building 
> > blocks, standards, etc.?

> From: Mark Allen <[email protected]>
> Sent: Saturday, October 26, 2013 12:13 AM
> http://advent.perldancer.org/2010/8-Writing REST web services with Dancer


So, I just wanted to follow up on my progress and research.  It was a bit 
frustrating!
 
Even though REST is not a requirement, I looked into Dancer and it was okay but 
boy was it a lot of research to just get it to work under Apache CGI with 
Plack::Runner.  I also DO NOT like that it's function based.  To get there I 
had to write a session object which returns a lazy loading DBIx::Array database 
handle .  But, overall I did like the dispatching (except I kept forgetting the 
sub is an anonymous sub to the function "get" so the "get" function needs a 
semicolon at the end of the anonymous sub block).
 
Next I'm going to look a the JSON RPC packages on CPAN.  I've attached my code 
here as it really is throwaway at this time.  I hope someone else can learn 
from it.
 
---
My Dancer CGI app,,,
 
$ cat dancer.cgi
#!/usr/bin/env perl
use Plack::Runner;
Plack::Runner->run('/var/www/cgi-bin/dancer.pl');

 
$ cat dancer.pl
#/usr/bin/perl
use strict;
use warnings;
use Dancer;
 
set 'logger'       => 'console';
set 'show_errors'  => 1;
set 'warnings'     => 1;
 
our $session; #cannot set session here at compile time
 
sub session { #set session at run time
  return $session||=STOP::Session->new(%{params()});
}
 
get '/' => sub {
  content_type 'text/html';
  return '<p>Hello World!<p>';
};
 
get '/env' => sub {
  content_type 'text/plain';
  return join "\n", map {sprintf "%s => %s", $_ => $ENV{$_}} sort keys %ENV;
};
 
get '/die' => sub {
  die("Error: die\n");
};
 
prefix '/:database/:dag';

#content_type 'application/json';
content_type 'text/plain';
 
get '/params' => sub {
  content_type 'text/plain';
  return join "\n", map {sprintf "%s => %s", $_ => param($_)} sort keys 
%{params()};
};
 
get '/device/:id' => sub {
  return to_json {
            device    => scalar({}),
            id        => param("id"),
            schematxt => &session->schematxt,
            date      => &session->sdb->sqlscalar("SELECT SYSDATE FROM DUAL"),
         };
};
 
get '/devices' => sub {
  return to_json {
           devices => 
scalar(&session->sdb->sqlarrayhash(&devices_sql(&session->schematxt), 
&session->userid)),
         };
};
 
dance;

 
 
---
 
mrdvt92
_______________________________________________
Houston mailing list
[email protected]
http://mail.pm.org/mailman/listinfo/houston
Website: http://houston.pm.org/

Reply via email to