Facebook Pixel

Webhook là gì? So sánh Webhook và API

14 Nov, 2024

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

Webhook là gì? So sánh Webhook và API

Mục Lục

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 API: Khi bạn cần truy xuất dữ liệu chủ động theo yêu cầu, cần thao tác phức tạp với hệ thống, hoặc khi dữ liệu cần được kiểm tra định kỳ mà không cần cập nhật tức thì.

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ức POST.
Python
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
Bash
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
Bash
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

Lập trình backend expressjs

xây dựng hệ thống microservices
  • Kiến trúc Hexagonal và ứng dụngal font-
  • TypeScript: OOP và nguyên lý SOLIDal font-
  • Event-Driven Architecture, Queue & PubSubal font-
  • Basic scalable System Designal font-

Đăng ký nhận thông báo

Đừng bỏ lỡ những bài viết thú vị từ 200Lab