Вікі-код для Callback після виконання
Показати останніх авторів
author | version | line-number | content |
---|---|---|---|
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, забезпечуючи швидке підтвердження прийняття запиту та зручність отримання результатів обробки. |