PHPackages                             tochka-developers/openrpc - 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/openrpc

ActiveLibrary[API Development](/categories/api)

tochka-developers/openrpc
=========================

OpenRpc extension for tochka-developers/jsonrpc

v1.6.1(5mo ago)66614MITPHPPHP 8.1.\*|8.2.\*|8.3.\*|8.4.\*

Since Jun 16Pushed 1mo ago4 watchersCompare

[ Source](https://github.com/tochka-developers/openrpc)[ Packagist](https://packagist.org/packages/tochka-developers/openrpc)[ RSS](/packages/tochka-developers-openrpc/feed)WikiDiscussions master Synced 3w ago

READMEChangelog (10)Dependencies (10)Versions (22)Used By (0)

OpenRpc (Laravel/Lumen)
=======================

[](#openrpc-laravellumen)

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

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

Пакет для автоматической генерации документации JsonRpc-сервера по стандарту OpenRpc (). Совместим с пакетом `tochka-developers/jsonrpc`&gt;=v4.0

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

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

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

```
composer require tochka-developers/openrpc
```

### Laravel

[](#laravel)

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

```
php artisan vendor:publish
```

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

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

### Lumen

[](#lumen)

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

```
mkdir config
```

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

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

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

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

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

```
$app->register(\Tochka\OpenRpc\OpenRpcServiceProvider::class);
```

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

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

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

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

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

Укажите в конфигурации `openrpc.endpoint` точку входа для получения схемы OpenRpc:

```
'endpoint' => '/api/openrpc.json'
```

В дальнейшем эта точка входа будет использована для Service Discovery Method.

Кеширование
===========

[](#кеширование)

OpenRpc может кешировать схему с описанием JsonRpc, чтобы не собирать ее каждый раз при вызове endpoint. Для создания кеша используйте команду artisan:

```
php artisan openrpc:cache
```

После выполнения этой команды будет выполнена сборка схемы и сохранена в файл кеша. При каждом следующем обращении к OpenRpc будет использован именно этот файл, повторной пересборки происходить не будет.

Если файла с кешем нет - схема каждый раз будет собираться заново.

Чтобы очистить кеш - используйте команду artisan:

```
php artisan openrpc:clear
```

Рекомендуется запускать команду кеширования сразу после деплоя перед запуском приложения.

Как использовать
================

[](#как-использовать)

Аннотации и атрибуты
--------------------

[](#аннотации-и-атрибуты)

Некоторые пометки или уточнения для классов, методов и полей могут использовать аннотации () или атрибуты (). Все классы аннотаций/атрибутов обратно совместимы и могут работать и как аннотации (для версии PHP&lt;8), и как атрибуты (для версии PHP&gt;=8). Примеры использования аннотаций:

```
use Tochka\JsonRpc\Annotations\ApiIgnore;
use Tochka\JsonRpc\Annotations\ApiValueExample;
use Tochka\JsonRpc\Annotations\ApiArrayShape;

/**
* @ApiIgnore()
*/
class TestDTO
{
    /**
    * @ApiValueExample(examples={1, 5, 6})
    */
    public ?int $int;

    /**
     * @ApiArrayShape(shape={"test": "string", "foo": "int", "bar": "array", "object": FooObject::class})
     */
    public array $testShape;
}
```

Пример использования атрибутов:

```
use Tochka\JsonRpc\Annotations\ApiIgnore;
use Tochka\JsonRpc\Annotations\ApiValueExample;
use Tochka\JsonRpc\Annotations\ApiArrayShape;

#[ApiIgnore]
class TestDTO
{
    #[ApiValueExample(examples: [1, 5, 6])]
    public ?int $int;

    #[ApiArrayShape(shape: ['test' => 'string', 'foo' => 'int', 'bar' => 'array', 'object' => FooObject::class])]
    public array $testShape;
}
```

Расширенное описание
--------------------

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

Во многих объектах спецификации OpenRpc есть поле description, которое позволяет использовать MarkDown разметку. Для более удобной организации есть возможность выносить эти описания в отдельные файлы с расширением .md, и затем в описании ссылаться на них:

```
'description' => '$views/docs/description.md'
```

В данном случае вместо указанного текста в поле подставится содержимое файла `resources/views/docs/description.md`. Будьте внимательны! Документы должны находиться в папке resources, так как путь к файлу строится относительно этой директории.

Основная информация
-------------------

[](#основная-информация)

Вся основная информация о вашем приложении заполняется в конфигурации `openrpc.php`. В дефолтной конфигурации описаны все поля, а также приведены примеры

Информация о серверах (ендпойнты)
---------------------------------

[](#информация-о-серверах-ендпойнты)

Ваше приложение может иметь несколько точек входа с разным списком методов. Все возможные конфигурации точек входа JsonRpc-сервера описываются в конфигурации `jsonrpc.php`. Для корректного вывода информации о точках входа в OpenRpc необходимо добавить еще несколько полей в конфигурацию каждого сервера JsonRpc:

```
/** Адрес endpoint для текущего сервера */
'endpoint' => '/api/v1/public/jsonrpc',
/** Базовая информация о сервере/точки входа */
'summary' => 'Основная точка входа',
/** Расширенное описание сервера/точки входа */
'description' => 'Основная точка входа',
```

Информация о методах
--------------------

[](#информация-о-методах)

OpenRpc собирает информацию о доступных методах, получая информацию о [маршрутах из JsonRpc-сервера](https://github.com/tochka-developers/jsonrpc#%D0%BC%D0%B0%D1%80%D1%88%D1%80%D1%83%D1%82%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F-%D1%80%D0%BE%D1%83%D1%82%D0%B8%D0%BD%D0%B3).

Информация о формате запроса
----------------------------

[](#информация-о-формате-запроса)

Если в методе используется аннотация/атрибут [`ApiMapRequestToObject`](https://github.com/tochka-developers/jsonrpc#%D0%BC%D0%B0%D0%BF%D0%BF%D0%B8%D0%BD%D0%B3-%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2-%D0%B2-dto-%D0%B8-%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D0%B3%D0%BE-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%B0), то в качестве параметров метода будут указаны поля класса, в который JsonRpc будет маппить запрос.

Если используется стандартное прокидывание параметров запроса в параметры метода - то OpenRpc будет собирать информацию об используемых параметрах из этих параметров метода. При этом учитывается типизация, а также дополнительной описание параметров с помощью PhpDoc (тег `@param`).

Вы можете уточнять тип вложенных в массив элементов также с помощью тегов `@param` и `@return`:

```
/**
 * @param array $foo Описание параметра FOO
 * @param string[] $bar Описание параметра BAR
 * @return Result[]
 */
public function myMethod(array $foo, array $bar): array
{
    // ...
}
```

Если в качестве типа указан какой-либо класс - OpenRpc попытается описать внутреннюю структуру класса.

По умолчанию выбираются все публичные поля класса. Кроме того, учитываются поля, описанные в phpDoc (помеченные атрибутом `@property`).

В качестве типа аргумента всегда выбирается тип поля. Поле считается обязательным, если у него нет дефолтного значения.

Если в качестве типа поля указан `array` - вы можете уточнить тип элементов массива с помощью phpDoc в атрибуте `@var`:

```
class TestDTO
{
    /** @var array */
    public array $field;

    /** @var MyObject[] */
    public array $objects;
}
```

Если в качестве типа указан экземпляр `BenSampo\Enum\Enum` - OpenRpc автоматически получит все варианты значений для поля, и попытается вычислить тип. Информация о возможных значениях будет отражена в схеме.

Если в качестве типа указан экземпляр `Illuminate\Database\Eloquent\Model` - OpenRpc получит все возможные поля из phpDoc (как указано выше), а затем попытается отфильтровать их в соответствии с правилами, указанными в hidden и visible ()

Для указания примеров значений для аргумента используйте аннотацию/атрибут `ApiValueExample`:

```
use Tochka\JsonRpc\Annotations\ApiValueExample;

class TestDTO
{
    #[ApiValueExample(examples: [1, 3, 5])]
    public int $field;

    /**
     * @ApiValueExample(examples={"foo", "bar"}}
     */
    public string $foo;
}
```

Для указания вариантов возможных значений (если не используется Enum) - используйте аннотацию/атрибут `ApiExpectedValues`:

```
use Tochka\JsonRpc\Annotations\ApiExpectedValues;

class TestDTO
{
    #[ApiExpectedValues(values: [1, 3, 5])]
    public int $field;

    /**
     * @ApiExpectedValues(values={"foo", "bar"}}
     */
    public string $foo;
}
```

Для указания формата объекта (если для него нет отдельного класса) - используйте аннотацию/атрибут `ApiArrayShape`:

```
use Tochka\JsonRpc\Annotations\ApiArrayShape;

class TestDTO
{
    #[ApiArrayShape(shape: ['test' => 'string', 'foo' => 'int', 'bar' => 'array', 'object' => FooObject::class])]
    public int $field;

    /**
     * @ApiArrayShape(shape={"test": "string", "foo": "int", "bar": "array", "object": FooObject::class}}
     */
    public string $foo;
}
```

Первая строка описания поля в phpDoc считается summary - и отображается в кратком описании аргумента в схеме. Вторая и следующие строки описания поля в phpDoc считаются description - и отображаются в полном описании аргумента в схеме. При этом разрешено ссылаться на MarkDown файл:

```
class TestDTO
{
    /**
     * Это будет summary
     * А вот это будет description
     */
    public int $someField;

    /**
     * Это будет summary
     * $views/docs/description.md // содержимое этого файла будет description
     */
    public string $foo;
}
```

### Информация об ответе

[](#информация-об-ответе)

OpenRpc забирает информацию о формате ответа из типа, указанного в качестве результата метода. При этом тип может быть указан также в phpDoc этого метода. При этом все возможности OpenRpc, описанные в предыдущем пункте для запросов - будут также работать и для описания формата ответа.

Кроме того, дополнительно есть возможность описать формат ответа с помощью атрибута/аннотации `ApiArrayShape`:

```
use Tochka\JsonRpc\Annotations\ApiArrayShape;

class TestController
{
    #[ApiArrayShape(shape: ['test' => 'string', 'foo' => 'int', 'bar' => 'array', 'object' => FooObject::class])]
    public function someMethod(): array
    {
        return [];
    }

    /**
     * @ApiArrayShape(shape={"test": "string", "foo": "int", "bar": "array", "object": FooObject::class}}
     */
    public function fooMethod(): array
    {
        return [];
    }
}
```

Также аннотацию/атрибут `ApiArrayShape` можно использовать для описания структуры класса:

```
use Tochka\JsonRpc\Annotations\ApiArrayShape;

/**
 * @ApiArrayShape(shape={"test": "string", "foo": "int", "bar": "array", "object": FooObject::class})
 */
class MyResultClass
{
    //...
}
```

Также эту аннотацию можно использовать для переопределения структуры какого либо свойства класса:

```
use Tochka\JsonRpc\Annotations\ApiArrayShape;

class MyResultClass
{
    #[ApiArrayShape(shape: ['test' => 'string', 'foo' => 'int', 'bar' => 'array', 'object' => FooObject::class])]
    public SomeClass $property;
}
```

### Примеры запросов и ответов

[](#примеры-запросов-и-ответов)

*В разработке...*

### Ошибки

[](#ошибки)

*В разработке...*

###  Health Score

53

—

FairBetter than 96% of packages

Maintenance83

Actively maintained with recent releases

Popularity21

Limited adoption so far

Community14

Small or concentrated contributor base

Maturity79

Established project with proven stability

 Bus Factor1

Top contributor holds 66.7% of commits — single point of failure

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 ~94 days

Recently: every ~10 days

Total

20

Last Release

34d ago

Major Versions

v0.2.1 → v1.0.02021-09-17

v1.6.0 → v2.0.0-beta.42026-01-13

v1.6.1 → v2.0.0-beta.22026-04-08

PHP version history (4 changes)v0.1.0PHP &gt;=7.4

v1.4.0PHP &gt;=8.0

v1.5.0PHP 8.1.\*|8.2.\*|8.3.\*

v1.6.0PHP 8.1.\*|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

[![yekhlakov](https://avatars.githubusercontent.com/u/15815146?v=4)](https://github.com/yekhlakov "yekhlakov (2 commits)")[![BayanValit](https://avatars.githubusercontent.com/u/53220897?v=4)](https://github.com/BayanValit "BayanValit (1 commits)")

---

Tags

laraveljsonrpcopenrpc

###  Code Quality

TestsPHPUnit

### Embed Badge

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

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

###  Alternatives

[larastan/larastan

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

6.4k51.0M7.6k](/packages/larastan-larastan)[laravel/ai

The official AI SDK for Laravel.

9782.1M161](/packages/laravel-ai)[illuminate/queue

The Illuminate Queue package.

20432.2M1.5k](/packages/illuminate-queue)[spatie/laravel-responsecache

Speed up a Laravel application by caching the entire response

2.8k8.7M64](/packages/spatie-laravel-responsecache)[laravel/mcp

Rapidly build MCP servers for your Laravel applications.

76518.2M119](/packages/laravel-mcp)[psalm/plugin-laravel

Psalm plugin for Laravel

3345.1M337](/packages/psalm-plugin-laravel)

PHPackages © 2026

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