API là gì? Tại sao mọi app, mọi web hiện đại đều cần

API là 'bồi bàn' của web — truyền yêu cầu giữa frontend và backend, giữa app của bạn và Stripe/Google/Zalo. Hiểu API giúp bạn ước lượng chi phí dev, chọn dịch vụ tích hợp và đọc được lỗi 401/500.

12 phút đọcCập nhật 2026-05-19
Đang tải audio...
Mục lục bài viết(21)
Sơ đồ REST API — client gửi HTTP request tới server, server trả về JSON response

Sơ đồ mô hình REST — các khái niệm chính (resource, representation, identifier, state) và mối quan hệ. REST là cách thiết kế API mà 90% web/app hiện nay dùng: client gửi HTTP request đến URL của resource, server trả về representation (thường là JSON). Nguồn: Wikimedia Commons (CC BY-SA 4.0).

Hiểu đơn giản nhất

API là bồi bàn trong nhà hàng. Quay lại analogy từ bài Frontend vs Backend:

  • Khách (frontend) ngồi ở phòng khách, không vào bếp được.
  • Bếp (backend) lo nấu món, không ra phòng khách giao tận tay.
  • Bồi bàn (API) ở giữa — biết menu, nhận order từ khách, truyền vào bếp, mang món ra cho khách.

Mỗi tương tác có ý nghĩa trên web hay app — đăng nhập, xem giỏ hàng, đặt món, gửi tin nhắn — đều là một lần frontend gọi API tới backend. Mọi web/app hiện đại đều chạy trên hàng chục, hàng trăm API call mỗi phút.

API viết tắt từ Application Programming Interface — "giao diện để các phần mềm nói chuyện với nhau".

Tại sao bạn cần biết

  • Hiểu chi phí phát triển. "Tích hợp thanh toán VNPay" = build API integration. "App có chat realtime" = thêm WebSocket API. Mỗi API integration thường là 3-10 ngày dev = 15-50 triệu.
  • Chọn dịch vụ thay vì tự build. Cần gửi SMS? Dùng API Twilio hoặc eSMS — tiết kiệm 3 tháng tự build. Cần OCR ảnh? Dùng API Google Vision — tiết kiệm hàng triệu chi phí ML. Quy tắc: cái gì có sẵn API trưởng thành, đừng tự build.
  • Đọc được lỗi dev báo cáo. "API trả 401" = lỗi xác thực, sai token. "API trả 500" = lỗi server. "API trả 429" = bạn gọi quá nhanh, bị rate-limit. Hiểu code = không bị "ru ngủ" bởi giải thích lòng vòng.
  • Tránh hoá đơn cloud bất ngờ. OpenAI, Google Maps, AWS tính tiền theo lượt gọi API. Một bug làm app gọi API 1.000 lần/phút có thể tạo hoá đơn vài chục triệu trong 1 đêm.

API hoạt động thế nào — anatomy của 1 API call

Mỗi lần API "nói chuyện" gồm 2 phần: Request (order của khách) và Response (món bếp trả ra).

Request — gửi yêu cầu

Có 4 thành phần:

Thành phầnVí dụVai trò
MethodGET, POST, PUT, DELETELoại hành động: đọc / tạo / sửa / xoá
URL endpoint (điểm cuối — URL của một API)https://api.shopee.vn/products/123Địa chỉ tài nguyên cụ thể
HeadersAuthorization: Bearer abc123Ai gọi, token (chuỗi xác thực) gì, ngôn ngữ
Body (chỉ POST/PUT){ "name": "Áo thun", "price": 200000 }Dữ liệu kèm theo

4 method chính (gọi là HTTP verb) tương ứng 4 hành động CRUD (Create-Read-Update-Delete — 4 thao tác: tạo, đọc, sửa, xoá):

  • GET — đọc dữ liệu (xem sản phẩm, xem giỏ hàng)
  • POST — tạo mới (đặt đơn, đăng ký tài khoản)
  • PUT / PATCH — sửa (update profile, đổi số lượng trong giỏ)
  • DELETE — xoá (huỷ đơn, xoá comment)

Response — bếp trả món

Có 2 thành phần chính:

Status code (3 chữ số) cho biết kết quả:

CodeÝ nghĩaKhi gặp
200OK — thành côngRequest hợp lệ, có data trả về
201Created — tạo thành côngSau POST tạo mới
400Bad RequestFrontend gửi data sai format
401UnauthorizedChưa đăng nhập hoặc token hết hạn
403ForbiddenĐăng nhập rồi nhưng không có quyền
404Not FoundResource không tồn tại
429Too Many RequestsBị rate-limit, gọi quá nhanh
500Internal Server ErrorBackend bị lỗi
503Service UnavailableServer quá tải hoặc đang bảo trì

Body thường là JSON (định dạng trao đổi data phổ biến):

{
  "id": 123,
  "name": "Áo thun nam",
  "price": 200000,
  "in_stock": true,
  "reviews": {
    "average": 4.5,
    "count": 89
  }
}

JSON đọc dễ cho người (giống dictionary tiếng Việt) và máy tính.

REST — kiểu API phổ biến nhất

REST (REpresentational State Transfer) là kiểu thiết kế API mà 90% web/app dùng. Quy tắc REST:

  1. URL là danh từ chỉ tài nguyên/products/123 (sản phẩm 123), không phải /getProduct?id=123
  2. HTTP method thể hiện hành động — GET để đọc, POST để tạo. Không nhồi /deleteProduct thành endpoint.
  3. Stateless — mỗi request độc lập, không phụ thuộc request trước
  4. Trả về JSON (hoặc đôi khi XML cho hệ thống cũ)

Ví dụ REST API của một shop online:

EndpointMục đích
GET /productsDanh sách sản phẩm
GET /products/123Chi tiết sản phẩm 123
POST /productsTạo sản phẩm mới (admin)
PUT /products/123Sửa sản phẩm 123
DELETE /products/123Xoá sản phẩm 123
GET /orders/456/itemsItems trong đơn hàng 456
POST /orders/456/cancelHuỷ đơn hàng 456

Pattern này thống nhất khắp ngành — dev mới vào dự án REST có thể đoán được endpoint mà không cần đọc nhiều docs.

GraphQL — order theo combo

GraphQL (Facebook tạo 2012) là kiểu API khác — frontend tự chọn cần field nào, server trả đúng field đó.

REST: 3 endpoint khác nhau cho 3 trang:

GET /users/123              → name, email, avatar
GET /users/123/posts        → bài đã đăng
GET /users/123/followers    → người follow

GraphQL: 1 endpoint, frontend tự ghép:

{
  user(id: 123) {
    name
    avatar
    posts(limit: 5) { title }
    followers(limit: 10) { name }
  }
}

Khi nào GraphQL thắng: mobile app cần ít data (tiết kiệm 4G), web phức tạp nhiều màn lấy data trùng nhau (Facebook, GitHub).

Khi nào REST thắng: dự án nhỏ, team mới, cần cache đơn giản, dev không có thời gian học GraphQL. 80% startup dùng REST là đúng.

API authentication — bồi bàn kiểm tra ai gọi

Bồi bàn không phục vụ vô điều kiện — cần biết khách là ai. Tương tự, API cần xác thực. 3 cách phổ biến:

1. API Key — chìa khoá đơn giản

Một chuỗi ký tự bí mật, gửi kèm mỗi request:

GET /weather?city=Hanoi&api_key=abc123xyz789

Dùng cho: public API như OpenWeatherMap, Google Maps. Dễ làm, dễ lộ.

2. Bearer Token (JWT — JSON Web Token — chuỗi xác thực có hạn) — vé vào cửa có hạn

Sau khi login thành công, server trả về token. Frontend gửi token trong header mỗi request tiếp theo:

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6...

Token có hạn (thường 1-7 ngày). Hết hạn → phải login lại. Dùng cho: hầu hết web app, SaaS.

3. OAuth (đăng nhập qua bên thứ ba)

"Đăng nhập bằng Google", "Đăng nhập bằng Facebook" — bạn không trao password cho web bạn dùng, Google chỉ xác nhận và cấp token. Dùng cho: ứng dụng cần truy cập data của user ở dịch vụ khác (đọc lịch Google, gửi mail Gmail).

Trang tài liệu API của NASA — danh sách endpoint công khai và cách dùng

Trang tài liệu API của NASA — một public API miễn phí cung cấp ảnh thiên văn, dữ liệu sao Hoả và hàng chục dataset khác. Mọi public API trưởng thành đều có docs như thế này: list endpoint, mô tả input, ví dụ response. Đọc docs là bước đầu khi tích hợp bất cứ API nào. Nguồn: Wikimedia Commons (public domain).

Public API vs Private API

KiểuAi dùng đượcVí dụ
PublicAi có API keyStripe, Google Maps, OpenAI, VNPay, Zalo OA, Vietnam Weather
Internal/PrivateChỉ frontend của shop đóAPI Shopee gọi từ app Shopee, API VietCodex gọi từ wiki.vietcodex.com
PartnerĐối tác đăng ký xét duyệtAPI Facebook cho ad agency, API VietnamAirlines cho booking platform

Khi build SaaS (Software as a Service — phần mềm dạng dịch vụ), bạn có thể vừa có internal API (frontend của bạn dùng) vừa expose public API (cho khách tích hợp tự động) — như Notion, Slack, Stripe đều làm.

Ví dụ thực tế: API call khi bạn login Shopee

Bạn mở app Shopee, gõ username + password, bấm "Đăng nhập". Đây là chuỗi API call thực sự xảy ra:

Bước 1: Frontend gửi POST /auth/login

POST https://api.shopee.vn/v4/auth/login
Content-Type: application/json
X-Device-Id: abc-123-xyz

{
  "username": "nguyenvana",
  "password": "***********",
  "device_fingerprint": "..."
}

Bước 2: Backend xử lý (50-200ms)

  1. Tìm user trong database (SELECT FROM users WHERE username = ...)
  2. Hash password bạn vừa nhập, so với hash trong DB
  3. Match → tạo JWT token chứa user_id + role + expiry
  4. Log audit: ai login lúc nào, từ device nào

Bước 3: Backend trả về Response

HTTP/1.1 200 OK
Content-Type: application/json

{
  "access_token": "eyJhbGc...",
  "refresh_token": "eyJhbGc...",
  "expires_in": 3600,
  "user": {
    "id": 12345,
    "name": "Nguyễn Văn A",
    "avatar_url": "https://cf.shopee.vn/avatars/12345.jpg",
    "loyalty_tier": "gold"
  }
}

Bước 4: Frontend lưu token + gọi tiếp các API khác

App Shopee giờ có token, gọi 5-10 API tiếp theo song song để dựng màn home:

API callTrả về
GET /home/bannersBanner ads trên trang chủ
GET /home/categoriesDanh mục đề xuất
GET /home/flash-saleFlash sale đang chạy
GET /user/cart/countSố item trong giỏ
GET /user/notifications/unreadSố thông báo chưa đọc
GET /home/recommendationsSản phẩm gợi ý cá nhân hoá

Tổng cộng: 1 login request + ~6 home API call trong khoảng 800ms. Mỗi API gọi đi gọi lại hàng tỷ lần/ngày — đó là lý do Shopee đầu tư hàng trăm triệu USD cho hạ tầng server.

Cái gì có thể sai

Vấn đềCodeCách fix
Token hết hạn401Frontend tự refresh token hoặc bắt user login lại
Không có quyền403Nâng cấp tài khoản hoặc xin admin cấp role
Resource không tồn tại404Check URL endpoint có đúng không
Gọi quá nhanh429Implement exponential backoff, đợi rồi retry
Server lỗi500Báo backend dev, có khi do bug, có khi do DB sập
Quá tải503Đợi vài phút, server đang bảo trì hoặc auto-scale chưa kịp
Timeout (>30s)API endpoint chậm, cần tối ưu DB query hoặc cache
CORS blockedBackend chưa whitelist domain frontend, fix ở backend
Các viên Lego compatible với nhau — analogy cho việc ghép các API thành ứng dụng hoàn chỉnh

API như viên Lego — mỗi viên là một dịch vụ độc lập (thanh toán, gửi mail, lưu ảnh, AI), bạn ghép lại thành sản phẩm. Một SaaS điển hình ghép 8-15 API third-party + 1 API riêng. Càng dùng nhiều API sẵn, càng tiết kiệm thời gian build "phần đã giải xong" và dồn lực cho phần khác biệt riêng của business. Nguồn: Wikimedia Commons (CC BY-SA 3.0).

Khi nào dùng API có sẵn vs tự build

Bạn cầnCó API sẵn?Khuyến nghị
Thanh toán onlineVNPay, Momo, Stripe, PayPalDùng sẵn, đừng tự build
Gửi SMSTwilio, eSMS, ESMS VietnamDùng sẵn
Gửi email transactionalSendGrid, Resend, MailgunDùng sẵn
Bản đồ + geocodingGoogle Maps, MapboxDùng sẵn (Google Maps đắt — Mapbox rẻ hơn 5-10x)
Lưu ảnh + videoCloudinary, AWS S3 + CloudFrontDùng sẵn
Chat realtimePusher, Soketi, Sendbird, PubnubDùng sẵn nếu < 100k user; tự build nếu cần custom
AI text generationOpenAI, Anthropic, GeminiDùng sẵn
Search trong appAlgolia, Meilisearch, TypesenseDùng sẵn
Auth + user managementSupabase Auth, Clerk, Auth0Dùng sẵn nếu chưa có hệ thống user phức tạp
Business logic riêng của bạnBắt buộc tự build (đây là phần "khác biệt" của sản phẩm)

Quy tắc: đừng tự build cái đã commodity hoá (thanh toán, SMS, email). Dồn nguồn lực vào API nội bộ thể hiện giá trị riêng của business.

Tóm tắt 1 dòng

API = bồi bàn truyền lệnh giữa các phần mềm. Mỗi tương tác trên web/app là 1 API call. REST là kiểu phổ biến nhất, JSON là format chuẩn, status code 200/401/500 nói cho bạn biết kết quả. Đừng tự build cái đã có API sẵn — dùng Stripe/Twilio/OpenAI tiết kiệm hàng tháng dev.

Đọc tiếp

Câu hỏi thường gặp

API và webhook khác nhau ở đâu?
API là bạn HỎI server (bạn chủ động gọi). Webhook là server BÁO bạn (server chủ động gọi bạn khi có sự kiện). Ví dụ: bạn gọi API VNPay để hỏi 'đơn này thanh toán chưa?'. VNPay gọi webhook về server bạn khi khách thanh toán xong. Webhook tiện cho realtime, không phải polling liên tục. Xem chi tiết tại bài [Webhook là gì](/wiki/co-ban/webhook-la-gi).
Có cần học code để dùng API không?
Không, có ba cách dùng API không cần code: (1) Zapier, Make.com, n8n — kéo thả; (2) Google Sheets + IMPORTDATA hoặc IMPORTXML cho API public; (3) Postman để test API như app. Nhưng nếu muốn build product có API riêng, vẫn cần dev. Marketer hay sales ops nên học Zapier để tự automation không phiền dev.
Tại sao API thường tính tiền theo 'số request'?
Vì mỗi request tiêu thụ tài nguyên server (CPU + RAM + database query + bandwidth). Tính theo request là cách công bằng và đoán được trước. Stripe tính phí mỗi giao dịch, OpenAI tính theo token, Google Maps tính theo lượt geocoding. Bạn cần ước lượng MAU × số API call/user để tránh hoá đơn bất ngờ — gọi là 'quota planning'.
REST và GraphQL chọn cái nào?
Mặc định: REST. Đơn giản, mọi tool hỗ trợ, dev nào cũng biết. Chọn GraphQL khi: (1) frontend cần data linh hoạt từ nhiều bảng cùng lúc (Facebook, GitHub); (2) muốn giảm số request từ mobile. Đừng chọn GraphQL chỉ vì hot — debug, caching, security phức tạp hơn REST khá nhiều. 80% dự án dùng REST là đúng.
API key bị lộ thì sao?
Nguy hiểm. Người khác sẽ dùng key của bạn → bạn trả tiền cho request họ gọi, hoặc bị Google/Stripe khoá tài khoản vì 'fraud'. Quy tắc: (1) KHÔNG commit API key vào Git — dùng .env; (2) KHÔNG expose ở frontend — chỉ dùng ở backend; (3) Có lộ → revoke ngay, tạo key mới; (4) Bật rate-limit + IP allowlist nếu nhà cung cấp hỗ trợ.
CORS là gì? Sao mở DevTools thấy lỗi 'CORS blocked'?
CORS (Cross-Origin Resource Sharing) là cơ chế bảo mật của trình duyệt — chặn JS ở `vietcodex.com` gọi API ở `api.bank.com` trừ khi `api.bank.com` cho phép rõ ràng. Lỗi CORS = backend chưa thêm header `Access-Control-Allow-Origin`. Frontend không fix được — backend phải thêm header. Đây là lý do public API thường có dashboard cho phép thêm 'allowed origins'.
Có thể dùng API của Facebook/Shopee mà không xin phép không?
Không hợp pháp. Facebook, Shopee, Tiki có API chính thức (cần đăng ký app + xét duyệt) — dùng cái đó. Cào dữ liệu qua API nội bộ chưa public là vi phạm Terms of Service, có thể bị khoá account hoặc kiện. Shopee VN từng kiện một số seller tool 2024 về việc này. Web scraping có rủi ro tương tự — đọc TOS trước khi build.
API có làm web chậm không?
Có thể, nếu thiết kế sai. Mỗi API call thêm 50-300ms (round-trip mạng). Web gọi 20 API tuần tự = 1-6 giây chờ. Cách fix: (1) batch nhiều call thành 1 (GraphQL hoặc REST batch); (2) cache kết quả ở frontend hoặc CDN; (3) gọi song song bằng `Promise.all`; (4) lazy load — chỉ gọi API khi user scroll tới. Một SaaS tốt mở dưới 1.5 giây gồm cả API call.