Nếu từng làm việc với các ứng dụng như GitHub, Stripe hay Slack, chắc hẳn bạn đã thấy webhook xuất hiện đâu đó trong phần cài đặt. Hay khi khách hàng feedback 1 sao về sản phẩm, thay vì phải liên tục kiểm tra xem phần feedback để kịp thời xử lý, bạn chỉ cần ngồi đợi webhook thông báo cho mình biết.
Vậy webhook là gì mà lại phổ biến đến vậy? Hãy cùng mình tìm hiểu trong bài viết sau đây nhé!
1. Webhook là gì?
Webhook là một cơ chế tự động giúp các ứng dụng trao đổi thông tin với nhau ngay khi có sự kiện xảy ra, mà không cần đợi yêu cầu từ bên nhận.
Hiểu một cách đơn giản, webhook giống như một thông báo tự động. Khi có một sự kiện nào đó xảy ra (chẳng hạn như khi có người thanh toán thành công trên website của bạn), webhook sẽ "đẩy" dữ liệu ngay lập tức đến một ứng dụng khác mà bạn chỉ định.
Điều này khác với cách mà API hoạt động, khi mà ứng dụng này phải chủ động "hỏi" thăm liên tục (polling) ứng dụng khác xem có gì mới hay không. Với webhook, bạn không cần phải đợi hay lặp lại các yêu cầu liên tục – tất cả đều diễn ra tức thì, giúp quy trình làm việc trơn tru và hiệu quả hơn.
Quay trở lại ví dụ: Khi khách hàng gửi feedback 1 sao, thay vì phải liên tục kiểm tra, bạn chỉ cần ngồi đợi, webhook sẽ tự động gửi thông báo ngay lập tức về hệ thống hay Telegram, để bạn kịp thời xử lý, quá tiện phải không nào?
2. Ứng dụng của Webhook trong thực tế
2.1 Thông báo theo thời gian thực
Khi một ứng dụng cần cập nhật ngay lập tức khi có thay đổi xảy ra, webhook là lựa chọn hợp lý.
Trong các ứng dụng chat hoặc nhắn tin, khi người dùng gửi tin nhắn, webhook có thể đẩy tin nhắn này đến người nhận ngay lập tức, mà không cần API phải kiểm tra xem có tin nhắn mới hay không. Các ứng dụng như Slack, Discord, và Microsoft Teams đều dùng webhook để xử lý thông báo và cập nhật trạng thái theo thời gian thực mà không tiêu tốn nhiều tài nguyên cho việc polling.
Các dịch vụ giám sát như Datadog hoặc New Relic sử dụng webhook để gửi cảnh báo khi phát hiện lỗi hoặc mức tải hệ thống vượt ngưỡng. Nếu dùng API, hệ thống phải liên tục kiểm tra trạng thái, gây lãng phí tài nguyên và làm giảm khả năng phản ứng nhanh với sự cố.
2.2 Tích hợp theo thời gian thực
Nếu bạn muốn tự động gửi dữ liệu đến một dịch vụ bên ngoài ngay khi có thay đổi xảy ra, webhook có thể giúp bạn làm được chuyện này. Tương tự với ví dụ về đánh giá 1 sao của khách hàng mà ở trên mình đã đề cập.
3. So sánh Webhook và API
Tính năng | API | Webhook |
---|---|---|
Định nghĩa | API là viết tắt của Application Programming Interface, cho phép các hệ thống phần mềm giao tiếp với nhau. | Webhook là một cơ chế giúp một hệ thống gửi dữ liệu thời gian thực đến hệ thống khác ngay khi có sự kiện xảy ra. |
Loại giao tiếp | Mô hình yêu cầu – phản hồi. | Mô hình dựa trên sự kiện. |
Khởi tạo | Yêu cầu xuất phát từ phía client. | Dữ liệu được gửi đi khi sự kiện xảy ra, không cần yêu cầu từ phía client. |
Truyền dữ liệu | Cơ chế kéo (pull) – client yêu cầu dữ liệu. | Cơ chế đẩy (push) – server tự động gửi dữ liệu khi có sự kiện. |
Cập nhật thời gian thực | Thông thường, các cập nhật không diễn ra tự động. | Cập nhật ngay khi sự kiện xảy ra, truyền tải dữ liệu thời gian thực. |
Polling | Cần kiểm tra (polling) thường xuyên để cập nhật. | Không cần polling, tiết kiệm tài nguyên và tối ưu hiệu suất. |
Khả năng mở rộng | Có thể gặp độ trễ cao hơn do cần polling thường xuyên. | Có khả năng mở rộng tốt hơn, hiệu quả hơn cho các cập nhật thời gian thực. |
Trường hợp sử dụng | Thích hợp cho các tình huống cần dữ liệu theo yêu cầu hoặc định kỳ. | Thích hợp cho các tình huống yêu cầu cập nhật ngay lập tức, như thông báo, ứng dụng chat, v.v. |
Ví dụ | RESTful API, SOAP API. | Webhook của GitHub, webhook của Stripe. |
Dùng Webhook: Khi bạn cần cập nhật ngay lập tức mỗi khi có sự kiện xảy ra, khi tích hợp với các hệ thống bên ngoài đòi hỏi tự động hóa theo sự kiện, hoặc khi cần tối ưu hóa tài nguyên bằng cách tránh polling liên tục.
4. Hướng dẫn cấu hình Webhook bằng Python
4.1 Tạo Flask App
- Bước 1: Tạo một file Python mới
webhook_listener.py
, để setup một server đơn giản có thể lắng nghe các sự kiện từ webhook. @app.route('/webhook', methods=['POST']): Đây là endpoint/webhook
sẽ lắng nghe các sự kiện từ webhook với phương thứcPOST
.
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/webhook', methods=['POST'])
def webhook():
# Lấy dữ liệu từ request
data = request.json
if data:
print("Dữ liệu nhận được từ webhook:", data)
# Thực hiện các xử lý cần thiết với dữ liệu nhận được ở đây
return jsonify({"message": "Webhook received successfully"}), 200
else:
return jsonify({"error": "No data received"}), 400
if __name__ == '__main__':
app.run(port=5000)
- Bước 2: Chạy Flask app bằng lệnh sau, mặc định là
http://127.0.0.1:5000
, bên dưới là hình mà mình gọi bằng Postman thành công
python webhook_listener.py
4.2 Cài đặt và chạy Ngrok
Để server Flask trên máy local của bạn có thể nhận yêu cầu từ dịch vụ bên ngoài, chúng ta sẽ dùng ngrok để tạo một đường public URL.
- Bước 1: Truy cập https://ngrok.com/download để tải về ngrok và cài đặt theo hướng dẫn.
- Bước 2: Đăng kí tài khoản và add authentoken như theo như hướng dẫn của ngrok, do thông tin này liên quan đến token nên mình sẽ không chụp ảnh lên nhé. Ngrok có hướng dẫn các bạn chạy từng câu lệnh nên cứ làm theo là được.
- Bước 2: Mở terminal, điều hướng đến thư mục chứa ngrok và chạy lệnh sau để kết nối ngrok với server Flask trên cổng
5000
ngrok http http://127.0.0.1:5000
Ngay lập tức, ngrok sẽ cung cấp cho bạn một public URL dạng https://... .ngrok-free.app
. URL này sẽ chuyển tiếp mọi yêu cầu đến server local của bạn.
4.3 Test Webhook
Bạn thay đường dẫn trong Postman bằng đường link public và ngrok cung cấp cho bạn và thực hiện kiểm tra lại một lần nữa. Kết quả trả về tương tự như với http://127.0.0.1:5000
nhưng thay vì chạy local thì các dịch vụ bên ngoài đã có thể gọi được vào app Flask của chúng ta.
Để thử nghiệm chạy thật bạn có thể gắn Webhook này vào các dịch vụ bên ngoài để lắng nghe các sự kiện, chúc bạn thành công nhé.
5. Kết luận
Thay vì để hệ thống mất thời gian và tài nguyên vào việc theo dõi các cập nhật, webhook giúp bạn nhận thông tin theo thời gian thực – nhanh chóng, hiệu quả, và cực kỳ tiết kiệm.
Các bài viết liên quan:
Bài viết liên quan
Vercel là gì? Hướng dẫn deploy dự án Next.js bằng Vercel
Dec 07, 2024 • 14 min read
Grafana Loki là gì? So sánh Loki và Elasticsearch
Nov 16, 2024 • 6 min read
Two-Factor Authentication (2FA) là gì? Vì sao chỉ Mật khẩu thôi là chưa đủ?
Nov 13, 2024 • 7 min read
ELK là gì? So sánh hiệu suất giữa ELK và PLG
Nov 06, 2024 • 9 min read
Docker Best Practices: Tối ưu Dung lượng Docker Image
Oct 30, 2024 • 8 min read
SQL Injection là gì? Những cách phòng ngừa SQL Injection
Oct 25, 2024 • 10 min read