REST APIs: Giao tiếp đơn giản cho các ứng dụng mạnh mẽ

Hiểu REST APIs, cách đơn giản và linh hoạt để các ứng dụng giao tiếp với nhau. Tìm hiểu về ưu điểm, nhược điểm, các trường hợp sử dụng phổ biến và các phương thức HTTP (GET, POST, PUT, v.v.) với những ví dụ rõ ràng.
REST APIs: Giao tiếp đơn giản cho các ứng dụng mạnh mẽ

REST API là gì?

REST API là một cách để các chương trình máy tính khác nhau giao tiếp với nhau qua internet. Nó giống như một người phục vụ trong nhà hàng, nhận đơn từ khách hàng và mang thức ăn từ nhà bếp.
REST là viết tắt của:

  • RE - Đại diện (REpresentational)
  • S - Trạng thái (State)
  • T - Chuyển đổi (Transfer)

Đây là một kiểu kiến trúc để thiết kế các ứng dụng mạng. Ý tưởng là bạn đại diện cho trạng thái của các tài nguyên (như các đối tượng dữ liệu) và chuyển đổi sự đại diện đó giữa máy trạm (client) và máy chủ (server).

Ưu điểm

  • Dễ hiểu và sử dụng. Ví dụ: Một ứng dụng thời tiết sử dụng REST API để lấy dữ liệu nhiệt độ hiện tại. Nó chỉ cần gửi một yêu cầu tới openweathermap.org và nhận lại nhiệt độ https://openweathermap.org/current.
  • Làm việc với nhiều ngôn ngữ lập trình. Ví dụ: Cùng một API thời tiết có thể được sử dụng bởi một ứng dụng iOS viết bằng Swift, một ứng dụng Android bằng Java, và một trang web sử dụng Rust/Go/Python/Ruby/PHP/JavaScript, v.v.
  • Khả năng mở rộng - có thể xử lý nhiều người dùng. Ví dụ: REST API của Twitter có thể xử lý hàng triệu yêu cầu từ các ứng dụng và trang web truy cập vào các tweet cùng một lúc.
  • Không trạng thái (Stateless) - mỗi yêu cầu là độc lập. Ví dụ: Khi bạn kiểm tra số dư ngân hàng qua ứng dụng ngân hàng, mỗi yêu cầu về số dư của bạn là hoàn chỉnh riêng lẻ, không phụ thuộc vào các yêu cầu trước đó.

Nhược điểm

  • Có thể chậm hơn đối với các hoạt động phức tạp. Ví dụ: Để lấy thông tin hồ sơ người dùng, danh sách bạn bè và các bài đăng gần đây trên một nền tảng mạng xã hội, bạn có thể cần ba cuộc gọi API riêng biệt, điều này mất nhiều thời gian hơn so với một cuộc gọi duy nhất.
  • Có thể yêu cầu nhiều yêu cầu cho dữ liệu liên quan. Chúng ta có thể lấy dữ liệu với GraphQL: Một cách tiếp cận hiện đại với APIs https://vulehuan.com/vi/blog/2024/7/lay-du-lieu-voi-graphql-mot-cach-tiep-can-hien-dai-doi-voi-apis-6688acebc9dec2dec37a1b8e.html
  • Không lý tưởng cho các cập nhật thời gian thực. Ví dụ: Một ứng dụng giao dịch chứng khoán sử dụng REST API có thể không hiển thị các thay đổi giá ngay lập tức, vì nó cần liên tục gửi các yêu cầu mới để lấy các cập nhật.

Khi nào nên sử dụng REST API

  • Xây dựng các ứng dụng di động hoặc web. Ví dụ: Một ứng dụng công thức nấu ăn lấy các công thức từ một cơ sở dữ liệu trung tâm.
  • Tạo các API công cộng để người khác sử dụng. Ví dụ: Google Maps API, cho phép các nhà phát triển tích hợp bản đồ vào ứng dụng của họ.
  • Khi bạn cần giao tiếp đơn giản, tiêu chuẩn giữa các hệ thống. Ví dụ: Một widget thời tiết trên trang tin tức lấy dữ liệu từ dịch vụ thời tiết.

Khi nào không nên sử dụng REST API

  • Các ứng dụng thời gian thực (như chat hoặc game). Ví dụ: Một trò chơi trực tuyến nhiều người chơi cần giao tiếp thời gian thực liên tục, được phục vụ tốt hơn bởi các công nghệ như WebSockets.
  • Các hoạt động phức tạp đòi hỏi nhiều bước. Ví dụ: Hệ thống ngân hàng xử lý một đơn xin thế chấp, bao gồm nhiều kiểm tra và thao tác.
  • Khi bạn cần duy trì trạng thái giữa các yêu cầu. Ví dụ: Một giỏ hàng mua sắm trực tuyến cần nhớ những mặt hàng bạn đã thêm qua nhiều lượt xem trang.

REST APIs được sử dụng rộng rãi vì chúng đơn giản và linh hoạt. Chúng phù hợp với nhiều dự án, nhưng không phải lúc nào cũng là lựa chọn tốt nhất cho mọi tình huống. Hãy xem xét nhu cầu cụ thể của bạn khi quyết định sử dụng REST API.

Các phương thức HTTP chính được sử dụng trong REST APIs

  • GET
    • Mục đích: Lấy dữ liệu
    • Ví dụ: GET /users/123 (lấy dữ liệu cho người dùng có ID 123)
  • POST
    • Mục đích: Tạo dữ liệu mới
    • Ví dụ: POST /users (tạo người dùng mới)
  • PUT
    • Mục đích: Cập nhật dữ liệu hiện có (thay thế toàn bộ tài nguyên)
    • Ví dụ: PUT /users/123 (cập nhật tất cả các trường cho người dùng 123)
  • PATCH
    • Mục đích: Cập nhật một phần dữ liệu hiện có
    • Ví dụ: PATCH /users/123 (cập nhật chỉ các trường được chỉ định cho người dùng 123)
  • DELETE
    • Mục đích: Xóa dữ liệu
    • Ví dụ: DELETE /users/123 (xóa người dùng có ID 123)
  • HEAD
    • Mục đích: Tương tự như GET, nhưng chỉ lấy header, không lấy body
    • Ví dụ: HEAD /users/123 (kiểm tra xem người dùng 123 có tồn tại không)
  • OPTIONS
    • Mục đích: Mô tả các tùy chọn giao tiếp cho tài nguyên mục tiêu
    • Ví dụ: OPTIONS /users (trả về các phương thức có sẵn trên endpoint /users)

Các phương thức này theo các thao tác CRUD (Create, Read, Update, Delete) là cơ bản để tương tác với hầu hết các hệ thống lưu trữ dữ liệu.

Hãy nhớ rằng, cách triển khai cụ thể có thể thay đổi, nhưng đây là các phương thức tiêu chuẩn được sử dụng trong RESTful APIs. Lựa chọn phương thức phụ thuộc vào những gì bạn muốn làm với dữ liệu.

Ví dụ

Thực hiện thao tác GET để lấy và hiển thị sách từ REST API:

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
</head>
<body>
  <h1>Danh sách sách</h1>
  <ul id="bookList"></ul>
  <script>
  const apiUrl = 'http://localhost:3000/api/books';
  $(document).ready(function(){
    $.get(apiUrl, function(books){
      books.forEach(function(book) {
        $('#bookList').append(`<li>${book.title} by ${book.author}</li>`);
      });
    });
  });
  </script>
</body>
</html>