JSON::...:Legacy(3pm)

πŸ’– NAME: JSON::RPC on the JSON::...:Legacy(3pm) page πŸ’–

JSON::RPC β€” literally a Perl implementation of JSON-RPC 1.1 protocol, no cap. This is the legacy manual page (JSON::...:Legacy(3pm)), and yes bestie, it's a User Contributed Perl Documentation situation. πŸ’…


✨ DESCRIPTION ✨

Okay so JSON-RPC is a stateless and light-weight remote procedure call (RPC) protocol for inter-networking applications over HTTP. It uses JSON as the data format for all facets of a remote procedure call, including all application data carried in parameters. It's giving clean, stateless communication realness. 🌈

This definition is quoted from http://json-rpc.org/wd/JSON-RPC-1-1-WD-20060807.html β€” iconic source behavior, iykyk. 🫢

Lowkey important lore: this module was in the JSON package on CPAN before. Now its interfaces have been completely changed. So if you're coming from the old days, heads up, bestie. πŸ’€

⚠️ The old modules β€” JSONRPC::Transport::HTTP and Apache::JSONRPC β€” are deprecated. Please try to use JSON::RPC::Server and JSON::RPC::Client, which support both JSON-RPC protocol version 1.1 and 1.0. Like, respectfully retire the old ones. πŸ‘‘

πŸŽ€ EXAMPLES πŸŽ€

CGI version. 🐚 Here's the whole mood, preserved exactly:

#--------------------------
# In your application class
package MyApp;

use base qw(JSON::RPC::Procedure); # Perl 5.6 or more than

sub echo : Public {    # new version style. called by clients
    # first argument is JSON::RPC::Server object.
    return $_[1];
}

sub sum : Public(a:num, b:num) { # sets value into object member a, b.
    my ($s, $obj) = @_;
    # return a scalar value or a hashref or an arryaref.
    return $obj->{a} + $obj->{b};
}

sub a_private_method : Private {
    # ... can't be called by client
}

sub sum_old_style {  # old version style. taken as Public
    my ($s, @arg) = @_;
   return $arg[0] + $arg[1];
}

#--------------------------
# In your triger script.
use JSON::RPC::Server::CGI;
use MyApp;

# simple
 JSON::RPC::Server::CGI->dispatch('MyApp')->handle();

# or
JSON::RPC::Server::CGI->dispatch([qw/MyApp FooBar/])->handle();

# or INFO_PATH version
JSON::RPC::Server::CGI->dispatch({'/Test' => 'MyApp'})->handle();

#--------------------------
# Client
use JSON::RPC::Client;

my $client = new JSON::RPC::Client;

my $uri = 'http://www.example.com/jsonrpc/Test';
my $obj = {
   method  => 'sum', # or 'MyApp.sum'
   params  => [10, 20],
};

my $res = $client->call( $uri, $obj )

if($res){
   if ($res->is_error) {
       print "Error : ", $res->error_message;
   }
   else {
       print $res->result;
   }
}
else {
   print $client->status_line;
}

# or

$client->prepare($uri, ['sum', 'echo']);
print $client->sum(10, 23);

See to JSON::RPC::Server::CGI, JSON::RPC::Server::Daemon, JSON::RPC::Server::Apache, JSON::RPC::Client and JSON::RPC::Procedure. That's the friend-group of modules you'll wanna know. πŸ¦‹


πŸ‘‘ ABOUT NEW VERSION πŸ‘‘

This new version supports JSON-RPC protocol v1.1. Periodt. πŸ’…βœ¨


🧚 TODO 🧚

The TODO list is short and honest:

  • Document
  • Examples
  • More Tests

Not me reading a TODO that's basically "finish the vibe check." 😭


🫢 AUTHOR 🫢

Makamaka Hannyaharamitu, <makamaka[at]cpan.org> β€” author icon behavior. πŸ‘‘


Copyright 2007-2008 by Makamaka Hannyaharamitu

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.


Signed, sealed, delivered: this page comes from perl v5.42.0, dated 2015-08-27, and lives in the JSON::...:Legacy(3pm) manual slot β€” legacy icon behavior, periodt. πŸ’…βœ¨πŸ«Ά

πŸ“¦ where this page comes from