API là cái quái gì vậy?
Tại sao sử dụng API trong mã của bạn giống như chơi với LEGO.
Bạn có thể đã nghe thuật ngữ “API” trong hầu hết các hướng dẫn viết mã mà bạn đã đọc. Nếu bạn Google “API”, bạn sẽ nhận được một đoạn văn lớn về cách nó viết tắt của “Giao diện lập trình ứng dụng” và giải thích về “REST” và “giao thức”, v.v., như thể điều đó làm cho nó rõ ràng hơn.
Tất cả những gì bạn cần biết về API là chúng là danh sách các chức năng bạn có thể sử dụng để tự động hóa các tác vụ và nhận dữ liệu . Ví dụ: bạn có thể:
- Sử dụng API Gmail để tự động đọc và lọc hộp thư đến của bạn bằng mã
- Sử dụng API Reddit để tạo bot tự động chuyển đổi đơn vị số liệu thành đơn vị đo lường bằng mã
- Sử dụng API Fitbit để lấy dữ liệu từ Fitbit của bạn và gửi dữ liệu đó đến một ứng dụng tùy chỉnh trên điện thoại của bạn
Tương tự như vậy, API cung cấp các đoạn mã nhỏ cho phép bạn xây dựng chương trình. Chúng có các chức năng như:
getLikeCount()createGoogleSheet()sendEmail()
Làm sao chúng ta biết được những “mẩu mã” này là gì?
Mọi API đều đi kèm với tài liệu liệt kê tất cả các cách bạn có thể sử dụng nó, giống như danh mục LEGO. Nó cho bạn thấy tất cả những điều bạn có thể làm với API, đối với API Reddit có thể là “đăng nhận xét” hoặc “lưu bài đăng”. Tài liệu thường được tìm thấy trực tuyến trên trang web của công ty, thường là trên một số trang dành cho nhà phát triển ẩn. “ Những điều bạn có thể làm” được gọi là “phương pháp API”.
Một số tài liệu tốt hơn những tài liệu khác , nhưng tài liệu cuối cùng là danh sách các đoạn mã và chức năng được tạo sẵn mà bạn có thể sử dụng trong mã của riêng mình .
API dễ nhất: Lấy địa chỉ IP của bạn
Hãy xem xét một API chỉ có một phần: API IPify , cho bạn biết địa chỉ IP của bạn là gì.
Địa chỉ IP giống như số điện thoại hoặc địa chỉ gửi thư cho máy tính của bạn. Nó cho internet biết nơi để tìm thấy bạn. Các trang web cũng có địa chỉ IP riêng.
Chúng tôi sẽ gửi một lệnh tới IPify.org và hỏi địa chỉ IP của chúng tôi là gì. Điều này hoạt động trên cả Mac OS và Windows.
Mở Terminal (Mac) hoặc Command Prompt (Windows) và gõ như sau:
curl 'https://api.ipify.org?format=json'
What the command looks like in Terminal on a MacBook.
{"ip": "68.142.10.250"}
Để xác minh rằng đây là IP thực của bạn, hãy truy cập WhatIsMyIPAddress.com .
JSON là một trong những định dạng dữ liệu phổ biến nhất cho các API web hiện đại. Nó đặt mọi thứ ở {“key”: value}định dạng để tất cả dữ liệu đều có nhãn. Các API khác có thể sử dụng XML , có <Key>value</Key>định dạng tương tự và nhiều API cho phép bạn chọn giữa hai API.
Đây là ý chính của rất nhiều API web. Chúng tôi yêu cầu một trang web cung cấp một số dữ liệu và nó phản hồi lại với dữ liệu đó. Các API phổ biến trong nghiên cứu khoa học, như API của NASA , USGS và USFDA , hoạt động theo cách này. Chúng tôi có thể lấy dữ liệu về các vệ tinh không gian, độ cao của các ngọn núi ở Hoa Kỳ và danh sách các loại thuốc được FDA chấp thuận nếu chúng tôi chỉ cần yêu cầu.
Điều gì về tự động hóa hoạt động của người dùng?
Nếu chúng ta không muốn chỉ lấy dữ liệu từ một trang web thì sao? Còn việc tạo bot hoặc tự động hóa ngày làm việc của chúng ta thì sao?
Đây là lúc các API phức tạp hơn xuất hiện. Chúng vẫn liên quan đến các lệnh đơn lẻ khi chúng ta nói chuyện với một trang web hoặc ứng dụng và nói, “Tôi muốn lấy dữ liệu này (hoặc gửi dữ liệu này).” Và ứng dụng đáp ứng tương ứng. Nhưng bây giờ chúng tôi đang đặt nhiều lệnh lại với nhau để hoàn thành các hoạt động phức tạp hơn.
Ví dụ về nhiều bước: API Reddit
Reddit là diễn đàn trực tuyến lớn nhất thế giới. Reddit đăng API của họ trực tuyến và họ liệt kê mọi thứ bạn có thể làm với API của họ trong thanh bên ở bên trái.
Trong thanh bên là các phương pháp chúng tôi có thể sử dụng để lấy danh sách bạn bè, nghiệp chướng, danh hiệu, v.v. Mọi hành động người dùng có thể thực hiện trên trang web đều có phương thức API tương ứng riêng.
Nếu chúng tôi truy cập trang API Reddit và cuộn xuống, sẽ có một phần, liên kết & nhận xét , hiển thị tất cả các tương tác thông thường của người dùng và các phương thức API tương ứng của họ. Chúng tôi có thể sử dụng chúng để tạo tài khoản bot hoặc thứ gì đó tương tự.
Chúng tôi có các tương tác người dùng hàng ngày như nhận xét ( /api/comment), theo dõi và lưu bài đăng . API Reddit cho phép thực hiện những điều này bằng mã. Tiền /api/tố trên tất cả các phương thức có vẻ lạ, nhưng chúng tôi sẽ giải thích điều đó sau một phút.
Ngược lại, API tìm kiếm của Google chỉ có một phương pháp và đó là tìm kiếm :
API Tìm kiếm của Google rất đơn giản, bởi vì Google biết rằng chỉ có một điều duy nhất mà các lập trình viên quan tâm thực hiện với Google Tìm kiếm: tìm kiếm.
Đây là mục tiêu của mọi API, để thu gọn tất cả các hoạt động và tùy chọn từ trang web hoặc ứng dụng thông thường thành các loại chức năng sẵn sàng mã “một lớp lót” này mà chúng ta có thể sử dụng từ Python, JavaScript, Bash, Java, R, v.v. .
- API trang web muốn bạn có thể thực hiện các tương tác bình thường với người dùng (đăng nhập, nhận xét, tìm kiếm, xóa nội dung) với càng ít mã càng tốt
- API có thể đeo muốn bạn có thể lấy dữ liệu, gửi cảnh báo cho người đeo hoặc thay đổi cài đặt trên thiết bị đeo với càng ít mã càng tốt
Việc sử dụng API trông như thế nào trong mã
Vì vậy, điều này trông như thế nào trong mã? API Reddit cho biết phương thức nhận xét được gọi là /api/comment. Điều đó nghĩa là gì? Chúng ta không thể đặt /api/commentmột tệp Python vào và gọi nó là một ngày, phải không? Phải.
Có một số điểm khác biệt giữa việc sử dụng API để nói chuyện với một trang web so với việc sử dụng API của thiết bị đeo được. Cả hai vẫn giống LEGO ở chỗ chúng cho phép bạn làm những việc phức tạp với một vài dòng mã, nhưng bản thân mã trông khá khác. Do đó, chúng tôi sẽ cung cấp các ví dụ riêng cho chúng.
Chuyên sâu hơn: API web trong mã
Chúng tôi đã thấy rằng các phương thức API Reddit được liệt kê với một loạt các dấu gạch chéo:
Điều đó không giống Python hay JavaScript hay mã nào cả. Nó nói /api/? Đó là gì?
Đây thực sự là một phần của liên kết HTTP , giống như những liên kết bạn nhập vào Chrome hoặc Firefox.
Tại sao liên kết web mặc dù? Chúng ta có đặt chúng trực tiếp vào mã của mình không? Vâng, và vì lý do tốt.
Khi chúng tôi sử dụng API web, chẳng hạn như API của Reddit, Gmail hoặc thậm chí là API của NIH hoặc NASA , về cơ bản, mã của chúng tôi đang nói chuyện với một trang web. Trang web sử dụng links/that/look/like/thisđể tách các trang và chức năng của họ. Google trực tiếp tại google.com, nhưng kết quả tìm kiếm trực tiếp tại google.com/search.
Cuối cùng, chúng tôi sẽ đặt điểm cuối đó vào mã của mình ở đâu đó như thế này:
google_search_api = "https://www.googleapis.com/customsearch/"
Bây giờ, mã không thực sự nói chuyện với một trang web mà là một máy chủ (như một trang web không đầu), nhưng chúng tổ chức mọi thứ giống với /slashes/, theo như API. Giống như khi bạn đăng blog với tư cách là người dùng thông thường lên một trang web từ trang này website.com/post, mã của bạn có thể giao tiếp với điểm cuối đăng blog của máy chủ API tại api.website.com/posthoặc website.com/api/posthoặc tương tự.
Hãy nghĩ như thế này: khi bạn kiểm tra hộp thư đến Gmail trên máy tính xách tay hoặc điện thoại, trình duyệt của bạn sẽ:
- Tiếp cận qua Internet để
gmail.com - Nói với
gmail.com, "Tôi có thể truy cập trang web bên dưới không/mail/inbox?" - Sau đó, Gmail sẽ gửi trang web cho hộp thư đến của bạn trở lại trình duyệt của bạn để bạn có thể xem nó.
- tiếp cận
gmail.googleapis.com - Yêu
gmail.googleapis.comcầu hộp thư đến email của bạn - Sau đó, API Gmail sẽ chỉ gửi lại dữ liệu thay vì toàn bộ trang web
Dữ liệu thuần túy thân thiện với mã và đó là lý do API được tạo ra.
Ví dụ: Nhận Thuốc từ openFDA API
Đây là một ví dụ Python ngắn để truy vấn openFDA API của USFDA , liệt kê tất cả các loại thuốc được FDA chấp thuận:
# import an HTTP library
import requests
# Tell "requests" to request data from the openFDA "Drugs" endpoint
drugs_http_endpoint = "https://api.fda.gov/drug/label.json?limit=100"
drugs = requests.get(drugs_http_endpoint)
# Print all the data that we got from USFDA about drugs
print(drugs.json())
Lưu ý: ví dụ trên sử dụng requests thư viện HTTP phổ biến cho Python.
Còn API cho Bluetooth và thiết bị đeo được thì sao?
Sử dụng API của thiết bị đeo được (như Fitbit hoặc Apple Watch) hơi khác so với sử dụng API của trang web, nhưng chúng được ghi lại giống nhau. Ví dụ: thay vì phương thức “bình luận” , API có thể đeo được có thể có các phương thức sau:
- lấy nhịp tim
- lấy dữ liệu chuyển động (từ gia tốc kế và con quay hồi chuyển)
- gửi cho người dùng một cảnh báo
Ví dụ về thiết bị đeo: API Fitbit
Thay vì truy vấn một số trang web để lấy dữ liệu, bạn có thể muốn viết mã cho một thiết bị cụ thể, chẳng hạn như Fitbit .
Có nhiều phần đối với API Fitbit . Nó thậm chí còn có API Web riêng.
Hãy xem xét một trong các phần của API thiết bị .
Trên trang API thiết bị , thanh bên trái hiển thị danh sách tất cả các phần API mà chúng ta có thể tương tác.
Mỗi danh mục lớn hơn này là một loại tập hợp các mảnh LEGO , chúng ta có thể đọc thêm các mảnh của chúng sau đó sử dụng trong mã của riêng mình. Các mảnh LEGO là những thứ như:
- đọc hoặc đặt đồng hồ
- đọc gia tốc kế (một phần của bộ theo dõi chuyển động)
- đọc máy đo nhịp tim , v.v.
Có rất nhiều thông tin, nhưng trang này có một đoạn script ví dụ ngắn và sau đó liệt kê một loạt các mảnh LEGO liên quan đến nhịp tim mà chúng ta có thể sử dụng trong mã của riêng mình:
activated(cho chúng tôi biết cảm biến nhịp tim có bật hay không)heartRate(cho chúng tôi biết nhịp tim hiện tại)onactivate(một chức năng chúng ta có thể sử dụng để cho Fitbit biết phải làm gì ngay khi cảm biến nhịp tim được kích hoạt)
Trong mã giả, điều trên có nghĩa là:
import HeartRateSensor code from Fitbit's API
if HeartRateSensor was imported {
hrm = the HeartRateSensor
Listen for heart rate sensor to send data, then print it.
Start the heart rate sensor (which will then start the above "Listen" code)
}
Nếu bạn gặp khó khăn khi sử dụng API, công ty tạo ra nó thường sẽ có tài liệu trực tuyến mà bạn có thể Google để tìm. (Ví dụ: tìm kiếm “API Fitbit” sẽ hiển thị API Fitbit thực tế là kết quả tìm kiếm hàng đầu.) Nếu không, bạn có thể liên hệ trực tiếp với công ty để hỏi xem họ có thể gửi tài liệu API hay không.
Trong một số trường hợp, tài liệu API có thể thực sự gây thất vọng , dẫn đến sự thất vọng trong cộng đồng nhà phát triển. Nhưng đó là cơ hội để đóng góp và lấp đầy khoảng trống hoặc tạo ra sản phẩm tốt hơn của riêng bạn.
Bản tóm tắt
Các kỹ sư viết API với hy vọng rằng bạn sẽ phát triển và sử dụng các ứng dụng, bộ dữ liệu và thiết bị đeo của họ. Bây giờ bạn đã hiểu về API, hãy xem các API phổ biến này để bắt đầu . Thông thường, tất cả công nghệ và ứng dụng yêu thích của bạn đều có API mà bạn có thể sử dụng trong dự án tiếp theo của mình.
Nếu bạn có bất kỳ câu hỏi hoặc phản hồi nào, hãy gửi email cho chúng tôi theo địa chỉ [email protected] hoặc nhắn tin cho chúng tôi trên Instagram (@protobioengineering) . Cảm ơn vì đã đọc.
Liên kết liên quan
- GitHub cho các nhà sinh học
- Dataverse API: Dữ liệu và phần mềm nghiên cứu mã nguồn mở
- Người đưa thư: Xây dựng và kiểm tra API

![Dù sao thì một danh sách được liên kết là gì? [Phần 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































