eugene-khorev/yii2-json-rpc-controller

Yii2 JSON RPC 2.0 扩展

dev-master 2016-11-27 19:08 UTC

This package is not auto-updated.

Last update: 2024-09-25 15:12:29 UTC


README

在配置中更改你的请求组件类为 \jsonrpc\Request

   'components' => [
		...
        'request' => [
            'class' => 'jsonrpc\Request',
            'cookieValidationKey' => '...',
        ],
		...
	]

创建一个扩展 \jsonrpc\Controller 的新控制器

class SomeController extends \jsonrpc\Controller
{
	/**
	 * This is regular controller action
	 */
	public function actionIndex()
	{
		return $this->render('index');
	}

	/**
	 * This is JSON-RPC 2.0 controller action
	 */
	public function rpcEcho($param1, $param2)
	{
		return ['recievedData' => ['param1' => $param1, 'param1' => $param1]];
	}
}

现在,如果你将此 JSON-RPC 2.0 请求发送到 /some/rpc

{
	"jsonrpc": "2.0", 
	"method": "echo", 
	"params": { 
		"param1": "abc",
		"param2": "123"
	},
	"id": 1
}

你将得到以下结果

{
	"jsonrpc": "2.0",
	"id": 1,
	"result": {
		"recievedData": {
			"param1": "abc",
			"param2": "123"
		}
	}
}

如果你在浏览器中导航到 /some/index,你将得到常规的 \Yii2\web\Controller 行为。

高级使用

参数、模型和验证

创建一个新模型

class SomeModel extends yii\base\Model
{
	public $value1;
	public $value2;
}

修改你的 RPC 控制器动作,使其看起来像这样

	public function rpcEcho($param1, SomeModel $modelParam)
	{
		return ['recievedData' => [
					'param1' => $param1, 
					'modelParam' => $modelParam->attributes
		]];
	}

现在,如果你将此 JSON-RPC 2.0 请求发送到 /some/rpc

{
	"jsonrpc": "2.0",
	"params": {
		"param1": "abc",
		"modelParam": {
			"value1": "123",
			"value2": "321",
		}
	},
	"id": 1
}

你将在方法中获得有效的 $modelParam 模型。库使用 rpcdefault 场景来验证参数模型。如果验证失败,客户端将收到包含验证错误的正确 JSON-RPC 2.0 答案,但你的 RPC 动作方法甚至不会运行。

批量请求

您还可以使用批量 JSON-RPC 2.0 请求

[
	{
		"jsonrpc": "2.0", 
		"method": "some-method", 
		"params": { "something": "anything"}, 
		"id": 1
	},
	{
		"jsonrpc": "2.0", 
		"method": "another-method", 
		"params": { "data": [1, 2, 3, 4] }, 
		"id": 2
	}
]

在这种情况下,两个控制器方法 rpcSomeMethod()rpcAnotherMethod() 将按顺序调用。即使其中一个方法出错,客户端也将收到正确的批量结果。