API là gì? Cách các phần mềm nói chuyện với nhau

  • author-image

    Nguyễn Đình Cường

  • blog-tag
  • blog-comment 0 comment
  • created-date 09 Nov, 2026
blog-thumbnail

Ứng dụng thời tiết trên điện thoại không tự đo nhiệt độ; nó hỏi một dịch vụ khác. Nút "Đăng nhập bằng tài khoản khác" cũng vậy. Cầu nối cho tất cả những cuộc trò chuyện đó là API.

API là gì?

API (Application Programming Interface - giao diện lập trình ứng dụng) là tập quy tắc cho phép một phần mềm yêu cầu dịch vụ hoặc dữ liệu từ phần mềm khác mà không cần biết bên trong nó làm gì. Hãy nghĩ đến nhà hàng: bạn (client) gọi món qua người phục vụ (API), nhà bếp (server) chế biến và đưa món ra. Bạn không vào bếp, cũng không cần biết công thức.

API có nhiều dạng; trong bối cảnh web, người ta thường nói tới Web API hoạt động qua HTTP.

REST API và JSON

Phong cách thiết kế phổ biến nhất là REST. Mỗi loại tài nguyên có một địa chỉ (endpoint), và bạn dùng phương thức HTTP để nói muốn làm gì:

Yêu cầuÝ nghĩa
GET /coursesLấy danh sách khóa học
GET /courses/5Lấy khóa học có id 5
POST /coursesTạo khóa học mới
PUT /courses/5Cập nhật khóa học 5
DELETE /courses/5Xóa khóa học 5

Dữ liệu thường trao đổi dạng JSON, một định dạng văn bản dễ đọc cho cả người lẫn máy:

{
  "id": 5,
  "ten": "Python cơ bản",
  "mien_phi": false,
  "chu_de": ["lập trình", "người mới"]
}

Gọi API bằng code

Ví dụ gọi một API công khai bằng Python với thư viện chuẩn:

import json
import urllib.request

url = "https://jsonplaceholder.typicode.com/todos/1"
with urllib.request.urlopen(url) as res:
    du_lieu = json.loads(res.read().decode("utf-8"))

print(du_lieu["title"])
print(du_lieu["completed"])

Và bằng JavaScript trong trình duyệt:

fetch("https://jsonplaceholder.typicode.com/todos/1")
  .then(res => res.json())
  .then(du_lieu => console.log(du_lieu.title));

Địa chỉ ví dụ trên là một dịch vụ giả lập dành cho thực hành, trả về dữ liệu mẫu. Bạn nên tìm các API công khai miễn phí để luyện tập, và luôn đọc điều khoản sử dụng.

Xác thực và khóa API

Nhiều API yêu cầu bạn chứng minh danh tính để biết ai đang gọi và giới hạn lượt dùng. Cách phổ biến là khóa API (API key) hoặc token gửi kèm trong header:

Authorization: Bearer ten_token_cua_ban

Khóa API giống mật khẩu: không đưa vào mã nguồn công khai, không commit lên Git. Hãy lưu trong biến môi trường hoặc file cấu hình được bỏ qua bởi .gitignore.

Đọc tài liệu API

Một API tốt đi kèm tài liệu cho biết:

  • Địa chỉ cơ sở và các endpoint.
  • Phương thức, tham số cần thiết và kiểu dữ liệu.
  • Ví dụ request và response.
  • Mã lỗi và ý nghĩa.
  • Giới hạn tần suất gọi (rate limit).

Bạn cũng sẽ tạo ra API

Khi làm backend, bạn xây API để frontend hay ứng dụng di động sử dụng. Ví dụ rất ngắn bằng Python với Flask:

from flask import Flask, jsonify

app = Flask(__name__)

@app.get("/api/chao")
def chao():
    return jsonify({"loi_chao": "Xin chào từ API"})

if __name__ == "__main__":
    app.run()

Chạy file rồi mở http://127.0.0.1:5000/api/chao trong trình duyệt, bạn sẽ thấy JSON trả về. Đó là một API hoàn chỉnh nhỏ nhất.

Những điều cần nhớ

  1. API là hợp đồng: bên gọi và bên cung cấp thống nhất cách trao đổi.
  2. Luôn kiểm tra mã trạng thái và xử lý lỗi khi gọi API; mạng có thể chậm hoặc đứt.
  3. Không tin dữ liệu bên ngoài một cách mù quáng; hãy kiểm tra trước khi dùng.
  4. Tôn trọng giới hạn tần suất để không bị chặn.

Xử lý lỗi và mã trạng thái khi dùng API

Một ứng dụng đáng tin phải tính đến chuyện API thất bại. Mẫu gọi API cẩn thận:

import json
import urllib.request
import urllib.error

def lay_du_lieu(url):
    try:
        with urllib.request.urlopen(url, timeout=5) as res:
            return json.loads(res.read().decode("utf-8"))
    except urllib.error.HTTPError as e:
        print("Máy chủ trả lỗi:", e.code)
    except urllib.error.URLError as e:
        print("Không kết nối được:", e.reason)
    except json.JSONDecodeError:
        print("Phản hồi không phải JSON hợp lệ")
    return None

print(lay_du_lieu("https://jsonplaceholder.typicode.com/todos/1"))

Ba kiểu sự cố được phân biệt: máy chủ trả mã lỗi, không kết nối được (mạng, DNS), và dữ liệu sai định dạng. Đặt timeout để chương trình không treo mãi.

Các thực hành tốt khác: thử lại có giới hạn khi gặp lỗi tạm thời 5xx, lưu đệm kết quả để giảm số lần gọi, và không bao giờ giả định một trường JSON luôn có mặt. Hãy dùng .get() hoặc kiểm tra tồn tại trước khi truy cập.

Kết luận

API là cách các phần mềm phối hợp, từ ứng dụng di động gọi máy chủ cho tới dịch vụ này dùng dịch vụ kia. Thực hành gọi một API công khai, đọc JSON trả về và hiển thị nó thành giao diện đơn giản, bạn sẽ hiểu bản chất rất nhanh.

Nếu cần một lộ trình rõ ràng thay vì tự mò mẫm, codebem.com có nhiều khóa học phù hợp cho người mới.

author_photo
Nguyễn Đình Cường

0 comment