feat(markdown): ::: containers and includes as CommonMark extensions
uk/docs/api/json-rpc-bundle/functionality/batch.md
+31
−25
1
1
# Batch запити
2
−
<info>
3
2
3
+
:::info
4
4
**Batch запити до API** — це підхід, який дозволяє об'єднати кілька запитів в один. Замість того, щоб надсилати численні окремі запити до сервера, клієнт може надіслати один запит, який містить кілька операцій. Сервер отримує цей запит, обробляє всі операції та повертає одну загальну відповідь, яка включає результати всіх запитів.
5
−
</info>
5
+
:::
6
6
7
7
## Проблематика
8
8
24
24
2. **Зручність для клієнта**: Клієнт може самостійно визначити, які саме запити потрібно об'єднати, що робить API більш гнучким і зручним для використання.
25
25
3. **Зниження складності бекенду**: Замість того, щоб писати та підтримувати спеціалізовані методи для різних сценаріїв, можна використовувати універсальний підхід з batch запитами, що спрощує архітектуру бекенду.
26
26
27
−
<success>
27
+
:::success
28
28
Такий підхід забезпечує більш ефективне використання ресурсів і покращує продуктивність, зменшуючи навантаження на мережу і сервери, а також поліпшує досвід користувача.
29
−
</success>
29
+
:::
30
30
31
−
<warning subtitle='Застереження'>
31
+
:::warning subtitle="Застереження"
32
32
У високонавантажених системах подібниій сценарій буде не ефективним, проте існують інші варіанти оптимізацій, які ми розглянемо в інших статтях.
33
−
</warning>
34
−
33
+
:::
35
34
36
35
**Приклад**
37
36
38
37
Розглянемо запит, приклад якого я наводив вище
39
−
<columns>
40
−
<col>
41
38
39
+
:::::columns
40
+
::::col
42
41
**Request**
43
42
44
43
```json
59
58
}
60
59
]
61
60
```
62
−
<warning subtitle='Важливо!!!'>
61
+
62
+
:::warning subtitle="Важливо!!!"
63
63
Завжди вказуйте в butch запитах унікальні ід запиту, бо відповіді можуть повертатися в іншому порядку.
64
−
</warning>
65
−
</col>
66
−
<col>
64
+
:::
65
+
::::
66
+
67
+
:::col
67
68
**Response**
68
69
69
70
```json
88
89
}
89
90
]
90
91
```
91
−
</col></columns>
92
+
:::
93
+
:::::
92
94
93
95
### Переваги batch запитів
94
96
111
113
112
114
### Залежні запити
113
115
114
−
<info>
116
+
:::info
115
117
Механізм batch запитів дозволяє створювати залежні запити. Це такий запит, один або кілька параметрів якого, залежать від відповіді з іншого запиту в переліку.
116
−
</info>
118
+
:::
117
119
118
120
Уявімо, що нам з фронтенда потрібно отримати email адресу користувача за його ідентифікатором, а потім відправити йому повідомлення на цю адресу. В нас вже існують методи UserService.getInfo та `Messenger.sendEmail`. В класичному сценарії це буде або два запити або необхідно створити на бекенді окремий метод, який буде відправляти email по id користувача.
119
121
120
122
Використовуючи бібліотеку `JsonRpcBundle` від UFO-Tech у вас є можливість створювати batch запити, де перший один запит може ставати залежним від іншого і буде отримувати його відповідь для запуску. В контексті прикладу ми в одному запиті отримаємо інформацію про користувача, а другий запит використує отриманий емейл для відправки повідомлення.
121
−
<columns>
122
−
<col>
123
+
124
+
::::columns
125
+
:::col
123
126
**Request**
124
127
125
128
```json
142
145
}
143
146
]
144
147
```
145
−
</col>
146
−
<col>
148
+
:::
149
+
150
+
:::col
147
151
**Response**
148
152
149
153
```json
163
167
}
164
168
]
165
169
```
166
−
</col></columns>
170
+
:::
171
+
::::
167
172
168
173
У цьому прикладі:
169
174
170
175
1. Перший запит отримує інформацію про користувача з id 141, включаючи його емейл.
171
176
2. Другий запит відправляє лист на отриманий емейл, використовуючи дані з першого запиту.
172
177
173
−
<info subtitle='Послідовність запитів не має значення!'>
178
+
:::info subtitle="Послідовність запитів не має значення!"
174
179
RPC Server сам визначає наявність залежність запитів і ставить їх в чергу в потрібній послідовності.
175
−
</info>
176
−
<warning>
180
+
:::
181
+
182
+
:::warning
177
183
Залежні запити виконуються послідовно, тож відповідь на batch запит повернеться після завершення залежних запитів.
178
−
</warning>
184
+
:::
179
185
180
186
### Переваги використання залежних запитів:
181
187