Batch запити

← Batch запити

Ashterix

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