|
NAMEJSON::RPC::Common - Transport agnostic JSON RPC helper objectsVERSIONversion 0.11SYNOPSIS# this is a simplistic example # you probably want to use L<JSON::RPC::Common::Marshal::Text> instead for # something like this. use JSON::RPC::Common::Procedure::Call; # deserialize whatever json text you have into json data: my $req = from_json($request_body); # inflate it and get a call object: my $call = JSON::RPC::Common::Procedure::Call->inflate($req); warn $call->version; # this will create a result object of the correct class/version/etc # "value" is the return result, regardless of version my $res = $call->return_result("value"); # finally, convert back to json text: print to_json($res->deflate); DESCRIPTIONThis module provides abstractions for JSON-RPC 1.0, 1.1 (both variations) and 2.0 (formerly 1.2) Procedure Call and Procedure Return objects (formerly known as request and result), along with error objects. It also provides marshalling objects to convert the model objects into JSON text and HTTP requests/responses.This module does not concern itself with the transport layer at all, so the JSON-RPC 1.1 and the alternative specification, which are very different on that level are implemented with the same class. RANTWhile JSON-RPC 1.0 and JSON-RPC 2.0 are beautifully simple, the JSON-RPC 1.1 working draft, is most definitely not. It is a convoluted protocol, and also demands a lot more complexity from the responders on the server side (server side introspection ("system.describe"), strange things relating to positional vs. named params...).Unfortunately it appears that JSON-RPC 1.1 is the most popular variant. Since the client essentially chooses the version of the RPC to be used, for public APIs I reccomend that all versions be supported, but be aware that a 1.1-WD server "MUST" implement service description in order to be in compliance. Anyway, enough bitching. I suggest making your servers 1.0+2.0, and your clients 2.0. CLASSESThere are various classes provided by JSON::RPC::Common.They are designed for high reusability. All the classes are transport and representation agnostic except for JSON::RPC::Common::Marshal::Text and JSON::RPC::Common::Marshal::HTTP which are completely optional. JSON::RPC::Common::Procedure::CallThis class and its subclasses implement Procedure Calls (requests) for JSON-RPC 1.0, 1.1WD, 1.1-alt and 2.0.JSON::RPC::Common::Procedure::ReturnThis class and its subclasses implement Procedure Returns (results) for JSON-RPC 1.0, 1.1WD, 1.1-alt and 2.0.JSON::RPC::Common::Procedure::Return::ErrorThis class and its subclasses implement Procedure Return error objects for JSON-RPC 1.0, 1.1WD, 1.1-alt and 2.0.JSON::RPC::Common::Marshal::TextA filter object that uses JSON to serialize procedure calls and returns to JSON text, including JSON-RPC standard error handling for deserialization failure.JSON::RPC::Common::Marshal::HTTPA subclass of JSON::RPC::Common::Marshal::Text with additional methods for marshaling between HTTP::Requests and JSON::RPC::Common::Procedure::Call and HTTP::Response and JSON::RPC::Common::Procedure::Return.Also knows how to handle JSON-RPC 1.1 "GET" encoded requests (for all versions), providing RESTish call semantics. TODO
SEE ALSOOn the Intertubes
On the CPANJSON, JSON::RPC, RPC::JSON, HTTP::Engine, CGI::JSONRPCAUTHORYuval Kogman <nothingmuch@woobling.org>COPYRIGHT AND LICENSEThis software is copyright (c) 2014 by Yuval Kogman and others.This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
Visit the GSP FreeBSD Man Page Interface. |