API là gì?
API là viết tắt của cụm từ “Application Programming Interface” (Giao diện Lập trình Ứng dụng). Đây là một tập hợp các quy tắc và các hàm, thủ tục, cấu trúc dữ liệu mà một phần mềm cung cấp để cho phép các ứng dụng khác tương tác với nó. API thường được sử dụng để cho phép các ứng dụng khác truy cập vào các chức năng hoặc dữ liệu của một ứng dụng hoặc dịch vụ cụ thể mà không cần biết chi tiết cách ứng dụng hoặc dịch vụ đó được triển khai bên trong. Điều này giúp tạo ra sự linh hoạt và khả năng tích hợp giữa các ứng dụng khác nhau.
Lịch sử của API
Lịch sử của API được kéo dài qua nhiều giai đoạn và có sự phát triển đáng kể:
- API sơ khai (Trước năm 2000):
- Trong thời kỳ này, API thường được sử dụng trong các ứng dụng máy tính và hệ thống nhúng để tương tác với phần mềm khác thông qua các giao tiếp dựa trên tệp hoặc giao thức mạng như TCP/IP.
- Web APIs và SOAP (2000 – 2010):
- Sự phát triển của Web APIs đã mở ra một thế giới mới của tích hợp và tương tác trên Internet. SOAP (Simple Object Access Protocol) là một trong những giao thức phổ biến nhất được sử dụng cho các Web API trong thời kỳ này. SOAP cho phép truyền tải dữ liệu qua HTTP và giao tiếp giữa các ứng dụng được xây dựng trên nền tảng và ngôn ngữ lập trình khác nhau.
- RESTful APIs (2005 – nay):
- REST (Representational State Transfer) đã trở thành một kiểu kiến trúc phổ biến cho các Web API. RESTful APIs sử dụng các phương thức HTTP như GET, POST, PUT, DELETE để truy cập và quản lý tài nguyên. REST đặc biệt phù hợp với các ứng dụng web và di động, với khả năng đơn giản hóa giao tiếp và tích hợp.
- APIs mở và Ecosystems (năm 2010 – nay):
- Trong những năm gần đây, việc sử dụng APIs đã trở thành một phần không thể thiếu của các mô hình kinh doanh hiện đại. Các công ty lớn như Google, Facebook, Twitter đã phát triển các APIs mạnh mẽ và mở ra cho cộng đồng phát triển để tạo ra các ứng dụng và dịch vụ mới. Các ecosystem xây dựng xung quanh các APIs này đã thúc đẩy sự sáng tạo và đổi mới trong ngành công nghiệp công nghệ.
- GraphQL và API dựa trên Event (năm 2015 – nay):
- GraphQL đã trở thành một lựa chọn khác cho việc phát triển API, cho phép các ứng dụng yêu cầu chính xác dữ liệu mà họ cần, giúp tăng hiệu suất và tiết kiệm băng thông. Ngoài ra, API dựa trên sự kiện (như Webhooks) cũng đang trở nên phổ biến, cho phép các ứng dụng nhận thông báo và dữ liệu tự động khi có sự kiện xảy ra trên hệ thống khác.
Tầm quan trọng của API
API là một phần cực kỳ quan trọng của cơ sở hạ tầng công nghệ hiện đại với những ưu điểm và tầm quan trọng sau:
- Tích hợp hệ thống: API cho phép các hệ thống khác nhau tương tác và làm việc cùng nhau một cách hiệu quả. Bằng cách sử dụng API, các ứng dụng và dịch vụ có thể giao tiếp và chia sẻ dữ liệu mà không cần biết chi tiết cách mà hệ thống bên trong hoạt động.
- Mở rộng khả năng sử dụng: API cho phép mở rộng khả năng sử dụng của một ứng dụng hoặc dịch vụ bằng cách cho phép người khác tạo ra các ứng dụng bên ngoài hoặc tích hợp vào các hệ thống khác.
- Tăng tính linh hoạt: Bằng cách cung cấp một giao diện lập trình tiêu chuẩn, API giúp tăng tính linh hoạt và thích ứng của các hệ thống, cho phép chúng thay đổi và mở rộng mà không gây ra sự cố hoặc ảnh hưởng đến các ứng dụng hoặc dịch vụ khác.
- Tạo ra cộng đồng phát triển mở: API mở cửa cho cộng đồng phát triển để tạo ra các ứng dụng và dịch vụ mới dựa trên các nền tảng đã có sẵn. Điều này thúc đẩy sự sáng tạo và đổi mới trong ngành công nghiệp công nghệ.
- Tăng cường trải nghiệm người dùng: API cho phép tích hợp và tương tác giữa các ứng dụng và dịch vụ, tạo ra trải nghiệm tốt hơn cho người dùng cuối. Ví dụ, việc sử dụng API để tích hợp các dịch vụ thanh toán vào một ứng dụng mua sắm trực tuyến giúp người dùng thanh toán một cách thuận tiện và an toàn hơn.
Một số ứng dụng sử dụng API
Có rất nhiều ví dụ về ứng dụng sử dụng API. Dưới đây là một số ví dụ phổ biến:
- Ứng dụng di động sử dụng API Google Maps: Các ứng dụng di động như Uber, Lyft sử dụng API của Google Maps để cung cấp dịch vụ điều hướng, tìm địa điểm và xác định vị trí.
- Mạng xã hội sử dụng API Facebook: Các mạng xã hội như Instagram, Twitter sử dụng API của Facebook để cho phép người dùng đăng nhập bằng tài khoản Facebook và chia sẻ nội dung với bạn bè trên Facebook.
- Ứng dụng e-commerce sử dụng API thanh toán như Stripe hoặc PayPal: Các ứng dụng thương mại điện tử sử dụng API của các dịch vụ thanh toán như Stripe hoặc PayPal để xử lý thanh toán trực tuyến một cách an toàn và thuận tiện cho người dùng.
- Ứng dụng nhận dữ liệu từ API thời tiết: Các ứng dụng như Weather.com, AccuWeather sử dụng API từ các dịch vụ dự báo thời tiết như OpenWeatherMap để cung cấp thông tin về thời tiết cho người dùng.
- Ứng dụng tin tức sử dụng API RSS: Các ứng dụng đọc tin tức như Flipboard, Feedly sử dụng API RSS để lấy tin tức từ các trang web và blog khác nhau và hiển thị chúng trong ứng dụng của mình.
- Ứng dụng sử dụng API YouTube: Ứng dụng như TikTok sử dụng API của YouTube để tải và phát video từ YouTube trực tiếp trong ứng dụng của mình.
Những ví dụ này chỉ là một phần nhỏ trong số rất nhiều ứng dụng sử dụng API để cung cấp các tính năng và dịch vụ cho người dùng của mình.
Cách xây dựng một ứng dụng api
Xây dựng một ứng dụng API thường đi qua các bước sau:
- Xác định yêu cầu: Đầu tiên, bạn cần xác định mục tiêu của API và yêu cầu chính xác của nó. Điều này bao gồm việc xác định các chức năng và dịch vụ mà API sẽ cung cấp, đối tượng sử dụng API và cách mà họ sẽ tương tác với nó.
- Thiết kế API: Bạn cần thiết kế cấu trúc và giao diện của API. Điều này bao gồm việc xác định các điểm cuối (endpoints), các phương thức HTTP (GET, POST, PUT, DELETE) và định dạng dữ liệu (JSON, XML) sẽ được sử dụng.
- Phát triển ứng dụng: Bắt đầu viết mã để triển khai logic của API. Sử dụng ngôn ngữ lập trình và framework phù hợp với yêu cầu của bạn. Đảm bảo kiểm thử đơn vị và tích hợp liên tục trong quá trình phát triển.
- Bảo mật: Xác thực và phân quyền người dùng đối với các endpoint API là rất quan trọng. Sử dụng các phương thức bảo mật như OAuth để bảo vệ API của bạn khỏi các cuộc tấn công.
- Tài liệu API: Tạo tài liệu chi tiết cho API của bạn để người dùng có thể hiểu cách sử dụng và tương tác với nó. Tài liệu này bao gồm các hướng dẫn sử dụng, ví dụ và mô tả chi tiết về các endpoint và tham số.
- Triển khai và quản lý: Triển khai API của bạn trên môi trường sản phẩm và quản lý nó trong suốt vòng đời của ứng dụng. Đảm bảo các cập nhật, sửa lỗi và mở rộng được thực hiện một cách hiệu quả.
- Giám sát và phản hồi: Theo dõi hiệu suất của API và phản hồi với các vấn đề người dùng. Sử dụng các công cụ giám sát như logs, analytics để theo dõi lưu lượng và hiểu biết về cách người dùng sử dụng API của bạn.
Một ví dụ đơn giản về sử dụng api để nhận thông tin lưu về MySQL
Dưới đây là một ví dụ đơn giản về cách sử dụng một API để nhận thông tin từ một cơ sở dữ liệu MySQL bằng PHP:
Tạo cơ sở dữ liệu MySQL:
Trước tiên, bạn cần tạo một cơ sở dữ liệu MySQL với một bảng và một số dữ liệu mẫu. Dưới đây là một ví dụ về cách thực hiện điều này:
CREATE DATABASE test;
USE test;
CREATE TABLE khachhang (
id INT AUTO_INCREMENT PRIMARY KEY,
Ten VARCHAR(50),
DienThoai VARCHAR(10),
DiaChi VARCHAR(255),
SanPham VARCHAR(255)
);
INSERT INTO khachhang( 'Ten', 'DienThoai', 'DiaChi', 'SanPham') VALUES ('Đỗ Văn Tùng','0912345678','Bắc Từ Liêm, Hà Nội','Thuốc Bắc')
Tạo tập tin PHP index.php để tạo API:
Tiếp theo, bạn sẽ tạo một tập tin PHP để kết nối đến cơ sở dữ liệu MySQL và trả về thông tin dưới dạng JSON. Dưới đây là một ví dụ về tập tin PHP này (ví dụ: index.php
):
<?php
// Kiểm tra xem yêu cầu có phải là POST và có chứa dữ liệu JSON không
if ($_SERVER['REQUEST_METHOD'] !== 'POST' || !isset($_SERVER['CONTENT_TYPE']) || $_SERVER['CONTENT_TYPE'] !== 'application/json') {
http_response_code(400);
echo json_encode(array('message' => 'Bad request'));
exit;
}
// Đọc dữ liệu JSON từ yêu cầu
$input = file_get_contents('php://input');
$data = json_decode($input, true);
// Kiểm tra xem dữ liệu có hợp lệ không
if (!isset($data['Ten']) || !isset($data['DienThoai']) || !isset($data['DiaChi']) || !isset($data['SanPham'])) {
http_response_code(400);
echo json_encode(array('message' => 'Missing data'));
exit;
}
// Kiểm tra xác thực token
$token = isset($_SERVER['HTTP_AUTHORIZATION']) ? trim(str_replace('Token ', '', $_SERVER['HTTP_AUTHORIZATION'])) : null;
if ($token !== '12345') {
http_response_code(401);
echo json_encode(array('message' => 'Unauthorized.....'));
exit;
}
// Kết nối đến cơ sở dữ liệu (thay đổi thông tin kết nối phù hợp)
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test";
// Tạo kết nối đến cơ sở dữ liệu
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
http_response_code(500);
echo json_encode(array('message' => 'Database connection error'));
exit;
}
// Chuẩn bị câu lệnh SQL để chèn dữ liệu vào bảng
$sql = "INSERT INTO khachhang (Ten, DienThoai, DiaChi, SanPham) VALUES (?, ?, ?, ?)";
$stmt = $conn->prepare($sql);
// Kiểm tra lỗi khi chuẩn bị câu lệnh SQL
if (!$stmt) {
http_response_code(500);
echo json_encode(array('message' => 'Database error: ' . $conn->error));
exit;
}
// Bind dữ liệu và thực thi câu lệnh SQL
$stmt->bind_param('ssss', $data['Ten'], $data['DienThoai'], $data['DiaChi'], $data['SanPham']);
if (!$stmt->execute()) {
http_response_code(500);
echo json_encode(array('message' => 'Database error: ' . $stmt->error));
exit;
}
// Đóng kết nối đến cơ sở dữ liệu
$stmt->close();
$conn->close();
// Trả về kết quả thành công
http_response_code(200);
echo json_encode(array('message' => 'Data inserted successfully'));
?>
Truy cập API từ trình duyệt hoặc ứng dụng khác:
Để gửi dữ liệu về Link api được tạo, bạn có thể cần xây dựng thêm Form gửi dữ liệu và xử lý thông tin gửi qua link API được tạo.
Tạo giao diện gửi dữ liệu senddata.php có thể như sau:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Form</title>
<style>
body {
font-family: Arial, sans-serif;
background-color: #f4f4f4;
margin: 0;
padding: 0;
}
.container {
max-width: 500px;
margin: 50px auto;
background-color: #fff;
padding: 20px;
border-radius: 10px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
}
h2 {
text-align: center;
color: #333;
}
form {
margin-top: 20px;
}
label {
display: block;
margin-bottom: 5px;
color: #333;
}
input[type="text"] {
width: 96%;
padding: 10px;
margin-bottom: 20px;
border: 1px solid #ccc;
border-radius: 5px;
}
input[type="submit"] {
background-color: #4caf50;
color: #fff;
border: none;
padding: 10px 20px;
cursor: pointer;
border-radius: 5px;
transition: background-color 0.3s;
}
input[type="submit"]:hover {
background-color: #45a049;
}
</style>
</head>
<body>
<div class="container">
<h2>Gửi dữ liệu sang link API</h2>
<form action="process-data.php" method="POST">
<label for="ten">Tên:</label>
<input type="text" id="ten" name="ten" required><br>
<label for="dienthoai">Điện thoại:</label>
<input type="text" id="dienthoai" name="dienthoai" required><br>
<label for="diachi">Địa chỉ:</label>
<input type="text" id="diachi" name="diachi" required><br>
<label for="sanpham">Sản phẩm:</label>
<input type="text" id="sanpham" name="sanpham" required><br>
<input type="submit" value="Gửi">
</form>
</div>
</body>
</html>
Giao diện hiển thị có thể như sau:
Tạo file xử lý dữ liệu process-data.php có thể như sau:
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// Lấy dữ liệu từ form và gán vào mảng $data
$data = array(
'Ten' => $_POST['ten'],
'DienThoai' => $_POST['dienthoai'],
'DiaChi' => $_POST['diachi'],
'SanPham' => $_POST['sanpham']
);
// Token xác thực
$token = '12345'; // Thay mã token bằng token xác thực của bạn (bất kỳ mã nào cũng đc, nhưng phải bảo mật)
// URL endpoint API
$url = 'http://localhost/test/api/'; // Thay URL này bằng URL thực tế của bạn
$result = cUrl($url, $data, 'POST', $token);
}
function cUrl($url, $data = null, $type = 'POST', $token)
{
$header = [
"Authorization: Token $token",
"cache-control: max-age=0",
"upgrade-insecure-requests: 1",
"Content-Type: application/json"
];
$curl_array = [
CURLOPT_URL=> $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_FRESH_CONNECT => true,
CURLOPT_TIMEOUT=> 30,
CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_SSL_VERIFYPEER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLINFO_HEADER_OUT=> true,
CURLOPT_CUSTOMREQUEST => $type,
CURLOPT_HTTPHEADER => $header,
];
if ($data) {
$curl_array[CURLOPT_POSTFIELDS] = json_encode($data);
}
$curl = curl_init();
curl_setopt_array($curl, $curl_array);
$response = curl_exec($curl);
echo 'Response: ' . $response;
$err = curl_error($curl);
curl_close($curl);
if ($err) {
return $err;
} else {
return $response;
}
}
?>
Sau khi chạy thử gửi dữ liệu: Nếu gửi thành công bạn sẽ nhận được thông báo
Response: {"message":"Data inserted successfully"}
Khi gửi và nhận dữ liệu thông qua API với việc sử dụng token để bảo mật, có một số lưu ý quan trọng cần xem xét:
- Bảo mật token: Token nên được bảo mật và không được chia sẻ hoặc truyền qua các kênh không an toàn như URL. Thông thường, token được truyền qua phần đầu của yêu cầu HTTP, như là một phần của tiêu đề Authorization.
- Sử dụng kết nối an toàn: Khi truyền token và dữ liệu qua mạng, luôn sử dụng kết nối an toàn (HTTPS) để đảm bảo rằng dữ liệu không bị đánh cắp hoặc thay đổi trong quá trình truyền.
- Xác thực token: Trước khi xử lý yêu cầu từ client, server cần kiểm tra tính hợp lệ của token. Nếu token không hợp lệ hoặc hết hạn, server cần trả về mã lỗi tương ứng và từ chối yêu cầu.
- Quản lý và làm mới token: Đối với các phiên làm việc dài hạn, quản lý và làm mới token là rất quan trọng. Điều này đảm bảo rằng người dùng vẫn có thể truy cập vào hệ thống mà không cần phải đăng nhập lại quá nhiều lần.
- Giới hạn quyền truy cập: Token có thể được kết hợp với các phân quyền hoặc phân quyền khác nhau để giới hạn quyền truy cập của người dùng. Điều này giúp ngăn chặn việc truy cập không được ủy quyền vào các tài nguyên nhạy cảm.
- Ghi log và giám sát: Ghi log các hoạt động sử dụng token và thực hiện giám sát hệ thống để phát hiện các hành vi không mong muốn hoặc tấn công bảo mật.
Bằng cách tuân thủ các lưu ý này, bạn có thể tăng cường bảo mật và đảm bảo tính toàn vẹn của hệ thống khi gửi và nhận dữ liệu thông qua API với việc sử dụng token.