PHPackages                             tochka-developers/jsonrpc - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. tochka-developers/jsonrpc

ActiveLibrary[API Development](/categories/api)

tochka-developers/jsonrpc
=========================

JsonRpc extension for Laravel

v4.11.0(1y ago)2733.8k↓50%20[1 PRs](https://github.com/tochka-developers/jsonrpc/pulls)1MITPHPPHP 8.2.\*|8.3.\*|8.4.\*

Since Jun 8Pushed 1mo ago6 watchersCompare

[ Source](https://github.com/tochka-developers/jsonrpc)[ Packagist](https://packagist.org/packages/tochka-developers/jsonrpc)[ RSS](/packages/tochka-developers-jsonrpc/feed)WikiDiscussions v4 Synced 1mo ago

READMEChangelog (10)Dependencies (13)Versions (90)Used By (1)

JSON-RPC Server (Laravel/Lumen)
===============================

[](#json-rpc-server-laravellumen)

[![Quality Gate Status](https://camo.githubusercontent.com/fd32d558d8dd3448e231a17309bad09d0303916f811ea6b9428c8532ab07b8dc/68747470733a2f2f736f6e6172636c6f75642e696f2f6170692f70726f6a6563745f6261646765732f6d6561737572653f70726f6a6563743d746f63686b612d646576656c6f706572735f6a736f6e727063266d65747269633d616c6572745f737461747573)](https://sonarcloud.io/dashboard?id=tochka-developers_jsonrpc)[![Bugs](https://camo.githubusercontent.com/f8fcd7e5f903e44f74895c9c1d71697d8bd7dc5cf1f7325e41453be6a282ed89/68747470733a2f2f736f6e6172636c6f75642e696f2f6170692f70726f6a6563745f6261646765732f6d6561737572653f70726f6a6563743d746f63686b612d646576656c6f706572735f6a736f6e727063266d65747269633d62756773)](https://sonarcloud.io/dashboard?id=tochka-developers_jsonrpc)[![Code Smells](https://camo.githubusercontent.com/e8f83d397cf91cb99035a0e6af9ff1e63d87359fdcfc462cfbe664d46e7161e8/68747470733a2f2f736f6e6172636c6f75642e696f2f6170692f70726f6a6563745f6261646765732f6d6561737572653f70726f6a6563743d746f63686b612d646576656c6f706572735f6a736f6e727063266d65747269633d636f64655f736d656c6c73)](https://sonarcloud.io/dashboard?id=tochka-developers_jsonrpc)[![Coverage](https://camo.githubusercontent.com/558d03959866eedc44d9694fbd464deada92add57e2e0c97eeb547c908272515/68747470733a2f2f736f6e6172636c6f75642e696f2f6170692f70726f6a6563745f6261646765732f6d6561737572653f70726f6a6563743d746f63686b612d646576656c6f706572735f6a736f6e727063266d65747269633d636f766572616765)](https://sonarcloud.io/dashboard?id=tochka-developers_jsonrpc)

Описание
========

[](#описание)

JsonRpc сервер - реализация сервера по спецификации JsonRpc 2.0.

Поддерживаемые версии:

- Lumen &gt;= 6.0
- Laravel &gt;= 6.0
- PHP 7.4 | 8.0

Поддерживает:

- вызов удаленных методов по нотификации имяКонтроллера\_имяМетода, либо с разделением логики на несколько ресурсных точек входа
- вызов нескольких удаленных методов в одном запросе
- передача параметров в метод контроллера по имени
- маппинг параметров в DTO
- аутентификация с помощью токена, переданного в заголовке
- контроль доступа по IP-адресам
- контроль доступа к методам для разных сервисов - ACL
- возможность настройки нескольких точек входа с разными настройками JsonRpc-сервера
- расширение возможностей с помощью механизма Middleware
- кеширование всех роутов для увеличения быстродействия

Установка
=========

[](#установка)

Установка через composer:

```
composer require tochka-developers/jsonrpc
```

### Laravel

[](#laravel)

Для Laravel есть возможность опубликовать конфигурацию для всех пакетов:

```
php artisan vendor:publish
```

Для того, чтобы опубликовать только конфигурацию данного пакета, можно воспользоваться опцией tag

```
php artisan vendor:publish --tag="jsonrpc-config"
```

### Lumen

[](#lumen)

В Lumen отсутствует команда *vendor:publish*, поэтому делается это вручную. Если в проекте еще нет директории для конфигураций - создайте ее:

```
mkdir config
```

Скопируйте в нее конфигрурацию jsonrpc:

```
cp vendor/tochka-developers/jsonrpc/config/jsonrpc.php config/jsonrpc.php
```

Вместо *config/jsonrpc.php* нужно указать любую другую директорию, где хранятся ваши конфиги и название будущего конфига. Далее необходимо прописать скопированный конфиг в *bootstrap/app.php*

```
$app->configure('jsonrpc');
```

Так же прописать провайдер:

```
$app->register(\Tochka\JsonRpc\JsonRpcServiceProvider::class);
```

Где *jsonrpc* - имя файла конфига

Для корректной работы так же необходимы фасады:

```
$app->withFacades();
```

Настройка точек входа
=====================

[](#настройка-точек-входа)

Пропишите в вашем route.php:

```
\Route::post('/api/v1/public/jsonrpc', function (\Illuminate\Http\Request $request) {
    return \Tochka\JsonRpc\Facades\JsonRpcServer::handle($request->getContent());
});
```

Если планируется передавать имя контроллера в адресе, после точки входа, роут должен быть следующего вида:

```
Route::post('/api/v1/jsonrpc/{group}[/{action}]', function (Illuminate\Http\Request $request, $group, $action = null) {
    return \Tochka\JsonRpc\Facades\JsonRpcServer::handle($request->getContent(), 'default', $group, $action);
});
```

Конфигурация
============

[](#конфигурация)

```
return [
    // можно настроить несколько разных конфигурация для разных точек входа
    // чтобы указать в роуте, какая именно конфигурация должна быть использована - передавайте ключ конфига вторым
    // параметром в \Tochka\JsonRpc\Facades\JsonRpcServer::handle
    'default' => [
        // корневой путь к точке входа (т.е. без указания group и action, если они используются)
        // необходим для корректного формирования и кеширования списка роутов
        'endpoint' => '/api/v1/public/jsonrpc',

        // Тип формирования точки входа (получать или нет из конечного URI группу методов и метод
        'dynamicEndpoint' => ServerConfig::DYNAMIC_ENDPOINT_NONE,

        // Краткое описание сервера
        'summary' => 'Основная точка входа',

        // Полное описание сервера
        'description' => 'Основная точка входа',

        // Namespace, в котором находятся контроллеры
        'namespace'   => 'App\\Http\\Controllers\\Api\\',

        // Suffix для контроллеров
        'controllerSuffix' => 'Controller',

        // Разделитель для имен методов
        'methodDelimiter' => '_',

        // Использовать методы родителя при наследовании
        'allowParentMethods' => false,

        // список Middleware, обрабатывающих запросы
        // описание middleware ниже
        'middleware' => [ //
            Tochka\JsonRpc\Middleware\LogMiddleware::class               => [
                // Канал лога, в который будут записываться все логи
                'channel' => 'default',
                // Заголовки которые нужно писать в лог
                'headers' => ['accept', 'encoding']
            ],
             Tochka\JsonRpc\Middleware\TokenAuthMiddleware::class         => [
                 'headerName' => 'X-Tochka-Access-Key',
                 // Ключи доступа к API
                 'tokens'     => [
                     'troll' => env('JSONRPC_KEY_TROLL', ''),
                 ],
             ],
             Tochka\JsonRpc\Middleware\AccessControlListMiddleware::class => [
                'acl' => [
                    '*'                              => '*',
                    FooController::class             => ['service'],
                    FooController::class . '@method' => ['service2'],
                ],
            ],
        ],
    ],
];
```

Dynamic Endpoint
================

[](#dynamic-endpoint)

Позволяет получать из конечного URI группу методов и сам метод.

Настраивается с помощью параметра `dynamicEndpoint` в конфигурации.

Все константы для настройки параметра находятся в классе `\Tochka\JsonRpc\Support\ServerConfig`Далее перечислены возможные значения этого параметра

#### ServerConfig::DYNAMIC\_ENDPOINT\_NONE

[](#serverconfigdynamic_endpoint_none)

Точка входа статична, все контроллеры располагаются в одном пространстве имен

Пример:

- uri: `/api/v1/public/jsonrpc`
- jsonrpc method: `test_ping`
- controller@method: `\Default\Controller\Namespace\TestController@ping`

#### ServerConfig::DYNAMIC\_ENDPOINT\_CONTROLLER\_NAMESPACE

[](#serverconfigdynamic_endpoint_controller_namespace)

Все, что отличается в URI от указанной точки входа - является постфиксом к пространству имен контроллеров (group).

Пример:

- uri: `/api/v1/public/jsonrpc/foo/bar`
- jsonrpc method: `test_ping`
- controller@method: `\Default\Controller\Namespace\Foo\Bar\TestController@ping`

#### ServerConfig::DYNAMIC\_ENDPOINT\_FULL\_CONTROLLER\_NAME

[](#serverconfigdynamic_endpoint_full_controller_name)

Последний элемент URI является именем контроллера (action), предыдущие элементы до указанной точки входа - постфикс к пространству имен контроллеров (group).

Пример:

- uri: `/api/v1/public/jsonrpc/foo/bar`
- jsonrpc method: `test_ping`
- controller@method: `\Default\Controller\Namespace\Foo\BarController@test_ping`

Обработчики (Middleware)
========================

[](#обработчики-middleware)

Обработчики позволяют подготовить запрос, прежде чем вызывать указанный метод. Список обработчиков задается в параметре `jsonrpc.middleware`. Это массив, в котором необходимо перечислить в порядке очереди классы обработчиков. По умолчанию доступны следующие обработчики:

- `Tochka\JsonRpc\Middleware\LogMiddleware` - логирование входящих запросов
- `Tochka\JsonRpc\Middleware\TokenAuthMiddleware` - авторизация сервиса по токену в заголовке
- `Tochka\JsonRpc\Middleware\ServiceValidationMiddleware` - валидация сервиса по его IP-адресу
- `Tochka\JsonRpc\Middleware\AccessControlListMiddleware` - ACL - правила доступа разных сервисов к разным методам и группам Jsonrpc-сервера

Кроме того, вы можете использовать свои Middleware для любых других целей (авторизация через BasicAuth, дополнительная фильтрация/валидация данных, etc)

### Аутентификация по токену (TokenAuthMiddleware)

[](#аутентификация-по-токену-tokenauthmiddleware)

Необходима, если вы хотите ограничить доступ к сервису и использовать в качестве аутентификации доступ по токену в заголовке. В конфигурацию обработчика передаются следующие параметры:

```
[
    'headerName' => 'X-Tochka-Access-Key',
    'tokens'     => [
        'service_foo' => env('JSONRPC_KEY_SERVICE_FOO', \Str::uuid()->toString()),
        'service_bar' => env('JSONRPC_KEY_SERVICE_BAR', \Str::uuid()->toString()),
]
```

- `headerName` - имя заголовка, в котором клиент должен передать токен
- `tokens` - список сервисов-клиентов и их токены

Если запрос был осуществлен без данного заголовка, либо с токеном, которого нет в списке - клиенту вернется ошибка. Если аутентификация прошла успешно - клиент будет опознан как `service_foo` (`service_bar`), что позволит контролировать доступ к методам. Если аутентификация отключена - клиент будет опознан как `guest`.

### Валидация сервиса по IP (ServiceValidationMiddleware)

[](#валидация-сервиса-по-ip-servicevalidationmiddleware)

Подключайте, если необходимо ограничить список IP-адресов, с которых сервис-клиент может осуществлять запросы. В конфигурацию обработчика передаются следующие параметры:

```
[
    'servers' => [
        'service_foo' => ['192.168.0.1', '192.168.1.5'],
        'service_bar' => '*',
    ],
]
```

В указанном примере авторизоваться с ключом доступа сервиса `service_foo` могут только клиенты с IP адресами `192.168.0.1` и `192.168.1.5`. Сервис `service_bar` может авторизоваться с любых IP адресов.

### Контроль доступа к методам (AccessControlListMiddleware)

[](#контроль-доступа-к-методам-accesscontrollistmiddleware)

Если включен обработчик `AccessControlListMiddleware`, то будет осуществлен контроль доступа к методам. В конфигурацию обработчика передаются следующие параметры:

```
[
    'acl' => [
        '*'                                           => ['service1', 'service2'],
        'App\Http\TestController'                     => ['service1'],
        'App\Http\TestController@isActivationAllowed' => ['service2'],
    ]
]
```

### Логирование - LogMiddleware

[](#логирование---logmiddleware)

Для логирования входящих запросов используется LogMiddleware. В конфигурацию обработчика передаются следующие параметры:

```
[
    'channel'    => 'jsonrpc',
    'hideParams' => [
        UserController::class => ['password', 'old_password', 'new_password'],
    ],
]
```

- `channel` - канал логирования. Любой из каналов, описанных в конфигурации `logging.php`
- `hideParams` - скрывает из логирования указанные параметры (в случае конфиденциальных данных).

Описывается с помощью ассоциативного массива, в котором ключами выступает целевой метод, в котором необходимо скрыть параметры, а значения - имена параметров, которые необходимо скрыть. В качестве ключей может быть:

- `*` - правило распространяется для всего сервера (для всех контроллеров и методов)
- `App\Http\Controllers\UserController` - правило распространяется для всех методов указанного контроллера
- `App\Http\Controllers\UserController@auth` - правило распространяется для указанного метода в указанном контроллере

Маршрутизация (роутинг)
=======================

[](#маршрутизация-роутинг)

Для ускорения поиска нужного метода и правильной просадки параметров пакет генерирует список всех маршрутов с описанием этих параметров.

Для вывода всех доступных маршрутов вы можете воспользоваться командой artisan `jsonrpc:route:list`:

```
> php artisan jsonrpc:route:list
+---------+--------------+-----------------------------+----------------------------------------------------------------+
| Server  | Group:Action | JsonRpc Method              | Controller@Method                                              |
+---------+--------------+-----------------------------+----------------------------------------------------------------+
| default | @:@          | check_arrearsOfTaxes        | App\Http\Controllers\Api\CheckController@arrearsOfTaxes        |
| default | @:@          | check_bankrupt              | App\Http\Controllers\Api\CheckController@bankrupt              |
| default | @:@          | check_crime                 | App\Http\Controllers\Api\CheckController@crime                 |
+---------+--------------+-----------------------------+----------------------------------------------------------------+

```

При каждом входящем запросе схема маршрутов заново пересчитывается. Чтобы этого не происходило, необходимо закешировать все маршруты с помощью команды `jsonrpc:route:cache`. Построенная схема сохранится в файл и будет использоваться каждый раз при следующих запросах.

Учтите это при разработке - пока есть построенная закешированная схема маршрутов - любые изменения маршрутов в коде не будут отражаться на выполнении запросов.

Рекомендуется выполнять команду кеширования маршрутов сразу после деплоя на рабочие инстансы (по аналогии с командой Laravel `config:cache`).

Чтобы очистить кеш - выполните команду `jsonrpc:route:clear`. После очистки кеша маршруты снова будут строиться каждый раз при входящем запросе.

Также вы можете динамически добавлять новые маршруты в список:

```
$route = new \Tochka\JsonRpc\Route\JsonRpcRoute('default', 'my_dynamic_method');
$route->controllerClass = MyController::class;
$route->controllerMethod = 'methodName';

\Tochka\JsonRpc\Facades\JsonRpcRouter::add($route);
```

Маппинг параметров в DTO и получение полного запроса
====================================================

[](#маппинг-параметров-в-dto-и-получение-полного-запроса)

По умолчанию все параметры из JsonRpc-запроса прокидываются в параметры метода контроллера по их имени. При этом рекомендуется использовать типизацию параметров для того, чтобы JsonRpc-сервер мог отвалидировать эти параметры на входе и ответить ошибкой валидации в случае несовпадения типов.

Если в качестве типа параметра будет указан какой-либо класс - JsonRpc-сервер попытается создать экземпляр этого класса и присвоить всем публичным полям значения аналогичных полей из объекта запроса. При этом также будут работать правила валидации типов.

Также вы можете в качестве типа использовать array. Если при этом в PhpDoc указать конкретный тип элементов внутри массива - то JsonRpc-сервер также попытается привести все элемента массива в запросе к указанному типу (в том числе, если таким типом будет другой класс).

Стоит учесть, что JsonRpc-сервер не приводит типы из запроса к указанным типам в понимании приведения типов в PHP. Т.е. если в запросе передать значение с типом int, а в параметре будет указан тип string - то будет выброшено исключение и клиенту вернется ответ с ошибкой. Приведением в текущем случае мы называем попытка JsonRpc-сервера правильно "наложить" свойства объекта из JsonRpc-запроса на поля конкретного класса.

Кроме всего, вы можете указать JsonRpc-серверу на необходимость приведения всего JsonRpc-запроса к объекту, не пытаясь прокидывать верхний уровень параметров запроса на параметры метода контроллера. Это может быть полезно в случае, если в запросе очень много параметров верхнего уровня, либо если один и тот же набор параметров используется в нескольких методах. Пример использования:

```
use Tochka\JsonRpc\Annotations\ApiMapRequestToObject;

class ApiController extends BaseController
{
    /**
     * @ApiMapRequestToObject(parameterName="request")
     */
     #[ApiMapRequestToObject('request')]
    public function testMethod(MyDTOForRequest $request): bool
    {
        // ...
    }
}
```

В данном случае мы аннотацией/атрибутом указали, что весь JsonRpc-запрос необходимо привести к классу MyDTOForRequest и передать в качестве значения в качестве параметра метода `$request`.

Учтите, что в случае использования аннотации/аттрибута `ApiMapRequestToObject` для метода - во все остальные параметры метода больше не будут передаваться значения параметров из JsonRpc-запроса. Вместо этого будет отрабатывать стандартное получение экземпляров из DI-контейнера Laravel и передача их в качестве параметров.

Игнорирование публичных методов контроллеров
============================================

[](#игнорирование-публичных-методов-контроллеров)

По умолчанию в схему маршрутизации попадают все публичные методы всех контроллеров, найденных в указанном в конфигурации пространстве имен. Если вам необходимо исключить из маршрутизации часть методов - воспользуйтесь аннотацией/атрибутом `ApiIgnore` и `ApiIgnoreMethod`:

```
use Tochka\JsonRpc\Annotations\ApiIgnore;
use Tochka\JsonRpc\Annotations\ApiIgnoreMethod;

/**
 * Использование аннотации/атрибута @ApiIgnore для класса исключает все методы класса из маршрутизации
 * @ApiIgnore()
 */
 #[ApiIgnore]
class ApiController extends BaseController
{
    // ...
}

/**
 * Использование аннотации/атрибута @ApiIgnoreMethod для класса исключает указанные методы из маршрутизации
 * @ApiIgnoreMethod(name="methodNameFoo")
 * @ApiIgnoreMethod(name="methodNameBar")
 */
 #[ApiIgnoreMethod('methodNameFoo')]
 #[ApiIgnoreMethod('methodNameBar')]
class ApiController extends BaseController
{
    /**
    * Использование аннотации/атрибута @ApiIgnore для метода исключает указанный метод из маршрутизации
    * @ApiIgnore()
    */
    #[ApiIgnore]
    public function fooMethod()
    {
        // ...
    }

    public function barMethod()
    {
        // ...
    }
}
```

Как это работает
================

[](#как-это-работает)

Клиент посылает валидный JsonRpc2.0-запрос:

```
{
    "jsonrpc": "2.0",
    "method": "client_getInfoById",
    "params": {
        "clientCode": "100500",
        "fromAgent" : true
    },
    "id": "service-ab34f8290cfa367dacb"
 }
```

JsonRpc сервер пытается найти указанный метод `client_getInfoById`. Имя метода разбивается на части: `имяКонтроллера_имяМетода`. Класс контроллера ищется по указанному пространству имен (параметр `jsonrpc.controllerNamespace`) с указанным суффиксом (по умолчанию `Controller`). Для нашего примера сервер попытается подключить класс 'App\\Http\\Controller\\ClientController'. Если контроллер не существует - клиенту вернется ошибка `Method not found`. В найденном контроллере вызывается метод `getInfoById`.

Все переданные параметры будут переданы в метод по именам. То есть в контроллере должен быть метод `getInfoById($clientCode, $fromAgent)`. Все параметры будут отвалидированы по типам (если типы указаны). Кроме того, таким способом можно указывать необязательные параметры в методе - в таком случае их необязательно передавать в запросе, вместо непереданных параметров будут использованы значения по умолчанию из метода. Если не будет передан один из обязательных параметров - клиенту вернется ошибка.

Несколько вызовов в одном запросе
=================================

[](#несколько-вызовов-в-одном-запросе)

По спецификации JsonRpc разрешено вызывать несколько методов в одном запросе. Для этого необходимо валидные JsonRpc2.0-вызовы передать в виде массива. Каждый вызываемый метод будет вызван из соответствующего контроллера, а вернувшиеся результаты будут возвращены клиенту в том порядке, в котором пришли запросы.

В ответе клиенту всегда присутствует параметр id, если таковой был передан клиентом. Данный параметр также позволяет идентифицировать ответы на свои запросы на стороне клиента.

Документация JsonRpc
====================

[](#документация-jsonrpc)

Для документирования JsonRpc используется спецификация OpenRpc ().

Для генерации OpenRpc-схемы можете использовать совместимый с текущей версией jsonrpc-server пакет [tochka-developers/openrpc](https://github.com/tochka-developers/openrpc)

Обновление с v3 до v4
=====================

[](#обновление-с-v3-до-v4)

1. Исправьте версию в вашем composer.json на `"tochka-developers/jsonrpc": "^4.0"` и обновите пакет.
2. Дополните конфигурацию `jsonrpc.php` следующими атрибутами:

- endpoint
- dynamicEndpoint
- summary
- description
- controllerSuffix (по умолчанию: `Controller`)
- methodDelimiter (по умолчанию: `_`)

Описание параметров и возможные значения смотрите выше в разделе описания конфигурации 3. Поправьте скрипты сборки/деплоя prod-версии приложения, добавив в них команду сборки и кеширования маршрутов: `php artisan jsonrpc:route:cache`

###  Health Score

62

—

FairBetter than 99% of packages

Maintenance70

Regular maintenance activity

Popularity39

Limited adoption so far

Community24

Small or concentrated contributor base

Maturity96

Battle-tested with a long release history

 Bus Factor2

2 contributors hold 50%+ of commits

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~37 days

Recently: every ~123 days

Total

88

Last Release

54d ago

Major Versions

v1.1.19b → v2.0.0a2018-05-16

v1.1.20 → v2.0.4a2018-05-21

v2.3.1 → v3.0.0-beta12019-12-18

v3.3.0 → v4.0.0-rc12021-05-17

v4.x-dev → v5.x-dev2026-03-25

PHP version history (7 changes)1.0.0PHP &gt;=5.6.4

v2.0.0aPHP &gt;=7.1.0

v3.0.0PHP &gt;=7.2

v4.0.0-rc1PHP &gt;=7.4

v4.5.0PHP 8.0.\*|8.1.\*|8.2.\*

v4.9.0PHP 8.0.\*|8.1.\*|8.2.\*|8.3.\*

v4.10.0PHP 8.2.\*|8.3.\*|8.4.\*

### Community

Maintainers

![](https://www.gravatar.com/avatar/d5ec14fdcb7d670c749bdfe547cdcae4dd77a1eb173f01c6787217c8ef90b1d5?d=identicon)[tochka-developers](/maintainers/tochka-developers)

![](https://www.gravatar.com/avatar/dc33cf2a905842e2b7b452bb04d75ba24943d1c22fcffa8aa393d04c0ba20f3c?d=identicon)[darkdarin](/maintainers/darkdarin)

---

Top Contributors

[![lexxksb](https://avatars.githubusercontent.com/u/622791?v=4)](https://github.com/lexxksb "lexxksb (7 commits)")[![NBZ4live](https://avatars.githubusercontent.com/u/605126?v=4)](https://github.com/NBZ4live "NBZ4live (2 commits)")[![orlovtech](https://avatars.githubusercontent.com/u/5249166?v=4)](https://github.com/orlovtech "orlovtech (2 commits)")[![Hatsunyan](https://avatars.githubusercontent.com/u/7223705?v=4)](https://github.com/Hatsunyan "Hatsunyan (1 commits)")[![Serganbus](https://avatars.githubusercontent.com/u/9009595?v=4)](https://github.com/Serganbus "Serganbus (1 commits)")[![xdloc](https://avatars.githubusercontent.com/u/12979331?v=4)](https://github.com/xdloc "xdloc (1 commits)")[![yekhlakov](https://avatars.githubusercontent.com/u/15815146?v=4)](https://github.com/yekhlakov "yekhlakov (1 commits)")

---

Tags

jsonrpclaravellaraveljsonrpc

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/tochka-developers-jsonrpc/health.svg)

```
[![Health](https://phpackages.com/badges/tochka-developers-jsonrpc/health.svg)](https://phpackages.com/packages/tochka-developers-jsonrpc)
```

###  Alternatives

[larastan/larastan

Larastan - Discover bugs in your code without running it. A phpstan/phpstan extension for Laravel

6.4k43.5M5.2k](/packages/larastan-larastan)[laravel/passport

Laravel Passport provides OAuth2 server support to Laravel.

3.4k85.0M532](/packages/laravel-passport)[spatie/laravel-responsecache

Speed up a Laravel application by caching the entire response

2.8k8.2M51](/packages/spatie-laravel-responsecache)[laravel/mcp

Rapidly build MCP servers for your Laravel applications.

71510.9M66](/packages/laravel-mcp)[roots/acorn

Framework for Roots WordPress projects built with Laravel components.

9682.1M97](/packages/roots-acorn)[laravel/folio

Page based routing for Laravel.

608453.9k27](/packages/laravel-folio)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
