0

series Axios Bài 1: Axios Là Gì? Kiến Trúc "Lưỡng Cư" Và Bản Chất Giao Tiếp Mạng

Trong kỷ nguyên của ứng dụng Single Page (SPA) và kiến trúc Microservices, một ứng dụng không thể đứng cô độc một mình. Nó cần phải liên tục "nói chuyện" với các server khác để lấy dữ liệu, xác thực người dùng hoặc đẩy dữ liệu lên database.

Để làm được việc đó trong JavaScript, chúng ta cần một HTTP Client. Và cái tên uy tín, phổ biến nhất trong giới dev chính là Axios. Hôm nay, chúng ta sẽ cùng vén màn xem thư viện này có gì mà từ "lính mới" đến các Senior đều chọn nó làm vũ khí mặc định.

1. Axios Là Gì? Triết Lý "Isomorphic" Thiên Tài

Bản chất, Axios là một thư viện HTTP Client dựa trên Promise (Promise-based) dùng để gửi các yêu cầu HTTP (GET, POST, PUT, DELETE...) tới các máy chủ từ xa.

Điểm đắt giá nhất của Axios nằm ở từ khóa Isomorphic (hoặc Universal) — nghĩa là nó có thể chạy mượt mà ở cả hai môi trường hoàn toàn khác nhau bằng cùng một bộ mã nguồn:

  • Trình duyệt (Browser): Nơi người dùng lướt web.
  • Node.js (Server-side): Nơi xử lý logic backend.

Dưới nắp capo của Axios có gì? Để làm được điều kỳ diệu trên, Axios sở hữu một kiến trúc "lưỡng cư" cực thông minh. Khi chạy trên Browser, nó tự động sử dụng đối tượng XMLHttpRequest gốc của trình duyệt để gửi gói tin. Nhưng khi phát hiện mình đang chạy trên môi trường Server (Node.js), nó sẽ lập tức chuyển sang dùng module http hoặc https có sẵn của Node.js. Bạn là dev, bạn không cần quan tâm môi trường, chỉ cần gõ axios.get(), mọi thứ đã có Axios lo.

2. Trận Chiến Kinh Điển: Axios vs Native Fetch API

Nhiều bạn sẽ đặt câu hỏi: "Từ phiên bản ES6, JavaScript đã có sẵn hàm fetch() chạy ngon lành mà không cần cài thêm gì, tại sao tôi phải tốn dung lượng dự án để cài thêm Axios?".

Đó là một câu hỏi rất hay. fetch() rất tốt, nhưng nó chỉ dừng lại ở mức "đủ dùng". Khi bước vào các dự án Production thực tế với các yêu cầu bảo mật và tối ưu phức tạp, fetch() sẽ bộc lộ nhiều điểm yếu khiến bạn phải viết thêm rất nhiều code bổ trợ (Boilerplate code).

Hãy cùng nhìn vào bảng so sánh dưới góc nhìn thực chiến:

Tính năng Native Fetch API Axios
Xử lý JSON Phải làm thủ công qua 2 bước (.then(res => res.json())). Tự động chuyển đổi dữ liệu trả về thành JSON object.
Bắt lỗi HTTP (4xx, 5xx) Vẫn coi là thành công! Bạn phải tự check thuộc tính response.ok. Tự động ném vào block catch nếu status code nằm ngoài dải 2xx.
Đánh chặn (Interceptors) Không hỗ trợ mặc định, phải tự viết hàm bọc (Wrapper). Hỗ trợ tận răng (Cực mạnh khi làm tính năng tự động đính kèm Token).
Hủy yêu cầu (Cancellation) Khá rườm rà (Dùng AbortController). Rất trực quan và dễ quản lý (Dùng CancelToken hoặc AbortSignal).
Giám sát tiến độ (Progress) Rất khó để theo dõi tiến độ upload file. Hỗ trợ sẵn các hàm callback onUploadProgress.

3. Những Tính Năng Biến Axios Thành "Vua"

Bên cạnh việc dễ dùng hơn fetch(), Axios được các DevOps và Solution Architect ưu tiên lựa chọn nhờ 3 tính năng mang tính chiến lược mà chúng ta sẽ đào sâu ở các bài học tiếp theo:

  • Interceptors (Bộ trung chuyển gói tin): Cho phép bạn can thiệp vào gói tin ngay trước khi nó được gửi đi hoặc ngay sau khi nhận kết quả về. Hãy tưởng tượng bạn có 100 API cần đính kèm Token ở Header, thay vì sửa 100 nơi, bạn chỉ cần viết đúng 3 dòng code trong Axios Interceptor.
  • Protection chống tấn công CSRF: Axios có cơ chế tự động đọc cookie (mặc định là XSRF-TOKEN) và đính kèm nó vào HTTP Header của mọi request. Một tấm khiên bảo mật miễn phí cho hệ thống của bạn.
  • Tạo Instance linh hoạt: Bạn có thể tạo ra các "phiên bản" Axios khác nhau cho từng dịch vụ. Ví dụ: Instance A chuyên gọi sang cụm Microservice tài chính (timeout 5 giây, header bảo mật cao), Instance B chuyên gọi sang cụm Microservice thông báo (timeout 2 giây, không cần token).

Tóm lại là...

fetch() là một giải pháp cứu cánh tuyệt vời cho các script nhỏ gọn hoặc bài tập cơ bản. Nhưng đối với một hệ thống Enterprise, Axios là sự đầu tư xứng đáng nhờ tính nhất quán giữa frontend/backend, khả năng tự động hóa và các tính năng bảo mật tích hợp sẵn giúp code của bạn luôn "sạch" và dễ bảo trì.

Ở bài học số 2, chúng ta sẽ bắt đầu xắn tay áo lên để: Cài đặt, thiết lập Axios Instance chuẩn kiến trúc dự án và thực hiện trọn bộ các yêu cầu CRUD (GET, POST, PUT, DELETE) một cách chuẩn chỉ nhất.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí