felixfbecker/advanced-json-rpc

更高级的JSONRPC实现

v3.2.1 2021-06-11 22:34 UTC

README

Version Build Status Coverage semantic-release License

提供JSONRPC请求和响应的基本类,以及一个可以解码JSONRPC请求并在目标上调用相应方法的Dispatcher类。通过类型提示和@param标签强制类型转换参数。

支持嵌套目标:如果方法类似于myNestedTarget->theMethod,则分发器将在目标上查找myNestedTarget属性,并在其上调用theMethod。分隔符可配置,默认为PHP对象操作符->

示例

use AdvancedJsonRpc\Dispatcher;

class Argument 
{
    public $aProperty;
}

class Target
{
    public function someMethod(Argument $arg)
    {
        // $arg instanceof Argument === true
        // $arg->aProperty === 123
        return 'Hello World';
    }
}

$dispatcher = new Dispatcher(new Target());

$result = $dispatcher->dispatch('
    {
        "jsonrpc": "2.0",
        "id": 1,
        "method": "someMethod", 
        "params": {
            "arg": {"aProperty": 123}
        }
    }
');

// $result === "Hello World"

嵌套目标

use AdvancedJsonRpc\Dispatcher;

class TextDocumentManager 
{
    public function didOpen(string $uri)
    {
        return 'Thank you for this information';
    }
}

class LanguageServer
{
    public $textDocument;

    public function __construct()
    {
        $this->textDocument = new TextDocumentManager();
    }
}

$dispatcher = new Dispatcher(new LanguageServer(), '/');

$result = $dispatcher->dispatch('
    {
        "jsonrpc": "2.0",
        "id": 1,
        "method": "textDocument/didOpen", 
        "params": {
            "uri": "file:///c/Users/felix/test.php"
        }
    }
');

// $result === "Thank you for this information"