JsonRpcBundle

← JsonRpcBundle

Ashterix

docs: rewrite JsonRpcBundle docs, add SDK docs, move them under docs/api

uk/docs/api/json-rpc-bundle/README.md новий файл +93 −0

1 + # JsonRpcBundle
2 +
3 + :::block class="floatinginfobox"
4 + <include>(docs/api/json-rpc-bundle/.info.md)
5 + :::
6 +
7 + JSON-RPC 2.0 сервер для Symfony 7.2+ / 8 (PHP 8.4+).
8 +
9 + > Робити RPC сервіси для сервіс-орієнтованої архітектури на Symfony ще ніколи не було так просто.
10 +
11 + Будь-який сервіс вашого застосунку стає API: реалізуйте інтерфейс `IRpcService` — і його публічні методи доступні як JSON-RPC методи. Валідація, перетворення типів, безпека, кеш і документація OpenRPC беруться з коду, який ви вже написали.
12 +
13 + ## Від класу до API
14 +
15 + ::::columns
16 + :::col
17 + **Ваш код**
18 +
19 + ```php
20 + #[RPC\Info('User')]
21 + final class UserApi implements IRpcService
22 + {
23 + public function __construct(private UserService $users) {}
24 +
25 + /**
26 + * Returns a user by id
27 + * @throws UserNotFoundException
28 + */
29 + #[RPC\Cache(lifetimeSecond: RPC\Cache::T_HOUR)]
30 + public function get(int $id): UserDto
31 + {
32 + return $this->users->get($id);
33 + }
34 + }
35 + ```
36 + :::
37 +
38 + :::col
39 + **Запит**
40 +
41 + ```json
42 + {"jsonrpc": "2.0", "id": 1, "method": "User.get", "params": {"id": 5}}
43 + ```
44 +
45 + **Відповідь**
46 +
47 + ```json
48 + {
49 + "jsonrpc": "2.0",
50 + "id": 1,
51 + "result": {"id": 5, "email": "user@example.com", "name": "John"}
52 + }
53 + ```
54 + :::
55 + ::::
56 +
57 + Більше нічого писати не треба:
58 +
59 + * `GET /rpc` уже повертає документацію OpenRPC з методом `User.get`, схемою `UserDto` і помилкою з `@throws`, а `GET /rpc/postman` — готову колекцію Postman;
60 + * неправильний тип `id` поверне помилку `-32602` з поясненням по параметру;
61 + * у prod-оточенні відповідь кешується на годину;
62 + * той самий метод можна викликати з консолі, з черги Symfony Messenger, у batch разом з іншими методами — і, через розширення, як REST-ендпоінт чи інструмент для AI-агента.
63 +
64 + ## Чому JsonRpcBundle
65 +
66 + * **Документація не відстає від коду.** OpenRPC і Postman будуються з типів PHP, PHPDoc, DTO, enum і обмежень валідації; назви методів перекладаються за `Accept-Language` ([Документація API](/docs/api/json-rpc-bundle/documentation)).
67 + * **Один метод — багато транспортів.** HTTP, консоль, Symfony Messenger, а через розширення — REST, MCP, Mercure ([Асинхронність](/docs/api/json-rpc-bundle/functionality/async), [Виклик з консолі](/docs/api/json-rpc-bundle/functionality/cli)).
68 + * **Еволюція без болю.** Кілька [версій API](/docs/api/json-rpc-bundle/functionality/versions) поруч (`/rpc`, `/rpc/v2`) і кілька [груп API](/docs/api/json-rpc-bundle/functionality/groups) в одному застосунку — публічна, внутрішня, BFF — зі своїми методами й токенами.
69 + * **Менше запитів по мережі.** [Batch](/docs/api/json-rpc-bundle/functionality/batch) із залежностями `@FROM:<id>(<поле>)`, [notifications](/docs/api/json-rpc-bundle/functionality/notifications) «вистрілив і забув», результат на [webhook](/docs/api/json-rpc-bundle/functionality/callback).
70 + * **Декларативність замість рутини.** [Валідація](/docs/api/json-rpc-bundle/add_rpc_service/assertions), [DTO й конвертація типів](/docs/api/json-rpc-bundle/add_rpc_service/params), [кеш](/docs/api/json-rpc-bundle/add_rpc_service/cache) і [блокування](/docs/api/json-rpc-bundle/add_rpc_service/lock) — атрибутами на методі.
71 + * **Розширюваність.** [Події](/docs/api/json-rpc-bundle/functionality/events) навколо кожного виклику й точки розширення ядра ([Для розробників](/docs/api/json-rpc-bundle/developers)).
72 +
73 + :::info
74 + <include>(change_log/latest.md)
75 + :::
76 +
77 + ## Екосистема
78 +
79 + * **AI-агенти.** [MCP Bundle](/docs/api/mcp-bundle) відкриває ваші RPC-методи як інструменти для Claude Code, Cursor, Gemini CLI та OpenAI — без окремого коду.
80 + * **REST.** [REST Bundle](/docs/api/rest-bundle) публікує вибрані методи як REST API з документацією OpenAPI.
81 + * **Клієнти.** [JSON-RPC Client SDK](/docs/api/sdk/client) генерує PHP-клієнт з класами процедур і DTO, [RPC TS SDK](/docs/api/sdk/ts) — TypeScript-інтерфейси з документа OpenRPC.
82 + * **Правила для ШІ-асистентів.** [Файли інструкцій](/docs/api/json-rpc-bundle/developers/ai), щоб Claude Code, Codex чи Cursor правильно працювали з бандлом.
83 +
84 + Повний перелік — на сторінці [Розширення](/docs/api/json-rpc-bundle/developers/extensions).
85 +
86 + ## З чого почати
87 +
88 + 1. [Встановіть бандл](/docs/api/json-rpc-bundle/installation) — `composer require ufo-tech/json-rpc-bundle` і два конфігураційні файли.
89 + 2. [Додайте власні методи](/docs/api/json-rpc-bundle/add_rpc_service) і відкрийте `GET /rpc`, щоб побачити документацію.
90 + 3. Налаштуйте [безпеку й інші параметри](/docs/api/json-rpc-bundle/config).
91 + 4. Перегляньте [можливості](/docs/api/json-rpc-bundle/functionality/batch): batch, notifications, асинхронність, події.
92 +
93 + Не впевнені, чи підходить вам JSON-RPC? Прочитайте статтю [RPC, REST та GraphQL](/articles/api/rpc_vs_rest_vs_graphql) — коротко й практично про те, коли який підхід доречний.

uk/docs/api/json-rpc-bundle/.info.md +1 −1

49 49 ![php_version](https://img.shields.io/packagist/dependency-v/ufo-tech/json-rpc-bundle/php?logo=PHP&logoColor=white)
50 50 ![symfony_version](https://img.shields.io/packagist/dependency-v/ufo-tech/json-rpc-bundle/symfony/framework-bundle?label=Symfony&logo=Symfony&logoColor=white)
51 51 ![symfony_version](https://img.shields.io/packagist/dependency-v/ufo-tech/json-rpc-bundle/symfony/serializer?label=SymfonySerializer&logo=Symfony&logoColor=white)
52 − ![symfony version](https://img.shields.io/packagist/dependency-v/ufo-tech/json-rpc-bundle/symfony/serializer?label=SymfonyCache&logo=Symfony&logoColor=white)
52 + ![symfony_messenger](https://img.shields.io/packagist/dependency-v/ufo-tech/json-rpc-bundle/symfony/messenger?label=SymfonyMessenger&logo=Symfony&logoColor=white)
53 53 :::
54 54 ::::
55 55

uk/docs/api/json-rpc-bundle/change_log/latest.md новий файл +1 −0

1 + <include>(10.4.2.md)

uk/docs/api/json-rpc-bundle/change_log/10.4.2.md новий файл +17 −0

1 + ## Версія 10.4
2 +
3 + ### Ключові зміни
4 +
5 + * [Переклади для груп API](/docs/api/json-rpc-bundle/documentation): `translations/rpc/<group>.<locale>.yaml`; група важливіша за мову.
6 + * Переклади з розширень (`translations.paths`), публічний сервіс `RpcLocaleNegotiator`.
7 + * 10.4.1: `IApiRouteImport` — маршрути адаптера можна підключити окремо для кожної групи API.
8 + * 10.4.2: `RpcExecutor` — єдина точка входу для адаптерів (REST, MCP); `rpc.post_response` запускається для будь-якого джерела запиту і для кожного виконаного елемента batch.
9 +
10 + ### Що врахувати
11 +
12 + * Частковий базовий переклад: відсутній `description` береться з базового перекладу мовою `kernel.default_locale`, а не з атрибута / PHPDoc.
13 + * REST-виклики тепер отримують `rpc.post_response`: для них запрацюють зв'язки кешу й async/notification-лістенери.
14 +
15 + ### Зміни оточення
16 +
17 + * Без змін відносно 10.3.