RESTful API là gì? Hướng dẫn chi tiết cho người mới bắt đầu

Sự quan trọng của API trong phát triển ứng dụng hiện đại là không thể phủ nhận. Một ứng dụng không có API giống như một cỗ máy tính không kết nối internet, thiếu khả năng tương tác và trao đổi dữ liệu. Sau một thời gian phát triển, các chuẩn mực chung hình thành, và đối với API, đó chính là RESTful.

Hiện nay có rất nhiều bài viết về RESTful API, nhưng tôi vẫn muốn chia sẻ kiến thức và kinh nghiệm của mình về thiết kế RESTful API. Bài viết này dựa trên quá trình tự tìm hiểu và tham khảo từ nhiều nguồn khác nhau.

RESTful API: Tổng quan

Nguyên lý REST và cấu trúc dữ liệu RESTful được biết đến rộng rãi trong giới lập trình web và ứng dụng.

REST không phải là một công nghệ cụ thể, mà là một phương pháp tạo API với các nguyên tắc tổ chức nhất định. Những nguyên tắc này hướng dẫn lập trình viên xây dựng một môi trường xử lý API request toàn diện.

Để hiểu rõ hơn về RESTful API, chúng ta sẽ lần lượt giải thích các khái niệm API, REST và RESTful.

RESTful API là gì?

RESTful API là một tiêu chuẩn thiết kế API cho các ứng dụng web (Web services), tập trung vào việc quản lý các tài nguyên (resource). Nó coi trọng tài nguyên hệ thống (ví dụ: tệp văn bản, hình ảnh, âm thanh, video, dữ liệu động), bao gồm trạng thái tài nguyên được định dạng và truyền tải qua HTTP.

Các thành phần cơ bản của RESTful API

Để hiểu rõ hơn về RESTful API, chúng ta cần nắm vững các thành phần cơ bản sau:

  • API (Application Programming Interface): Là một tập hợp các quy tắc và cơ chế cho phép các ứng dụng hoặc thành phần phần mềm tương tác với nhau. API có thể trả về dữ liệu ở nhiều định dạng phổ biến như JSON hoặc XML.

  • REST (Representational State Transfer): Là một kiểu kiến trúc để xây dựng API. Nó sử dụng các phương thức HTTP đơn giản để giao tiếp giữa các máy. Thay vì sử dụng một URL duy nhất để xử lý nhiều thao tác, REST sử dụng các yêu cầu HTTP khác nhau (GET, POST, PUT, DELETE, v.v.) đến các URL khác nhau để thực hiện các hành động tương ứng.

  • RESTful API: Là một API tuân theo các nguyên tắc của kiến trúc REST. RESTful API sử dụng các phương thức HTTP chuẩn để thực hiện các thao tác CRUD (Create, Read, Update, Delete) trên các tài nguyên.

Chức năng quan trọng nhất của REST là quy định cách sử dụng các HTTP method (như GET, POST, PUT, DELETE…) và cách định dạng các URL cho ứng dụng web để quản các resource. RESTful không quy định logic code ứng dụng và không giới hạn bởi ngôn ngữ lập trình ứng dụng, bất kỳ ngôn ngữ hoặc framework nào cũng có thể sử dụng để thiết kế một RESTful API.

Alt: Minh họa mô hình hoạt động của một API với các thành phần và luồng dữ liệu.

RESTful API hoạt động như thế nào?

Tương tự như các giao thức truyền thông hoặc cấu trúc dữ liệu khác, để hiểu bản chất của RESTful API, trước hết cần nắm vững nguyên lý hoạt động của nó.

REST hoạt động chủ yếu dựa vào giao thức HTTP. Các hoạt động cơ bản sử dụng các phương thức HTTP riêng:

  • GET (SELECT): Truy xuất một Resource hoặc một danh sách Resource.
  • POST (CREATE): Tạo mới một Resource.
  • PUT (UPDATE): Cập nhật thông tin cho Resource.
  • DELETE (DELETE): Xóa một Resource.

Các phương thức này thường được gọi là CRUD, tương ứng với Create, Read, Update, Delete – Tạo, Đọc, Sửa, Xóa.

Hiện nay, phần lớn lập trình viên viết RESTful API thường chọn JSON làm định dạng dữ liệu chính, nhưng XML cũng được sử dụng.

Xác thực yêu cầu (Authentication request) và cấu trúc dữ liệu trả về

RESTful API không sử dụng session và cookie mà sử dụng access_token với mỗi request. Bạn có thể tìm hiểu về JWT (JsonWebToken) để hiểu rõ hơn về cơ chế này.

Cấu trúc dữ liệu trả về thường có dạng như sau:

{
  "status_code": 200,
  "data": [
    {
      "name": "ManhLD",
      "email": "[email protected]",
      "ny": "not found"
    },
    {
      "name": "Ahri",
      "email": "[email protected]",
      "ny": "Ezreal"
    }
  ],
  "error_messages": ""
}

Ví dụ trên minh họa cấu trúc trả về của một API lấy danh sách người dùng (users) trong hệ thống.

Alt: Ví dụ về cấu trúc dữ liệu JSON trả về từ một API RESTful, minh họa các trường dữ liệu cơ bản.

Mã trạng thái (Status code)

Khi gửi một yêu cầu đến API, server sẽ trả về một mã trạng thái để thông báo kết quả:

  • 200 OK: Yêu cầu thành công (GET, PUT, PATCH hoặc DELETE).
  • 201 Created: Resource vừa được tạo thành công.
  • 204 No Content: Resource đã được xóa thành công.
  • 304 Not Modified: Client có thể sử dụng dữ liệu cache.
  • 400 Bad Request: Yêu cầu không hợp lệ.
  • 401 Unauthorized: Yêu cầu cần xác thực (Authentication).
  • 403 Forbidden: Không được phép truy cập.
  • 404 Not Found: Không tìm thấy resource trên URI.
  • 405 Method Not Allowed: Phương thức không được phép với user hiện tại.
  • 410 Gone: Resource không còn tồn tại, phiên bản cũ không còn được hỗ trợ.
  • 415 Unsupported Media Type: Không hỗ trợ kiểu Resource này.
  • 422 Unprocessable Entity: Dữ liệu không hợp lệ.
  • 429 Too Many Requests: Yêu cầu bị từ chối do vượt quá giới hạn.

Trong Ruby on Rails, bạn có thể sử dụng symbol hoặc số nguyên để biểu diễn status code.

Quản lý phiên bản API (API versioning)

Khi thiết kế API cho ứng dụng iOS hoặc client-side, nên sử dụng versioning cho các API. Ví dụ: api/v1/users.

Việc này giúp hệ thống hỗ trợ các API của phiên bản cũ sau khi nâng cấp, đồng thời giúp việc bảo trì và sửa chữa dễ dàng hơn.

Alt: Minh họa cách quản lý version API, thể hiện các endpoint khác nhau cho các phiên bản khác nhau của API.

Ưu điểm của RESTful API

Việc sử dụng RESTful API mang lại nhiều lợi ích cho các lập trình viên:

  • Ứng dụng rõ ràng và dễ hiểu hơn.
  • URL đại diện cho resource, không phải hành động.
  • Dữ liệu được trả về với nhiều định dạng khác nhau (XML, HTML, JSON…).
  • Code đơn giản và ngắn gọn.
  • REST tập trung vào tài nguyên của hệ thống.

Nhiều trang web hiện nay sử dụng REST API để cho phép kết nối đến dữ liệu của họ. Facebook cũng cung cấp REST API để giúp các ứng dụng bên ngoài kết nối đến dữ liệu của họ.

Kết luận

Hy vọng bài viết này giúp bạn hiểu rõ hơn về RESTful API. Trong bài viết tiếp theo, tôi sẽ hướng dẫn xây dựng một ứng dụng RESTful API với Ruby on Rails.

Nguồn tham khảo: Viblo, Google, Topdev, Medium