WebHook
Webhook là một cơ chế cho phép ứng dụng của bạn nhận thông báo hoặc dữ liệu từ một ứng dụng khác thông qua HTTP POST request. Đây là một công cụ mạnh mẽ, đặc biệt hữu ích trong các hệ thống cần giao tiếp thời gian thực, chẳng hạn như thanh toán trực tuyến, dịch vụ email, hoặc thông báo sự kiện.
1. Webhook là gì?
Webhook là một callback HTTP được định cấu hình để ứng dụng bên ngoài gửi dữ liệu hoặc thông báo đến server của bạn khi có sự kiện xảy ra.
Hoạt động: Thay vì bạn phải liên tục "polling" để kiểm tra sự kiện, webhook sẽ tự động gửi thông báo đến một URL mà bạn đã đăng ký.
2. Kiến trúc Webhook
Hoạt động của Webhook
Cấu hình: Server của bạn cung cấp một URL webhook (endpoint) cho ứng dụng bên ngoài.
Sự kiện xảy ra: Ứng dụng bên ngoài phát hiện sự kiện (ví dụ: thanh toán hoàn thành).
Gửi thông báo: Ứng dụng bên ngoài gửi một HTTP POST request chứa dữ liệu liên quan đến sự kiện đến URL webhook.
Xử lý dữ liệu: Server của bạn nhận, xác thực, và xử lý dữ liệu.
3. Các bước triển khai Webhook
3.1. Tạo Endpoint nhận Webhook
Đầu tiên, tạo một endpoint để nhận thông báo từ webhook. Ví dụ với Spring Boot: Tạo Controller
3.2. Đăng ký Webhook
Ứng dụng của bạn cần cung cấp URL webhook cho dịch vụ bên ngoài. Ví dụ, với Stripe:
Cung cấp URL:
https://yourdomain.com/webhook/receive
.Định nghĩa sự kiện cần nhận (ví dụ:
payment_success
).
Lưu ý: Tùy từng dịch vụ, bạn có thể phải đăng ký thông qua giao diện web hoặc API.
3.3. Xác thực Webhook
Để đảm bảo dữ liệu đến từ nguồn hợp lệ:
Xác thực IP: Kiểm tra IP của request có nằm trong danh sách được phép.
HMAC Signature: Nhiều dịch vụ (như Stripe, PayPal) gửi kèm một chữ ký số (signature). Bạn cần xác minh chữ ký này.
3.4. Xử lý dữ liệu Webhook
Sau khi xác thực, bạn cần xử lý dữ liệu theo yêu cầu:
Lưu dữ liệu vào cơ sở dữ liệu.
Gửi thông báo đến các thành phần khác.
Thực hiện các hành động như cập nhật trạng thái đơn hàng.
7. Ưu và nhược điểm của Webhook
Ưu điểm:
Real-time: Dữ liệu được gửi ngay khi sự kiện xảy ra.
Hiệu quả: Giảm tải cho server so với polling.
Nhược điểm:
Khó debug: Cần công cụ như Ngrok để kiểm tra local.
Phụ thuộc vào mạng: Cần đảm bảo server luôn sẵn sàng.
Last updated