Результати у Callback
Моя бібліотека надає можливість використовувати callback після виконання запиту. Це досягається за допомогою параметра $rpc.callback, який містить DSN (Data Source Name).
Коли сервер отримує запит з цим параметром, він інтерпретує його як метод для асинхронного виклику. Тому після перевірки DSN, який вказаний як callback, миттєво повертає відповідь з підтвердженням про те, що запит буде відправлено на callback.
Ця функціональність дозволяє вказати, куди буде відправлено відповідь після обробки запиту. Це може бути POST запит на вебхук, який передасть об'єкт відповіді в тілі, або вебсокет.
Алгоритм
- Отримати запит з параметром $rpc.callback.
- Провалідувати DSN.
- Повернути миттєве підтвердження клієнту про прийняття запиту.
- Обробити запит.
- Відправити відповідь на вказаний в $rpc.callback DSN.
Приклад
Уявімо, що ми керуємо інтернет-магазином, де користувачі можуть замовляти товари. Кожне замовлення потребує обробки, включаючи перевірку наявності товарів, розрахунок загальної вартості, і підтвердження оплати. Ці операції можуть займати деякий час.
Використовуючи $rpc.callback, ми можемо значно покращити досвід користувачів. Наприклад, після того як користувач підтверджує замовлення, ми можемо одразу повернути йому повідомлення про те, що замовлення прийняте і обробляється, не чекаючи завершення всіх операцій.
Запит може виглядати так.
2
3
4
5
6
7
8
"id": "example_order",
"method": "OrderService.processOrder",
"params": {
"orderId": "12345",
"$rpc.callback": "https://example.com/order/callback"
}
}
У відповідь користувач одразу отримує підтвердження.
2
3
4
5
6
7
8
9
10
"id": "example_order",
"result": {
"callback": {
"url": "https://example.com/order/callback",
"status": true,
"data": []
}
}
}
Після опрацювання запиту на DSN, що був вказаний як callback буде відправлено повідомлення.
2
3
4
5
6
7
8
9
"id": "example_order",
"result": {
"orderId": "12345",
"status": "completed",
"totalAmount": 99.99,
"message": "Your order has been processed successfully."
}
}
Переваги
- Миттєве підтвердження: Клієнт отримує швидку відповідь про прийняття запиту, не чекаючи його повної обробки.
- Асинхронна обробка: Запит обробляється асинхронно, а результат відправляється на вказаний callback.
- Гнучкість: Можливість вказати різні типи callback, такі як вебхуки або вебсокети, для отримання результатів.
Ця функціональність підвищує ефективність взаємодії з API, забезпечуючи швидке підтвердження прийняття запиту та зручність отримання результатів обробки.