docs: rewrite JsonRpcBundle docs, add SDK docs, move them under docs/api
uk/docs/api/rest-bundle/README.md
новий файл +83
−0
1
+
# REST Bundle
2
+
3
+
:::block class="floatinginfobox"
4
+
<include>(docs/api/rest-bundle/.info.md)
5
+
:::
6
+
7
+
REST API поверх методів [JsonRpcBundle](/docs/api/json-rpc-bundle) для Symfony 7.2+ / 8 (PHP 8.4+).
8
+
9
+
RPC-метод лишається єдиною реалізацією: атрибут Symfony `#[Route]` на методі RPC-процедури робить його доступним за власним шляхом і HTTP-методом. Параметри, валідація, безпека, кеш, події та документація беруться з ядра RPC; бандл додає HTTP-маршрути, REST-формат запитів і відповідей, помилки RFC 9457 і документи OpenAPI 3.1 та Postman.
10
+
11
+
:::info
12
+
Документація описує версію 1.3, яка ще не має тегу (останній реліз — 1.2.0). Те, що з'явилось лише в 1.3, позначено на сторінках. Див. [Історію змін](/docs/api/rest-bundle/change_log).
13
+
:::
14
+
15
+
## Від методу до REST
16
+
17
+
::::columns
18
+
:::col
19
+
**Ваш код**
20
+
21
+
```php
22
+
use Symfony\Component\Routing\Attribute\Route;
23
+
use Ufo\JsonRpcBundle\ApiMethod\Interfaces\IRpcService;
24
+
use Ufo\RpcObject\RPC;
25
+
26
+
#[RPC\Info('catalog')]
27
+
#[Route('/catalog', name: 'catalog')]
28
+
class CatalogApi implements IRpcService
29
+
{
30
+
#[Route('/items/{id}', name: 'item', methods: ['GET'])]
31
+
public function item(int $id): array
32
+
{
33
+
return ['id' => $id, 'title' => 'Book'];
34
+
}
35
+
}
36
+
```
37
+
:::
38
+
39
+
:::col
40
+
**Запит**
41
+
42
+
```bash
43
+
curl https://example.com/rest/catalog/items/42 \
44
+
-H 'Ufo-RPC-Token: change-me'
45
+
```
46
+
47
+
**Відповідь** `200`
48
+
49
+
```json
50
+
{"id": 42, "title": "Book"}
51
+
```
52
+
:::
53
+
::::
54
+
55
+
Що ви отримуєте без додаткового коду:
56
+
57
+
* `GET /rest` повертає документ OpenAPI 3.1 з операцією `catalog.item`, а `GET /rest/postman` — колекцію Postman;
58
+
* значення `42` зі шляху приводиться до `int` за сигнатурою методу (з 1.3);
59
+
* помилки — RFC 9457 problem details з HTTP-статусом (`401`, `404`, `405`, `422`, …);
60
+
* той самий метод і далі доступний через JSON-RPC: `POST /rpc` з `"method": "catalog.item"`.
61
+
62
+
## Чому REST Bundle
63
+
64
+
* **Одна реалізація — два протоколи.** Немає REST-контролера на кожен метод, другого набору DTO чи окремої валідації. [`#[RPC\Assertions]`](/docs/api/json-rpc-bundle/add_rpc_service/assertions), [`#[RPC\Cache]`](/docs/api/json-rpc-bundle/add_rpc_service/cache), [`#[RPC\Lock]`](/docs/api/json-rpc-bundle/add_rpc_service/lock) і [події](/docs/api/json-rpc-bundle/functionality/events) працюють для REST так само, як для JSON-RPC.
65
+
* **Публікація явна.** У REST потрапляє лише метод з `#[Route]`; решта лишається тільки в RPC ([Маршрутизація](/docs/api/rest-bundle/routing)).
66
+
* **Групи й версії API.** Окремий REST-вхід для кожної [групи API](/docs/api/json-rpc-bundle/functionality/groups) з власними методами, документацією і токенами; [версії](/docs/api/json-rpc-bundle/functionality/versions) під `/v2/...`.
67
+
* **Документація з коду.** OpenAPI і Postman будуються з RPC service map: типи, PHPDoc, `@throws`, переклади ([Документація API](/docs/api/rest-bundle/documentation)).
68
+
* **Без окремої конфігурації.** Бандл використовує налаштування `ufo_json_rpc`: безпеку, назву проєкту, переклади ([Налаштування](/docs/api/rest-bundle/config)).
69
+
70
+
:::info
71
+
<include>(change_log/latest.md)
72
+
:::
73
+
74
+
## З чого почати
75
+
76
+
1. [Встановіть бандл](/docs/api/rest-bundle/installation) — `composer require ufo-tech/rest-bundle` і файл маршрутів.
77
+
2. Додайте `#[Route]` до потрібних методів ([Маршрутизація](/docs/api/rest-bundle/routing)) і відкрийте `GET /rest`.
78
+
3. Перегляньте, як [передаються параметри](/docs/api/rest-bundle/requests) і як [повертаються помилки](/docs/api/rest-bundle/error_handling).
79
+
4. Налаштуйте [безпеку](/docs/api/rest-bundle/security).
80
+
81
+
Через REST недоступні JSON-RPC batch, notifications і `$rpc.callback`: один HTTP-запит — один виклик методу.
82
+
83
+
Як бандл влаштований усередині і як його розширювати — у розділі [Для розробників](/docs/api/rest-bundle/developers). Коли доречний REST, а коли RPC, — у статті [RPC, REST та GraphQL](/articles/api/rpc_vs_rest_vs_graphql).
uk/docs/api/rest-bundle/.info.md
новий файл +65
−0
1
+
:::::columns border="1" zebra="1"
2
+
::::row
3
+
:::col width="40%"
4
+
Скачати
5
+
:::
6
+
7
+
:::col
8
+
[Packagist](https://packagist.org/packages/ufo-tech/rest-bundle)<br>
9
+
[GitHub](https://github.com/UFO-Tech/rest-bundle)
10
+
:::
11
+
::::
12
+
13
+
::::row
14
+
:::col width="40%"
15
+
Актуальна версія
16
+
:::
17
+
18
+
:::col
19
+
[](https://packagist.org/packages/ufo-tech/rest-bundle)
20
+
:::
21
+
::::
22
+
23
+
::::row
24
+
:::col width="40%"
25
+
Категорія
26
+
:::
27
+
28
+
:::col
29
+
API
30
+
:::
31
+
::::
32
+
33
+
::::row
34
+
:::col width="40%"
35
+
Тип
36
+
:::
37
+
38
+
:::col
39
+
Symfony Bundle
40
+
:::
41
+
::::
42
+
43
+
::::row
44
+
:::col width="40%"
45
+
Залежності
46
+
:::
47
+
48
+
:::col
49
+

50
+

51
+
:::
52
+
::::
53
+
54
+
::::row
55
+
:::col width="40%"
56
+
Інші відомості
57
+
:::
58
+
59
+
:::col
60
+

61
+

62
+

63
+
:::
64
+
::::
65
+
:::::
uk/docs/api/rest-bundle/change_log/latest.md
новий файл +1
−0
1
+
<include>(1.2.md)
uk/docs/api/rest-bundle/change_log/1.2.md
новий файл +18
−0
1
+
## Версія 1.2
2
+
3
+
Тег 1.2.0, 2026-10-16.
4
+
5
+
### Ключові зміни
6
+
7
+
* Підтримка Symfony 8: `^7.2|^8.0`.
8
+
* Колекція Postman будується на `AbstractPostmanAdapter` JsonRpcBundle: назва `REST: <project_name>`, для групи, відмінної від `general`, — із суфіксом ` [група]`.
9
+
* `composer test` і `make test` запускають PHPUnit.
10
+
11
+
### Що врахувати
12
+
13
+
* Інструменти, що шукають колекцію Postman за назвою, побачать нову назву.
14
+
15
+
### Зміни оточення
16
+
17
+
* `ufo-tech/json-rpc-bundle` ^10.2.3.
18
+
* Symfony ^7.2 або ^8.0.