MƯỜI CHẶNG

Người phục vụ không vào bếp

App thời tiết trong điện thoại Minh chẳng có cảm biến nào cả — vậy mà lúc nào cũng biết đúng nhiệt độ ngoài trời. Cuốn này giải mã cái "cửa" bí mật mà mọi phần mềm dùng để hỏi mượn dữ liệu của nhau.

CHẶNG 1

Cái app này biết trước cả ông trời

Điện thoại đâu có cảm biến ngoài trời — vậy con số đó từ đâu ra?

Sáng nào Minh cũng mở app thời tiết trước khi đi học. Sáng nay app báo "27°C, có mưa rào chiều nay" — và y như rằng, chiều đó mưa thật.

Minh ngồi cầm cái điện thoại, lật qua lật lại nhìn mặt sau, rồi hỏi Bống: "Ơ, cái điện thoại này đâu có cái lỗ nào để đo nhiệt độ ngoài trời đâu nhỉ? Vậy sao nó biết hay vậy?"

Bống nhún vai: "Chắc nó tự đoán? Máy móc bây giờ thông minh lắm mà."

Thử tự hỏi trước khi đọc tiếp

Nếu điện thoại không có bộ phận nào đo được nhiệt độ, độ ẩm, khả năng mưa của cả một thành phố — vậy con số đó đến từ đâu?

? "đâu có lỗ nào để đo nhiệt độ ngoài trời đâu nhỉ?"
Lật mặt sau điện thoại kiểu gì cũng không tìm ra cảm biến đo thời tiết — vì nó không hề có.
CHẶNG 2

"Tự đoán" nghe không ổn lắm

Minh không tin lời giải thích "máy tự đoán" của Bống — và đúng là không phải vậy.

Nếu app chỉ "đoán mò" thời tiết, chắc chắn sẽ có lúc đoán sai tùm lum — trong khi thực tế app gần như lúc nào cũng đúng, đúng đến từng độ C.

Vấn đề còn kỳ hơn nữa: có hàng trăm app thời tiết khác nhau, của hàng trăm công ty khác nhau, trên hàng tỷ điện thoại khắp thế giới — vậy mà tất cả đều báo cùng một con số cho cùng một thành phố, cùng một thời điểm.

Nếu mỗi app "tự đoán" theo cách riêng, làm sao hàng trăm app lại luôn khớp nhau đến vậy?

App A 27°C App B 27°C App C 27°C ba app khác hãng, khác giao diện — cùng một con số có lẽ cả ba đang hỏi cùng một nơi
"Tự đoán" mà đoán trúng y hệt nhau ở cả trăm app khác nhau — nghe không hợp lý lắm.
CHẶNG 3

Vậy chúng đang hỏi ai?

Nếu app không tự đo, nó phải hỏi mượn dữ liệu từ một nơi khác — nhưng hỏi bằng cách nào?

Minh đem thắc mắc này hỏi thầy Huy ở phòng Tin. Thầy gật gù: "Đúng rồi đó, app thời tiết không tự đo gì cả — nó đang hỏi mượn dữ liệu từ một cơ quan khí tượng thật, có trạm đo thật, vệ tinh thật."

Minh vẫn chưa hiểu: "Nhưng app đó là của một công ty làm phần mềm, còn cơ quan khí tượng là một chỗ hoàn toàn khác — hai bên đâu quen biết gì nhau, sao lại «hỏi» được nhau?"

Thầy Huy cười: "Đó chính là câu hỏi hay nhất buổi hôm nay. Hai phần mềm khác chủ, khác ngôn ngữ lập trình, khác công ty — vẫn có cách nói chuyện được với nhau, NẾU cả hai cùng thống nhất một luật chung trước."

App thời tiết Cơ quan khí tượng ? hai bên chẳng quen biết gì nhau — vậy nói chuyện kiểu gì?
Một công ty phần mềm và một cơ quan khí tượng — hai chủ hoàn toàn khác nhau.
CHẶNG 4

À — hoá ra có một cánh cửa công khai

Không phải "hai bên quen nhau" — mà là một bên mở sẵn một cánh cửa cho bất kỳ ai biết luật đều gõ được.

Cơ quan khí tượng, sau khi đo đạc xong, không giữ riêng dữ liệu cho một mình họ dùng. Họ mở một "cánh cửa" công khai: bất kỳ phần mềm nào, miễn gửi đúng loại yêu cầu theo đúng định dạng đã quy định — ví dụ "cho tôi nhiệt độ hiện tại ở tọa độ này" — sẽ nhận lại đúng dữ liệu cần, ngay lập tức.

App thời tiết của Minh không cần quen biết ai ở cơ quan khí tượng cả. Nó chỉ cần biết đúng "cửa" đó nằm ở đâu, và gõ đúng luật — thế là xong.

Khoảnh khắc "à ra vậy"

Hàng trăm app thời tiết đều hiện cùng một con số, vì rất có thể chúng đang cùng gõ vào MỘT cánh cửa dữ liệu chung — chỉ khác nhau ở cách trình bày lên màn hình mà thôi.

LUẬT GÕ CỬA App A App B App C App D bất kỳ app nào gõ đúng luật đều được trả lời — không cần quen biết trước
Một cánh cửa công khai, một luật chung — nhiều app xa lạ vẫn gõ được cùng một chỗ.
CHẶNG 5

Cánh cửa đó có tên

Trong máy tính, cánh cửa hỏi-đáp có luật rõ ràng đó gọi là API.

Thầy Huy viết lên bảng: A P I — viết tắt của Application Programming Interface, "giao diện lập trình ứng dụng". Nghe hơi dài, nhưng bản chất chỉ đơn giản là:

Một tập luật công khai,
cho phép hai phần mềm khác nhau
hỏi-đáp đúng cách với nhau.

"Người đứng ra công bố cánh cửa" — ở đây là cơ quan khí tượng — chính là server mà Minh đã học ở một bài trước. Còn app thời tiết, đang gửi yêu cầu qua cánh cửa đó, chính là client.

CLIENT app thời tiết SERVER cơ quan khí tượng yêu cầu qua API 27°C, có mưa chiều nay
API chính là cái "cửa" cho phép client gửi yêu cầu và server trả đúng kết quả.
CHẶNG 6

Giống nhà hàng — nhưng không hẳn

Ẩn dụ dễ nhớ nhất về API: một tấm thực đơn. Nhưng phải nói rõ chỗ nào giống, chỗ nào không.

API giống hệt tấm THỰC ĐƠN ở một nhà hàng: khách chỉ cần gọi đúng theo tên món trên thực đơn — không cần biết đầu bếp nấu món đó bằng công thức gì, dùng chảo nào, nêm gia vị ra sao.

THỰC ĐƠN • Nhiệt độ hiện tại • Khả năng mưa • Dự báo 3 ngày • Tốc độ gió app "gọi món" đúng theo đây bên trong "bếp" — trạm đo, vệ tinh, phép tính — app không cần biết
App chỉ cần gọi đúng "món" trên thực đơn API — không cần biết cơ quan khí tượng tính toán ra sao.

Nhưng khác nhà hàng thật ở một chỗ quan trọng: thực đơn nhà hàng chỉ là chữ viết cho người đọc. API là một quy tắc kỹ thuật — đúng định dạng dữ liệu, đúng địa chỉ gửi yêu cầu — để một CHƯƠNG TRÌNH khác đọc và làm theo được, không phải để người đọc bằng mắt.

Và một điều nữa: bên trong "bếp" — cách cơ quan khí tượng đo đạc, tính toán — có thể thay đổi bất cứ lúc nào (đổi vệ tinh, đổi công thức tính) mà app thời tiết của Minh chẳng cần biết, chẳng cần sửa gì cả — miễn "thực đơn" (API) vẫn giữ nguyên.

CHẶNG 7

Không chỉ thời tiết

Một ví dụ khác, để thấy đây không phải chuyện chỉ đúng với app thời tiết.

Bống hay dùng app đặt xe để đi học thêm. Mỗi lần mở app, một tấm bản đồ hiện ra ngay, có cả đường đi được vẽ sẵn từ nhà tới chỗ học.

Công ty làm app đặt xe đó gần như chắc chắn không tự vẽ bản đồ cả thế giới từ đầu — việc đó tốn công khủng khiếp, và đã có công ty khác chuyên làm bản đồ rồi.

App đặt xe gọi API bản đồ Công ty bản đồ
App đặt xe "mượn" bản đồ bằng cách gọi đúng API của công ty bản đồ — rồi hiển thị kết quả lên màn hình của chính nó.

Nó gọi API bản đồ của một công ty chuyên làm bản đồ, nhận về dữ liệu đường đi, rồi hiển thị lên màn hình của chính app mình — y hệt cách app thời tiết gọi API của cơ quan khí tượng.

CHẶNG 8

Nếu không có những cánh cửa đó

Thử tưởng tượng một thế giới không có API — sẽ rối đến mức nào.

Không có API, mỗi ứng dụng muốn dùng dữ liệu hay dịch vụ của một hệ thống khác sẽ phải tự "mò" cách lấy — nếu lấy được. Không có luật chung, mỗi lần một bên đổi cách lưu dữ liệu là bên kia lập tức hỏng theo, chẳng ai bảo trì nổi lâu dài.

KHÔNG CÓ API Mỗi app tự dò cách lấy dữ liệu
Đổi một chút là hỏng hàng loạt
Gần như không kết hợp được nhiều dịch vụ
CÓ API Một luật chung, công khai, rõ ràng
Bên trong đổi thế nào, luật vẫn giữ nguyên
Hàng nghìn app cùng dùng chung một dịch vụ

Nhờ có API, những ứng dụng phức tạp — vừa có bản đồ, vừa có thời tiết, vừa có thanh toán, vừa có đăng nhập bằng tài khoản khác — mới ghép lại được từ nhiều mảnh dịch vụ khác nhau, mà không ai phải tự làm lại từ đầu.

Một app hoàn chỉnh Bản đồ Thời tiết Đăng nhập Thanh toán
Mỗi vòng tròn là một dịch vụ riêng, nối vào app qua đúng một cánh cửa API của nó.
CHẶNG 9

Em đã gặp nó ở đâu rồi

Nhiều hơn em nghĩ — cứ mỗi lần một app "mượn" thứ gì đó của app khác.

Tự kiểm tra nhanh

Bấm vào câu trả lời em nghĩ là đúng — máy sẽ nói cho em biết vì sao.

1. App thời tiết trên điện thoại Minh có tự đo được nhiệt độ ngoài trời không?

2. Nếu cơ quan khí tượng đổi hẳn cách tính toán bên trong nhưng API (thực đơn) vẫn giữ nguyên, app thời tiết của Minh có bị hỏng không?

3. Máy tính ở nhà em có thể "đóng vai" server, cung cấp một API cho máy khác gọi không?

Câu hỏi của riêng em

Sau khi đọc xong, em còn thắc mắc điều gì về API? Không cần viết đúng, chỉ cần viết ra điều em đang tò mò.

Câu hỏi của em chỉ nằm trên máy này, không gửi đi đâu cả.

Cuộn nốt xuống dưới nhé — sắp xong trang này rồi!

CHẶNG 10

Kể lại cho bạn trong 30 giây

Nếu chỉ được nhớ một câu sau cuốn này, hãy nhớ câu này.

API là người phục vụ:
gọi đúng món theo thực đơn,
không cần biết bếp làm ra sao.

Lần sau mở một app thấy nó "biết" cả bản đồ, cả thời tiết, cả tài khoản Google của em — thay vì nghĩ "app này giỏi thật", em có thể nghĩ: "chắc nó đang gọi món ở vài cánh cửa API khác nhau."