“Webhook vs API” là một trong những tìm kiếm mà ẩn chứa một câu hỏi hay hơn bên dưới. Nếu bạn đã từng kết nối một thanh toán Stripe hoặc tích hợp GitHub, bạn có thể đã tự hỏi: webhook chẳng phải cũng là một API sao? Câu trả lời ngắn gọn là webhook không phải là đối lập của API. Nó là một API hoạt động theo hướng ngược lại.
Hướng dẫn này sẽ làm rõ sự nhầm lẫn. Bạn sẽ thấy điều gì thực sự phân biệt hai thứ này, tại sao chúng không phải là lựa chọn hoặc cái này hoặc cái kia, và làm thế nào để chọn đúng cái cho một công việc cụ thể. Nếu bạn xây dựng hoặc kiểm tra các tích hợp, Apidog cho phép bạn thiết kế, mô phỏng và kiểm thử cả các điểm cuối API thông thường và các bộ nhận webhook ở một nơi, nhờ đó sự phân biệt sẽ không còn trừu tượng nữa.
Câu trả lời ngắn gọn
- Một API thông thường, loại yêu cầu-phản hồi mà hầu hết mọi người thường nhắc đến, chờ bạn yêu cầu. Bạn gửi một yêu cầu, nó gửi lại một phản hồi. Bạn kiểm soát thời gian.
- Một webhook đảo ngược điều đó. Nhà cung cấp gửi dữ liệu đến máy chủ của bạn ngay khi có điều gì đó xảy ra. Bạn không hỏi; bạn nhận được thông báo.
- Cả hai đều truyền qua HTTP. Cả hai thường gửi JSON. Một webhook thường được gọi là "API ngược" hoặc "API đẩy" chính vì lý do này.
Vì vậy, không phải là webhook đấu với API. Mà là kéo (pull) đấu với đẩy (push).
Mọi người muốn nói gì khi nhắc đến “API”
Khi ai đó nói “gọi API,” họ thường muốn nói đến một REST API: một giao diện yêu cầu-phản hồi nơi mã của bạn thực hiện yêu cầu HTTP đến một URL và nhận dữ liệu trở lại. Bạn kiểm soát khi nào nó chạy. Muốn biết trạng thái đơn hàng mới nhất? Bạn gọi GET /orders/123 và đọc phản hồi. Không có gì xảy ra cho đến khi bạn yêu cầu.
Đây là mô hình kéo (pull). Nó đơn giản, dễ đoán và rất phù hợp khi bạn cần dữ liệu theo yêu cầu. Đánh đổi: để nắm bắt một thay đổi, bạn phải liên tục hỏi. Nếu bạn muốn xem lại cách một yêu cầu và phản hồi được xây dựng, hãy xem hiểu cấu trúc yêu cầu API.
Webhook là gì
Webhook là một HTTP callback do người dùng định nghĩa. Bạn đăng ký một URL với nhà cung cấp, ví dụ https://yourapp.com/webhooks/stripe. Khi một sự kiện xảy ra ở phía họ, nhà cung cấp sẽ gửi một HTTP POST đến URL của bạn kèm theo dữ liệu sự kiện.
Bây giờ bạn là người nhận, không phải người gọi. Máy chủ của bạn chờ đợi, và nhà cung cấp sẽ đẩy một bản cập nhật khi có điều gì đó đáng thông báo cho bạn. Đó là mô hình đẩy (push). Webhook là cách Stripe thông báo cho bạn rằng một khoản thanh toán đã hoàn tất, cách GitHub thông báo cho bạn rằng mã đã được đẩy lên, và cách Slack thông báo cho ứng dụng của bạn rằng ai đó đã chạy một lệnh. Để tìm hiểu sâu hơn về phía nhận, hãy xem webhook API là gì.
Webhook và API: sự khác biệt cốt lõi
| API thông thường (REST) | Webhook | |
|---|---|---|
| Ai khởi xướng trao đổi | Bạn (máy khách) | Nhà cung cấp (máy chủ) |
| Mô hình | Yêu cầu-phản hồi (kéo) | Hướng sự kiện (đẩy) |
| Thời điểm | Bất cứ khi nào bạn gọi | Ngay khi một sự kiện xảy ra |
| Hướng | Bạn gọi nhà cung cấp | Nhà cung cấp gọi điểm cuối của bạn |
| Tốt nhất cho | Dữ liệu theo yêu cầu và các hành động bạn khởi xướng | Phản ứng với các sự kiện mà bạn không thể dự đoán |
| Chi phí chính | Bạn phải thăm dò để nắm bắt các thay đổi | Bạn phải lưu trữ và bảo mật một điểm cuối công khai |
Hàng quan trọng nhất là hàng đầu tiên. Hướng của cuộc gọi là toàn bộ sự khác biệt. Mọi thứ khác đều bắt nguồn từ đó.
“Webhook chẳng phải cũng là một API sao?” Câu trả lời thật lòng
Vừa đúng vừa không, và sắc thái này đáng để hiểu rõ.
Một webhook sử dụng các thành phần cơ bản giống như bất kỳ API nào: HTTP, URL, tiêu đề và phần thân JSON. Theo nghĩa đó, webhook là một cuộc gọi API; nhà cung cấp đóng vai trò là máy khách và điểm cuối của bạn đóng vai trò là máy chủ. Rất nhiều nhóm tài liệu hóa webhook của họ ngay bên cạnh các điểm cuối REST của họ. OpenAPI 3.1 thậm chí còn thêm một trường `webhooks` chuyên dụng để mô tả chúng, và Apidog có thể nắm bắt chúng theo cùng một cách (xem callback và webhook của OpenAPI).
Vậy cách hiểu chính xác là: webhook là một mô hình giao tiếp API cụ thể, không phải là một công nghệ riêng biệt. Khi mọi người nói “webhook vs API,” điều họ thực sự đang so sánh là API yêu cầu-phản hồi của nhà cung cấp với cơ chế đẩy sự kiện của cùng nhà cung cấp đó. Cả hai đều thuộc cùng một bề mặt sản phẩm.
Khi nào nên sử dụng cái nào
Sử dụng một cuộc gọi API thông thường khi:
- Bạn cần dữ liệu tại một thời điểm cụ thể, như khi tải một trang hoặc chạy một báo cáo.
- Bạn đang thực hiện một hành động: tạo một khoản phí, cập nhật một bản ghi, gửi một tin nhắn.
- Dữ liệu thay đổi theo lịch trình của bạn, chứ không phải của nhà cung cấp.
Sử dụng một webhook khi:
- Bạn cần biết ngay lập tức khi có điều gì đó thay đổi và bạn không thể dự đoán được khi nào.
- Việc thăm dò sẽ lãng phí, giống như việc kiểm tra mỗi vài giây một sự kiện chỉ xảy ra hai lần một ngày.
- Nhà cung cấp kiểm soát thời gian: một khoản thanh toán được giải quyết, một bản dựng hoàn thành, một tệp tin hoàn tất xử lý.
Nếu lựa chọn thực sự của bạn là giữa webhook và việc liên tục kiểm tra lại một điểm cuối, sự đánh đổi cụ thể đó có hướng dẫn riêng: webhooks vs polling.
Chúng hoạt động cùng nhau, và thường là như vậy
Cách phân loại webhook vs API trở nên vô nghĩa trong thực tế vì các tích hợp thực sự sử dụng cả hai. Stripe là một ví dụ điển hình:
- Bạn gọi API của Stripe (yêu cầu-phản hồi) để tạo ý định thanh toán.
- Stripe xử lý nó trong nền.
- Stripe gọi webhook của bạn (đẩy sự kiện) khi thanh toán thành công hoặc thất bại.
Bạn cần API để bắt đầu hành động và webhook để biết kết quả. Không cái nào thay thế cái nào. Một tích hợp đáng tin cậy gần như luôn kết hợp một API đi ra để thực hiện hành động với một webhook đi vào cho các sự kiện. Để biết mô hình thiết kế rộng hơn, hãy xem cách xây dựng API hướng sự kiện.
Webhook vs WebSocket vs thăm dò
Ba thuật ngữ này thường bị lẫn lộn, vì vậy đây là phiên bản tóm tắt một dòng của từng loại:
- Webhook vs thăm dò: cả hai đều giúp bạn cập nhật; thăm dò hỏi đi hỏi lại, webhook chờ được thông báo.
- Webhook vs WebSocket: webhook là một HTTP POST duy nhất cho mỗi sự kiện; WebSocket là một kết nối hai chiều, liên tục cho các luồng dữ liệu liên tục. Phân tích đầy đủ tại webhook vs WebSocket.
- Webhook vs API: chủ đề ở đây; nó phụ thuộc vào hướng của cuộc gọi.
Cách thiết kế và kiểm thử cả hai với Apidog
Webhook khá khó để phát triển. Điểm cuối của bạn phải nhận được các yêu cầu POST thực tế trước khi bạn có thể tin tưởng nó, và các nhà cung cấp sẽ không kích hoạt các sự kiện thử nghiệm theo lịch trình của bạn.
Apidog xử lý cả hai khía cạnh của mối quan hệ:
- Thiết kế và kiểm thử các điểm cuối yêu cầu-phản hồi của bạn bằng các kịch bản kiểm thử trực quan và khẳng định, không yêu cầu kịch bản.
- Gửi một yêu cầu POST được tạo sẵn đến bộ nhận webhook của riêng bạn, để bạn có thể xây dựng và xác thực trình xử lý trước khi các sự kiện thực tế đến.
- Tài liệu hóa các webhook đi ra của bạn cùng với các điểm cuối REST bằng OpenAPI, để người dùng thấy được toàn bộ hợp đồng.
Bởi vì thiết kế, mô phỏng, kiểm thử và tài liệu đều nằm trong một không gian làm việc, bạn xử lý bộ nhận webhook giống như bất kỳ hợp đồng API nào khác. Tải Apidog để xây dựng và kiểm thử cả hai ở một nơi.
Câu hỏi thường gặp
Webhook có phải là API không? Webhook là một mô hình giao tiếp API, không phải là một công nghệ riêng biệt. Nó sử dụng HTTP, URL và payload JSON giống như bất kỳ cuộc gọi API nào. Sự khác biệt là nhà cung cấp gọi điểm cuối của bạn thay vì bạn gọi điểm cuối của họ, đó là lý do tại sao một số người gọi nó là API ngược.
Bạn có thể sử dụng webhook mà không cần API không? Hiếm khi tự mình. Hầu hết các quy trình làm việc gọi API của nhà cung cấp để bắt đầu một thứ gì đó, sau đó dựa vào webhook để nhận phản hồi. Cả hai bổ sung cho nhau. Xem webhook API là gì để biết cách xây dựng phía nhận.
Webhook có nhanh hơn API không? Đối với việc phản ứng với các sự kiện, có, bởi vì bạn nhận được thông báo ngay lập tức khi có điều gì đó xảy ra thay vì phải thăm dò và chờ đợi lần kiểm tra tiếp theo. Để tìm nạp dữ liệu theo yêu cầu, một cuộc gọi API trực tiếp là công cụ phù hợp.
Webhook có thay thế REST API không? Không. Chúng phục vụ các nhu cầu khác nhau: REST cho các yêu cầu và hành động theo yêu cầu, webhook cho các thông báo sự kiện thời gian thực. Các hệ thống sản xuất thường chạy cả hai.
Webhook có an toàn không? Một webhook phơi bày một điểm cuối công khai, vì vậy bạn phải xác minh rằng mỗi yêu cầu là chính hãng, thường bằng cách kiểm tra chữ ký mà nhà cung cấp gửi. Xem xác minh chữ ký webhook.
Kết luận
"Webhook vs API" hóa ra là một cách nhìn sai. Một API thông thường chờ bạn hỏi; một webhook thông báo cho bạn ngay khi có điều gì đó xảy ra. Một bên kéo, một bên đẩy, và hầu hết các tích hợp đều chạy cả hai cùng lúc. Chọn cuộc gọi API khi bạn kiểm soát thời gian, và webhook khi nhà cung cấp kiểm soát.
Khi bạn sẵn sàng xây dựng một trong hai phía, hãy thiết kế, mô phỏng và kiểm thử các điểm cuối và bộ nhận webhook của bạn cùng nhau trong Apidog.
