Hello Monks
This question, like a lot of my questions, if more looking for suggestions that actual code problems.
I have been thinking about creating a small, simple web services script and any place I look for information/tutorial seems to suggest it as being quite difficult. I have a really simple and crude script below and I am looking for thoughts on why this type of approach is bad!
It is a simple process and the setup to return a JSON string.
Ideally I would create a backend DB with the auth details (for valid user API keys) and expand on the query/queries to return more attributes. My main concern is the method. Is this a really bad way to provide a web services service!? (Sitting on a standard Apache2 instance at the moment)
#!/usr/bin/perl
use strict;
use warnings;
use DBI;
use CGI;
use JSON::XS;
# Naively simple web service!?
my $cgi = new CGI;
my $auth_code = "XD9920399fldkkxzmfoJfkYYUS2";
my $lookup = $cgi->param("lookup");
my $client_key = $cgi->param("client_key");
my $print;
# Expand this later to return unique error for each possible omission
if ( (! defined $lookup) || (! defined $client_key) || ($client_key ne
+ $auth_code) ) {
$print = encode_json {error => 'You must provide a lookup and vali
+d client key'}
}
else{
my $dbh = new_dbh();
my $sth = $dbh->prepare("SELECT title,next_episode
FROM watcher
WHERE userid = ?");
$sth->execute($lookup);
$print = encode_json $sth->fetchrow_hashref();
}
print "Content-type: text/html\n\n";
# Send back the Json string
print "$print";
sub new_dbh {
my $db_driver = "mysql";
my $db_name = "shows";
my $db_host = "localhost";
my $db_port = "3306";
my $db_user = "root";
my $db_passwd = "xxxxxx";
my $dbh= DBI->connect("DBI:$db_driver:dbname=$db_name;host=$db_hos
+t;port=$db_port",
$db_user, $db_passwd,{RaiseError => 1,
mysql_enable_utf8 => 1,
});
$dbh->{TraceLevel} = 2; # disable when live
return $dbh;
}