onnov / json-rpc-server
json rpc server
Installs: 4 889
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 2
Forks: 0
Open Issues: 0
pkg:composer/onnov/json-rpc-server
Requires
- php: >=7.4
 - ext-json: *
 - netresearch/jsonmapper: ^4
 - opis/json-schema: ^2
 - psr/log: >=1
 - symfony/dependency-injection: >=3
 - symfony/service-contracts: >=1
 
Requires (Dev)
README
Json RPC 2.0 server
Install
Composer (recommended) Use Composer to install this library from Packagist: onnov/json-rpc-server
Run the following command from your project directory to add the dependency:
composer require onnov/json-rpc-server
Alternatively, to load the dev-master branch, add the dependency directly to the composer.json file.
composer.json
 "repositories": [
        {
            "type": "git",
            "url": "git@github.com:onnov/json-rpc-server.git"
        }
    ],
    "require": {
        "onnov/json-rpc-server": "dev-master"
    },
Use
Для автозагрузки в symfony нужно добавить:
  Onnov\JsonRpcServer\JsonRpcHandler:
    autowire: true
в файл services.yaml
Авторизация
Json RPC server не занимается авторизацией. Если нужна авторизация, авторизуйте пользователя любым способом, результат авторизации передайте в метод JsonRpcHandler::run, 3-м параметром $resultAuth в виде true или false.
Данный флаг предусмотрен только для того, что бы Json RPC server выдал стандартный ответ при отсутствии авторизации.
Если авторизация не требуется, просто передайте true 3-м параметром $resultAuth.
Если API использует авторизацию, но несколько методов должны быть доступны без авторизации, такие методы как login или authCheck эти методы можно перечислить в 4-м параметре $methodsWithoutAuth в виде массива:
$methodsWithoutAuth = ['login', 'authCheck'];
Эти методы будут доступны независимо от авторизации.
Фабрика с методами
Создаем фабрику с помощью Интерфейса ApiFactoryInterface в методе getSubscribedServices перечисляем все используемые классы
public static function getSubscribedServices(): array
    {
        return [
            'Bankruptcy' => Bankruptcy::class,
            'Bankrupt' => Bankrupt::class,
        ];
    }
Запуск обработчика json rpc
Создаем объект JsonRpcHandler передаем в метод run( ApiFactoryInterface $apiFactory, string $json, bool $resultAuth, array $methodsWithoutAuth = [], bool $responseSchemaCheck = false )
метод возвращает строку json
use Onnov\JsonRpcServer\JsonRpcHandler;
use Onnov\JsonRpcServer\Model\ResultAuthModel;
$authRes = (new ResultAuthModel())->setSuccess(true);
$apiFactory = new ApiFactory()
$server = new JsonRpcHandler();
$res = $server->run(
    $apiFactory,
    $json,
    $resultAuth,
    $methodsWithoutAuth
    $responseSchemaCheck
)
JSON RPC методы
API Методы создаются с помощью Интерфейса ApiMethodInterface.php.
Каджый класс с используемыми методами должен быть описан в ApiFactory.
jsonRPC запрос может выглядеть так:
{
  "jsonrpc": "2.0",
  "method": "Auth.check",
  "params": null,
  "id": 911
}
Ответ формируется в зависимости от того, что вернет метод API.
Все, что возвращают методы попадает в result