Версія 1.1 додана 2024/05/17 10:35 автором Ashterix

Показати останніх авторів
1 {{box cssClass="floatinginfobox" title="**Зміст**"}}
2 {{toc/}}
3 {{/box}}
4
5 (% class="wikigeneratedid" id="HCallback43F45644143B44F43243843A43E43D43043D43D44F" %)
6 Моя бібліотека надає можливість використовувати callback після виконання запиту. Це досягається за допомогою параметра {{code language="none"}}$rpc.callback{{/code}}, який містить DSN (Data Source Name).
7
8 Коли сервер отримує запит з цим параметром, він інтерпретує його як метод для асинхронного виклику. Тому після перевірки DSN, який вказаний як callback, миттєво повертає відповідь з підтвердженням про те, що запит буде відправлено на callback.
9
10 Ця функціональність дозволяє вказати, куди буде відправлено відповідь після обробки запиту. Це може бути POST запит на вебхук, який передасть об'єкт відповіді в тілі, або вебсокет.
11
12
13 = Алгоритм =
14
15 1. Отримати запит з параметром {{code language="none"}}$rpc.callback{{/code}}.
16 1. Провалідувати DSN.
17 1. Повернути миттєве підтвердження клієнту про прийняття запиту.
18 1. Обробити запит.
19 1. Відправити відповідь на вказаний в {{code language="none"}}$rpc.callback{{/code}} DSN.
20
21 = Приклад =
22
23 Уявімо, що ми керуємо інтернет-магазином, де користувачі можуть замовляти товари. Кожне замовлення потребує обробки, включаючи перевірку наявності товарів, розрахунок загальної вартості, і підтвердження оплати. Ці операції можуть займати деякий час.
24
25 Використовуючи {{code language="none"}}$rpc.callback{{/code}}, ми можемо значно покращити досвід користувачів. Наприклад, після того як користувач підтверджує замовлення, ми можемо одразу повернути йому повідомлення про те, що замовлення прийняте і обробляється, не чекаючи завершення всіх операцій.
26
27 (% class="row" %)
28 (((
29 (% class="col-xs-12 col-sm-6" %)
30 (((
31 Запит може виглядати так.
32
33 {{code language="json" layout="LINENUMBERS" title="Request /api"}}
34 {
35 "id": "example_order",
36 "method": "OrderService.processOrder",
37 "params": {
38 "orderId": "12345",
39 "$rpc.callback": "https://example.com/order/callback"
40 }
41 }
42 {{/code}}
43
44 (% class="box warningmessage" %)
45 (((
46 Наразі, DSN що ви можете вказати в цей параметр має містити лише HTTPS протокол!
47 )))
48
49 (% class="box errormessage" %)
50 (((
51 Протокол HTTP не підтримується з міркувань безпеки даних.
52 )))
53
54 (% class="box infomessage" %)
55 (((
56 В майбутніх планах розширення переліку протоколів, що підтримуються.
57 )))
58 )))
59
60 (% class="col-xs-12 col-sm-6" %)
61 (((
62 У відповідь користувач одразу отримує  підтвердження.
63
64 {{code language="json" layout="LINENUMBERS" title="Response from /api"}}
65 {
66 "id": "example_order",
67 "result": {
68 "callback": {
69 "url": "https://example.com/order/callback",
70 "status": true,
71 "data": []
72 }
73 }
74 }
75 {{/code}}
76
77 Після опрацювання запиту на DSN, що був вказаний як callback буде відправлено повідомлення.
78
79 {{code language="json" layout="LINENUMBERS" title="Callback Request"}}
80 {
81 "id": "example_order",
82 "result": {
83 "orderId": "12345",
84 "status": "completed",
85 "totalAmount": 99.99,
86 "message": "Your order has been processed successfully."
87 }
88 }
89 {{/code}}
90
91
92 )))
93 )))
94
95
96 :
97
98 {{code language="json" layout="LINENUMBERS" title="Immediate Response"}}
99 {
100 "id": "order_12345",
101 "result": "Order received and is being processed. You will be notified upon completion."
102 }
103 {{/code}}
104
105 Після завершення всіх операцій, наш сервер відправляє результат на вказаний вебхук:
106
107 {{code language="json" layout="LINENUMBERS" title="Callback Response"}}
108 {
109 "orderId": "12345",
110 "status": "completed",
111 "totalAmount": 99.99,
112 "message": "Your order has been processed successfully."
113 }
114 {{/code}}
115
116 == Приклад: ==
117
118 {{code language="json" layout="LINENUMBERS" title="Request"}}
119 {
120 "id": "example_1",
121 "method": "ExampleApi.someMethod",
122 "params": {
123 "someParam": "someValue",
124 "$rpc.callback": "http://example.com/webhook"
125 }
126 }
127 {{/code}}
128
129 {{code language="json" layout="LINENUMBERS" title="Immediate Response"}}
130 {
131 "id": "example_1",
132 "result": "Request accepted, response will be sent to the callback URL"
133 }
134 {{/code}}
135
136 == Переваги використання callback: ==
137
138 1. **Миттєве підтвердження**: Клієнт отримує швидку відповідь про прийняття запиту, не чекаючи його повної обробки.
139 2. **Асинхронна обробка**: Запит обробляється асинхронно, а результат відправляється на вказаний callback.
140 3. **Гнучкість**: Можливість вказати різні типи callback, такі як вебхуки або вебсокети, для отримання результатів.
141
142 Ця функціональність підвищує ефективність взаємодії з API, забезпечуючи швидке підтвердження прийняття запиту та зручність отримання результатів обробки.