docs: rewrite JsonRpcBundle docs, add SDK docs, move them under docs/api
uk/docs/api/json-rpc-bundle/functionality/notifications.md
новий файл +50
−0
1
+
# Notifications
2
+
3
+
:::info
4
+
Доступно з версії 10.1.
5
+
:::
6
+
7
+
За специфікацією JSON-RPC 2.0 запит без `id` — це notification: клієнт не чекає результату. Сервер не повертає на нього відповідь, а одиночна notification по HTTP отримує `204 No Content` з порожнім тілом.
8
+
9
+
```bash
10
+
curl -i -X POST https://example.com/rpc \
11
+
-H 'Content-Type: application/json' -H 'Ufo-RPC-Token: <token>' \
12
+
-d '{"jsonrpc": "2.0", "method": "audit.log", "params": {"event": "login"}}'
13
+
# HTTP/1.1 204 No Content
14
+
```
15
+
16
+
Сигнатура методу не змінюється, його результат відкидається. Тож notifications підходять для дій «вистрілив і забув»: аудит, метрики, відправка повідомлень.
17
+
18
+
## Коли виконується метод
19
+
20
+
Метод виконується на події `rpc.post_response`, тобто **після** відправлення відповіді клієнту:
21
+
22
+
* під PHP-FPM — після `fastcgi_finish_request()`, клієнт не чекає;
23
+
* в інших SAPI (Apache mod_php, вбудований сервер) метод теж виконується, навіть якщо клієнт уже закрив з'єднання (з 10.3), але HTTP-воркер зайнятий до завершення методу.
24
+
25
+
Виконання логується через `LoggerInterface` на рівні `info`.
26
+
27
+
## Від'єднане виконання
28
+
29
+
Для рідкісних довгих notifications можна виконувати їх у від'єднаному процесі `ufo:rpc:process`, щоб не тримати HTTP-воркер:
30
+
31
+
```yaml
32
+
ufo_json_rpc:
33
+
notification:
34
+
process: true
35
+
process_count: 2 # від'єднаних процесів одночасно (1–10); коли всі зайняті — виконується inline
36
+
```
37
+
38
+
Запит виконується рівно один раз: якщо від'єднаний процес не забрав його за 3 секунди, воркер виконує його сам. Те саме стосується [`$rpc.callback`](/docs/api/json-rpc-bundle/functionality/callback).
39
+
40
+
:::warning
41
+
Кожен від'єднаний процес завантажує Symfony kernel (~200–300 мс CPU). Під навантаженням це повільніше за звичайне виконання, тож вмикайте опцію лише для рідкісних довгих методів.
42
+
:::
43
+
44
+
## Notifications у batch
45
+
46
+
У [batch](/docs/api/json-rpc-bundle/functionality/batch) notification виконується згідно з режимом batch, але відповіді на неї немає. Batch лише з notifications повертає `204` без тіла.
47
+
48
+
## Оновлення з 10.0
49
+
50
+
Клієнти, які надсилали запити без `id` і чекали на результат, мають передавати `id`.