Вікі-код для Результати у Callback

Остання зміна 2024/05/17 10:53 автором Ashterix

Показати останніх авторів
1 {{box cssClass="floatinginfobox" width="300px" title="**Зміст**"}}
2 {{toc/}}
3 {{/box}}
4
5 {{info}}
6 (% class="wikigeneratedid" %)
7 Іноді у вас може виникнути необхідність отримувати відповідь від запитів, що можуть опрацьовуватися довгий час. Виконувати їх синхронно може бути невдалою ідеєю, бо це призводить до блокування клієнта, затримок у відповіді і загального зниження продуктивності системи. У таких випадках функціональність callback після виконання запиту стає особливо корисною.
8
9 (% class="wikigeneratedid" %)
10 Замість того, щоб чекати на завершення всіх операцій, клієнт може отримати миттєве підтвердження про прийняття запиту. Після обробки запиту сервер надішле результат на вказаний callback URL, що дозволяє клієнту продовжувати свою роботу без затримок.
11 {{/info}}
12
13 (% class="wikigeneratedid" id="HCallback43F45644143B44F43243843A43E43D43043D43D44F" %)
14 Моя бібліотека надає можливість використовувати callback після виконання запиту. Це досягається за допомогою параметра {{code language="none"}}$rpc.callback{{/code}}, який містить DSN (Data Source Name).
15
16 Коли сервер отримує запит з цим параметром, він інтерпретує його як метод для асинхронного виклику. Тому після перевірки DSN, який вказаний як callback, миттєво повертає відповідь з підтвердженням про те, що запит буде відправлено на callback.
17
18 Ця функціональність дозволяє вказати, куди буде відправлено відповідь після обробки запиту. Це може бути POST запит на вебхук, який передасть об'єкт відповіді в тілі, або вебсокет.
19
20 = Алгоритм =
21
22 1. Отримати запит з параметром {{code language="none"}}$rpc.callback{{/code}}.
23 1. Провалідувати DSN.
24 1. Повернути миттєве підтвердження клієнту про прийняття запиту.
25 1. Обробити запит.
26 1. Відправити відповідь на вказаний в {{code language="none"}}$rpc.callback{{/code}} DSN.
27
28 = Приклад =
29
30 Уявімо, що ми керуємо інтернет-магазином, де користувачі можуть замовляти товари. Кожне замовлення потребує обробки, включаючи перевірку наявності товарів, розрахунок загальної вартості, і підтвердження оплати. Ці операції можуть займати деякий час.
31
32 Використовуючи {{code language="none"}}$rpc.callback{{/code}}, ми можемо значно покращити досвід користувачів. Наприклад, після того як користувач підтверджує замовлення, ми можемо одразу повернути йому повідомлення про те, що замовлення прийняте і обробляється, не чекаючи завершення всіх операцій.
33
34 (% class="row" %)
35 (((
36 (% class="col-xs-12 col-sm-6" %)
37 (((
38 Запит може виглядати так.
39
40 {{code language="json" layout="LINENUMBERS" title="Request /api"}}
41 {
42 "id": "example_order",
43 "method": "OrderService.processOrder",
44 "params": {
45 "orderId": "12345",
46 "$rpc.callback": "https://example.com/order/callback"
47 }
48 }
49 {{/code}}
50
51 (% class="box warningmessage" %)
52 (((
53 Наразі, DSN що ви можете вказати в цей параметр має містити лише HTTPS протокол!
54 )))
55
56 (% class="box errormessage" %)
57 (((
58 Протокол HTTP не підтримується з міркувань безпеки даних.
59 )))
60
61 (% class="box infomessage" %)
62 (((
63 В майбутніх планах розширення переліку протоколів, що підтримуються.
64 )))
65 )))
66
67 (% class="col-xs-12 col-sm-6" %)
68 (((
69 У відповідь користувач одразу отримує  підтвердження.
70
71 {{code language="json" layout="LINENUMBERS" title="Response from /api"}}
72 {
73 "id": "example_order",
74 "result": {
75 "callback": {
76 "url": "https://example.com/order/callback",
77 "status": true,
78 "data": []
79 }
80 }
81 }
82 {{/code}}
83
84 Після опрацювання запиту на DSN, що був вказаний як callback буде відправлено повідомлення.
85
86 {{code language="json" layout="LINENUMBERS" title="Callback Request"}}
87 {
88 "id": "example_order",
89 "result": {
90 "orderId": "12345",
91 "status": "completed",
92 "totalAmount": 99.99,
93 "message": "Your order has been processed successfully."
94 }
95 }
96 {{/code}}
97 )))
98 )))
99
100 = Переваги =
101
102 1. **Миттєве підтвердження**: Клієнт отримує швидку відповідь про прийняття запиту, не чекаючи його повної обробки.
103 1. **Асинхронна обробка**: Запит обробляється асинхронно, а результат відправляється на вказаний callback.
104 1. **Гнучкість**: Можливість вказати різні типи callback, такі як вебхуки або вебсокети, для отримання результатів.
105
106 Ця функціональність підвищує ефективність взаємодії з API, забезпечуючи швидке підтвердження прийняття запиту та зручність отримання результатів обробки.