#!/usr/bin/perl
use strict;
use warnings;
use HTTPEx::Declare;
use JSON::RPC::Common::Marshal::HTTP;
interface Standalone => { port => 8000, fork => 1, keepalive => 1 };
my $marshal = JSON::RPC::Common::Marshal::HTTP->new;
run {
my $c = shift;
# decode the request into an object
# this takes the JSON from the body, deserializes, and constructs a call
eval {
my $json_rpc_req = $marshal->request_to_call($c->req);
# fake some sort of return value without actually calling anything
my $json_rpc_res = $json_rpc_req->return_result({
time => scalar localtime,
echo => {
params => [ $json_rpc_req->params_list ],
method => $json_rpc_req->method,
},
});
# to invoke the request as a method of some object:
# my $json_rpc_res = $json_rpc_req->call( $some_object );
# and write the result back to the HTTP client
$marshal->write_result_to_response($json_rpc_res, $c->res);
};
if ($@) {
$c->res->status(500);
$c->res->body($@);
}
};