Notifications

← Notifications

Ashterix

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`.