Author: | Xavier Barbosa <clint.northwood@gmail.com> |
---|
Mute\JsonRPC implements JsonRPC 2.0 protocol in php 5.3.
It can be used has client or server. Currently, only HTTP transport is implemented. See initial specs http://www.jsonrpc.org/specification
Controllers can be any callable.
<?php use Mute\JsonRPC\Server; $server = new Server; $controller = function ($minuend, $subtrahend) { return $minuend - $subtrahend; }; $server->controllers->expose('subtract', $controller); function bogusController() { throw new \Exception; } $server->controllers->expose('bogus', 'bogusController'); class Foo { function bar() { return 'baz'; } } $server->controllers->expose('foo.method', 'Foo::bar');
Once all controllers have been declared, handle client's request
<?php $request = '[{"jsonrpc":"2.0", "method": "foo"}, {"jsonrpc":"2.0", "method": "foo", "id": "baz"}]'; $response = $server->handle($request);
Declare the endpoint
<?php use Mute\JsonRPC\Client; use Mute\JsonRPC\Client\Request; $uri = 'http://endpoint'; $client = new \Mute\JsonRPC\Client($uri);
Requests can be an array
array($method, array $params=null, $notification=false);
or a Client\Request instance
new Client\Request($method, array $params=null, $notification=false);
Each request should returns a response. A response can be a response scalar, an array, or a Exceptions\RPCError instance
<?php $response = $client->request('substract', array(42, 23)); assert($response == 19); $response = $client->request('substract', array(23, 42)); assert($response == -19); $response = $client->request('substract', array('subtrahend' => 23, 'minuend' => 42)); assert($response == 19); $response = $client->request('substract', array('minuend' => 42, 'subtrahend' => 23)); assert($response == 19);
Batched requests preserves keys
<?php $responses = $client->batch(array( array('sum', array(1, 2, 4)), array('notify_hello', array(7), true), array('subtract', array(42, 23)), array('foo.get', array('name' => 'myself')), array('get_data'), ));
More examples can be found into tests/ directory.