“API” là gì và bạn sử dụng nó như thế nào?

Andrey Soslov / Shutterstock

API là phần mềm trung gian nằm giữa hai ứng dụng và cho phép chúng giao tiếp bằng các quy tắc được xác định trước. Trong thực tế, API thường được sử dụng để cho phép các ứng dụng phía máy khách truy cập cơ sở dữ liệu được bảo vệ theo cách khác.

API làm gì?

Ở mức cao, API chỉ cần tạo kết nối giữa hai ứng dụng. Họ không thể giao tiếp trực tiếp, vì họ không thể truy cập mã của nhau, vì vậy họ phải xoay một sợi dây giữa chúng và gửi tín hiệu xuống dòng. API xác định cách các tín hiệu này được gửi. Hầu như mọi ứng dụng chạy trên máy tính của bạn đều sử dụng API loại để nói chuyện với hàng ngàn thứ khác.

Trong thực tế, thuật ngữ “API” thường được sử dụng để chỉ các API dựa trên web tạo liên kết giữa máy chủ và máy khách hoặc giữa máy chủ và dịch vụ phụ trợ. Các API này hoạt động như một điểm truy cập cho bất kỳ dịch vụ nào phía sau chúng.

Ví dụ, hãy tưởng tượng rằng bạn có một ứng dụng phía máy khách cần nói chuyện với máy chủ bằng cơ sở dữ liệu. Rõ ràng, bạn không thể cung cấp cho khách hàng quyền truy cập đầy đủ vào cơ sở dữ liệu, vì điều này gây ra một số vấn đề. Trước hết, đây có lẽ là lỗi bảo mật tồi tệ nhất bạn có thể mắc phải, nhưng ngoài ra, nó cũng phá vỡ toàn bộ mô hình máy chủ của khách hàng. Khách hàng không cần phải lo lắng về việc nói chuyện với cơ sở dữ liệu hoặc lưu trữ dữ liệu; Nó nên giao tiếp với máy chủ và để máy chủ nâng trọng lượng.

Thay vì cho phép khách hàng truy cập đầy đủ, bạn có thể tạo một dịch vụ khác sẽ thay mặt khách hàng nói chuyện với cơ sở dữ liệu. Đây là một ứng dụng API và nó được đặt trực tiếp trước cơ sở dữ liệu (hoặc bất kỳ dịch vụ nào khác đằng sau nó).

"API" là gì và bạn sử dụng nó như thế nào? 1

Máy khách gửi yêu cầu đến ứng dụng API, thường là qua HTTP bằng cách sử dụng các yêu cầu GET và POST. Đây có thể là một URL trên máy chủ của bạn, như “api.yoursite.com”. Nếu khách hàng muốn tìm kiếm cơ sở dữ liệu bằng một truy vấn cụ thể, API sẽ yêu cầu cơ sở dữ liệu thực hiện tìm kiếm và sau đó trả về kết quả. Thông thường, các API giao tiếp qua JSON, hiển thị kết quả dưới dạng một đối tượng với các loại được xác định chính xác, ví dụ:

{
   "name": "MyAPI",
   "search_results": (...)
 }

Đây là một lợi ích khác của API – chuẩn hóa cấu trúc dữ liệu. API phải luôn trả về cùng định dạng và loại dữ liệu mỗi lần, giúp dễ sử dụng trong các ứng dụng khác nhau. Hầu hết các công ty công nghệ lớn đều có API công khai, tài liệu toàn diện về cấu trúc API và cách sử dụng.

Làm cách nào để sử dụng API?

Các API được chuẩn hóa khá. Nó thường có thể truy cập thông qua HTTP và thường trả về dữ liệu JSON, điều đó có nghĩa là bất kỳ ngôn ngữ lập trình nào có thể thực hiện các yêu cầu HTTP và giải mã JSON đều có thể nói với API và lấy dữ liệu từ nó. Ngay cả những thứ đơn giản như curl hoặc wget có thể tải xuống nội dung dựa trên web cũng có thể truy cập API.

Bạn có thể sử dụng các API có sẵn công khai trong bất kỳ ứng dụng nào bạn thích, mặc dù đôi khi chúng bị giới hạn để ngăn chặn lạm dụng. Ví dụ: KeyCDN quản lý API để lấy thông tin trang web từ địa chỉ API, nhưng bạn bị giới hạn ở ba yêu cầu mỗi giây. Bạn có thể sử dụng điều này trong bất kỳ ứng dụng nào bằng cách gửi yêu cầu HTTP GET đến điểm cuối API bằng địa chỉ IP được truyền dưới dạng tham số URL. Ví dụ:

https://tools.keycdn.com/geo.json?host={IP_ADDRESS}

Nó sẽ trả về một cái gì đó như:

{
   "status": "success",
   "description": "Data successfully received.",
   "data": {
     "geo": {
       "host": "173.79.254.254",
       "ip": "173.79.254.254",
       "rdns": "pool-173-79-254-254.washdc.fios.verizon.net",
       "asn": 701,
       "isp": "MCI Communications Services, Inc. d/b/a Verizon Business",
       "country_name": "United States",
       "country_code": "US",
       "region_name": "Virginia",
       "region_code": "VA",
       "city": "Alexandria",
       "postal_code": "22309",
       "continent_name": "North America",
       "continent_code": "NA",
       "latitude": 38.719,
       "longitude": -77.1067,
       "metro_code": 511,
       "timezone": "America/New_York",
       "datetime": "2019-08-22 17:30:48"
     }
   }
 }

Bạn có thể lưu trữ kết quả này trong một phản ứng biến có tên. Sau đó, nếu bạn muốn biết địa chỉ mã bưu chính, bạn có thể truy cập địa chỉ đó bằng answer.data.geo.postal_code.

Có thư viện cho hầu hết các ngôn ngữ giúp quá trình này dễ dàng hơn và nhiều ngôn ngữ cũng có các công cụ tích hợp. Chúng tôi sẽ hiển thị một số trong những phổ biến đó, nhưng tìm kiếm nhanh cho “___ yêu cầu HTTP” sẽ trả về kết quả cho ngôn ngữ của bạn.

JavaScript

JavaScript có thể thực hiện các yêu cầu HTTP ra khỏi hộp bằng cách sử dụng đối tượng XMLHttpRequest ():

const Http = new XMLHttpRequest();
 const url="https://api.github.com/";
 Http.open("GET", url);
 Http.send();
 
 Http.onreadystatechange = (e) => {
   console.log(Http.responseText)
 }

Tuy nhiên, cú pháp này rất đông, vì vậy nó thường được xử lý với các thư viện khác trừ khi bạn cần Vanilla JS. Ví dụ, jQuery có một phương thức ajax quan tâm đến các vấn đề sau:

$.ajax('https://api.github.com/', {
     dataType: 'json',
     success: function (data, status, xhr) { ... }
 });

Có một thư viện trục mà bạn xử lý với lời hứa:

axios.get('https://api.github.com/')
   .then((data) => {
     console.log(data);
   }
 )

Tuy nhiên, các đối tượng JSON có thể được tuần tự hóa trực tiếp đến các đối tượng JavaScript bằng JSON.parse (), điều này sẽ cho phép bạn lưu trữ các kết quả để sử dụng ở nơi khác.

PHP

PHP ban đầu có thể gửi các yêu cầu GET bằng cách sử dụng hàm file_get_contents, có thể được sử dụng cùng với json_decode để đọc kết quả API trong một biến:

$json = file_get_contents('https://api.github.com/');
 $obj = json_decode($json);

Nếu bạn muốn gửi yêu cầu POST hoặc cần cấu hình bổ sung, bạn có thể tạo một bối cảnh đặc biệt cho file_get_contents bằng stream_context_create:

$url="https://api.github.com/";
 $data="something";
 
 $options = array(
   'http' => array(
     'header' => "Content-type: application/x-www-form-urlencodedrn",
     'method' => 'POST',
     'content' => http_build_query($data)
   )
 );
 
 $context = stream_context_create($options);
 $result = file_get_contents($url, false, $context);
 if ($result === FALSE) { //error }

Con trăn

Python không có cách tuyệt vời để làm điều này cục bộ, vì vậy bạn sẽ phải cài đặt các yêu cầu thư viện từ điểm. Sau đó, bạn có thể thực hiện các yêu cầu như thế này:

import requests
 r = requests.get("https://api.github.com/")

Điều này trả về một đối tượng đại diện cho toàn bộ giao dịch HTTP, để có được nội dung thực tế bạn phải sử dụng r.content. Có khả năng, bạn cũng sẽ cần một thư viện JSON để giải mã mã phản hồi thành một đối tượng có thể đọc được Python.

import json
 import requests
 r = requests.get("https://api.github.com/")
 decoded = json.loads(r.content)

Làm cách nào để tạo API web của tôi?

Nếu bạn có một số dữ liệu bạn muốn cung cấp, bạn có thể đặt API trước nó để truy cập trực tuyến.

Để làm điều này, bạn sẽ cần tạo một máy chủ API. Yêu cầu duy nhất là bạn có thể nghe qua HTTP và trả lời các yêu cầu, vì vậy bạn có thể sử dụng bất kỳ ngôn ngữ lập trình nào bạn muốn. Bạn cũng có thể sẽ cần một thư viện để kết nối với cơ sở dữ liệu bạn chọn từ ngôn ngữ đó và bạn cũng có thể muốn thực hiện một số loại xác thực như OAuth 2.0 Vì vậy, bạn có thể theo dõi người dùng và quyền của họ.

Biểu thức là thư viện Node.JS thường được sử dụng để tạo API web đơn giản bằng JavaScript. Máy chủ Express lắng nghe qua HTTP và có thể chuyển tiếp các đường dẫn khác nhau đến các chức năng của bộ xử lý. Bạn có thể sử dụng điều này cùng với máy khách nút MySQL (hoặc bất kỳ cơ sở dữ liệu nào khác) để tạo API giàu dữ liệu. Đối với Python, bạn cũng sẽ cần một khung web như Flask có thể lắng nghe và trả lời các yêu cầu.