Клиент JSON-RPC 2 для PHP, способный вызывать методы во вложенных классах

У меня есть сервер JSON-RPC2, который обеспечивает интерфейс для некоторых служб.

$server = new Server;
$server->service1 = new Service1($this);
$server->service2 = new Service2($this);

Мне интересно, есть ли какой-либо (желательно PHP) клиент, который может вызывать методы этих сервисов, так как мне это нужно для целей отладки.

Я протестировал один клиент, который может напрямую вызывать методы:

$client = new jsonRPCClient('http://localhost/jsonrpcphp/server.php');

// This works
$response = $client->giveMeSomeData('name');

// This doesn't
$response = $client->service1->giveMeSomeData('name');

Моим исходным клиентом является приложение CoffeScript, которое вызывает методы следующим образом:

@get("api").call "service1.giveMeSomeData", "name", (result) =>

Есть ли клиент JSON-RPC2 для PHP, который я мог бы использовать таким же образом?


person jpesout    schedule 31.07.2013    source источник


Ответы (1)


JSON-RPC — очень простой протокол. Пространство имен конечной точки — FLAT. Нет открытых классов (не говоря уже о нескольких классах) из одной конечной точки.

Когда клиент CoffeeScript вызывает service1.giveMeSomeData, он буквально просит веб-службу PHP выполнить метод конечной точки с именем service1.giveMeSomeData. Если ваш веб-сервис затем направляет это методу giveMeSomeData в экземпляре некоторого класса, в настоящее время назначенного экземпляру Service1, ну, это зависит от него! (сторона службы PHP). Это НЕ функция JSON-RPC, это функция, создаваемая используемым вами конечным маршрутизатором.

Эквивалентный вызов на стороне клиента PHP может выглядеть примерно так: $client->call('Service1.giveMeSomeData', array('name')) Это зависит от используемой вами библиотеки JSON-RPC. Некоторые клиентские библиотеки PHP создают экземпляр специального класса, который реализует метод PHP __call, так что любые нераспознанные имена методов перенаправляются как вызовы универсального метода вызова RPC в этом классе.

Чтобы было ясно, существует не несколько пространств имен, обслуживаемых из конечной точки JSON-RPC, а только одно плоское пространство имен, которое может включать методы с . (точка) символов в их именах. То, как ваша конечная точка веб-службы направляет эти вызовы функциям/методам PHP, полностью зависит от вас.

PS. Вы получите гораздо лучшую помощь, если объясните, какие клиентские и серверные библиотеки вы используете в PHP для JSON-RPC (их много, разного качества и полноты).

person David-SkyMesh    schedule 01.08.2013