yii2-jsonrpc Yii2 implementation of JSON-RPC server based on method-to-action translation

  1. Requirements
  2. Usage
  3. Resources

Yii2 extension for JSON-RPC server implementation. Works not as Remote Procedure Call, but Remote Action Call, therefor allows to use all Yii2 features, such as controllers, actions, behaviors, filters and others. Allows multiple calls within one request. Fully specification-compliant.

Requirements

Yii 2.0 and above.

Usage

Entry point:

<?php

namespace app\controllers;
use \georgique\yii2\json-rpc\Controller;

class JsonRpcController extends Controller {

	// Practically you don't need anything else in this controller, 
	// unless you want to customize entry point somehow.
	
}

Entry point with different way to pass params:

<?php

namespace app\controllers;
use \georgique\yii2\json-rpc\Controller;

class JsonRpcBodyController extends Controller {

	// With the customization JSON RPC params will be passed to the target action
	// as request body params, not as action function arguments
    public $paramsPassMethod = JSON_RPC_PARAMS_PASS_BODY;

}

Controller with target actions which we are going to call:

<?php
namespace app\modules\api1\controllers;

// There are some minor side-effects of this solutions, because original request is made to the
// entry point, not to the target controller and action. Be careful working with Request object,
// especially when working on access restriction to the target actions. For example, you want an
// action to be reached only with GET verb only, but you do POST request to the endpoint. In that
// case you will get Internal Error because access will be denied.
class ExampleController extends \yii\web\Controller {

    // Note that URL patterns won't be used to resolve the method - this would not be resourse-wise.
    // Method string should simply be [[module.]controller.]action where module and controller parts
    // can be omitted, so default module and index controller will be used.
    public function actionTry() {
        return "You've got it!";
    }

    // Method params are directly translated into action arguments. Make sure your call matches action
    // signature.
    public function actionTryWithParams($foo) {
        return "Params received: \$foo = $foo.";
    }
    
    // Passing params as Yii request body params must be handy too, when we need to do a massive
    // attribute assignment for example.
    public function actionTryWithBodyParams() {
        $output = "Params received: ";
        $output_chunks = array();
        foreach (\Yii::$app->request->getBodyParams() as $name => $value) {
            $output_chunks[] = "$name = $value\n";
        }
        return $output . implode(', ', $output_chunks) . '.';
    }
 
}

Now this is how calls and responses will look like: DUE TO A BUG IN WYSYWYG EDITOR, SAMPLE IS NOT RENDERED WELL HERE. PLEASE SEE IT ON GITHUB PAGE.

Resources

0 0
1 follower
16 downloads
Yii Version: 2.0.*
License: BSD-2-Clause
Category: Web Service
Developed by: George Shestayev
Created on: Mar 13, 2018
Last updated: 5 years ago
Github Repository

Downloads

show all

Related Extensions