Xin chào ! Nếu đây là lần đầu tiên bạn đến với diễn đàn, xin vui lòng danh ra một phút bấm vào đây để đăng kí và tham gia thảo luận cùng VnPro.

Announcement

Collapse
No announcement yet.

Hai loại gọi API calls

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Hai loại gọi API calls

    🎓 [DevOps Lecture] – Hiểu đúng về hai loại gọi API: Synchronous vs Asynchronous


    Trong môi trường DevOps hiện đại, việc tương tác với các hệ thống thông qua REST APIs là chuyện hằng ngày. Nhưng có một khía cạnh quan trọng mà các junior thường bỏ qua hoặc chưa hiểu rõ: API call không phải lúc nào cũng trả kết quả ngay lập tức. Chúng ta có hai cách chính mà một API có thể xử lý một yêu cầu từ client:

    Click image for larger version

Name:	API_CallType7.png
Views:	0
Size:	25.1 KB
ID:	429682 1️⃣ Synchronous API Call – Gọi đồng bộ

    🧩 Cách hoạt động:
    • Khi client gửi một HTTP request (ví dụ: POST, GET, v.v.), API sẽ chờ xử lý xong yêu cầu rồi mới trả phản hồi về cho client.
    • Kết quả trả về có thể là:
      • 200 OK nếu thành công,
      • hoặc các mã lỗi như 400 Bad Request, 500 Internal Server Error tùy theo kết quả thực thi.
    • Phản hồi cũng thường đi kèm với dữ liệu (JSON/XML).
    ❗ Vấn đề có thể xảy ra:
    • Nếu yêu cầu cần thời gian xử lý dài (long-running task), client sẽ bị treo hoặc timeout.
    • Ví dụ: một REST API thực hiện backup hệ thống hoặc deploy một service lớn có thể mất vài phút → gây timeout cho client nếu chờ quá lâu.

    2️⃣ Asynchronous API Call – Gọi không đồng bộ

    🧩 Cách hoạt động:
    • Khi client gửi yêu cầu, API trả phản hồi gần như ngay lập tức, chỉ đơn giản xác nhận rằng: “Yêu cầu đã được nhận và sẽ xử lý sau.”
    • Tại thời điểm đó, không có dữ liệu kết quả, cũng không có thông tin về thành công hay thất bại.
    • Client sẽ cần phải lấy kết quả sau này, bằng một trong hai cách:

      Polling (thăm dò định kỳ):
      Client định kỳ gọi một API endpoint khác để hỏi: “Kết quả xử lý đã xong chưa?”

      Callback URL (Webhook):
      Khi gửi yêu cầu ban đầu, client kèm theo một callback URL. Khi server xử lý xong, nó sẽ gọi lại URL này để gửi kết quả.

    🚀 Lợi ích của gọi không đồng bộ
    • Khả năng mở rộng cao hơn: Các yêu cầu không cần phải xếp hàng để chờ xử lý.
    • Thích hợp cho các tác vụ dài (như báo cáo, backup, xử lý hình ảnh, gửi email hàng loạt…).
    • Có thể xử lý nhiều yêu cầu song song, vì bạn không bị buộc phải chờ từng cái một hoàn thành.
    ⚠️ Lưu ý quan trọng:
    • Vì các yêu cầu có thể kết thúc theo bất kỳ thứ tự nào, client phải có khả năng xử lý các phản hồi không theo trình tự.
    • Ví dụ: yêu cầu thứ hai có thể hoàn tất trước yêu cầu đầu tiên. Do đó, bạn không nên giả định rằng các phản hồi sẽ đến theo thứ tự bạn gửi request.

    📦 Webhook là gì?


    Webhook là một hình thức asynchronous callback API call – cực kỳ phổ biến trong tự động hóa DevOps:
    • Bạn đăng ký một sự kiện (ví dụ: deploy hoàn tất, webhook từ GitHub, alert từ Prometheus, v.v.).
    • Khi sự kiện đó xảy ra, hệ thống sẽ tự động gọi đến URL callback của bạn – bất kể bạn có đang chờ sẵn hay không.

    ➡️ Webhook là trái tim của nhiều hệ thống tích hợp CI/CD và monitoring.
    🔧 Tóm lại, khi nào dùng gì?

    Truy vấn nhanh dữ liệu ✅ Synchronous
    Gửi command nhỏ (bật/tắt 1 thiết bị) ✅ Synchronous
    Backup hệ thống, xử lý ảnh, build docker ✅ Asynchronous
    Deploy CI/CD pipeline ✅ Asynchronous (có thể callback về Slack, Teams…)

    💡 Tips dành cho Junior DevOps:
    • Với những API mất quá 10–15 giây, nên ưu tiên dùng async với callback hoặc polling.
    • Khi làm việc với webhook, luôn ghi log lại nội dung nhận được và bảo mật endpoint callback bằng token hoặc xác minh IP nguồn.
    • Học cách dùng các thư viện như aiohttp, asyncio, hoặc requests-futures nếu dùng Python để hỗ trợ async REST calls hiệu quả hơn.
    Đặng Quang Minh, CCIEx2#11897 (Enterprise Infrastructure, Wireless), DEVNET, CCSI#31417

    Email : dangquangminh@vnpro.org
    https://www.facebook.com/groups/vietprofessional/
Working...
X