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.
Đ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à."
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?
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?
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."
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.
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.
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à:
"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.
Ẩ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.
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.
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.
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.
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.
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.
Nhiều hơn em nghĩ — cứ mỗi lần một app "mượn" thứ gì đó của app khác.
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!
Nếu chỉ được nhớ một câu sau cuốn này, hãy nhớ câu này.
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."