RESTful là gì?

REST (Representational State Transfer) là gì?

REST (Representational State Transfer) không phải là một ngôn ngữ lập trình hay một framework, mà là một kiểu kiến trúc phần mềm (architectural style) để thiết kế các hệ thống mạng phân tán, đặc biệt là các dịch vụ web (web services). Nó được giới thiệu bởi Roy Fielding trong luận án tiến sĩ của ông vào năm 2000.

Mục tiêu của REST là tạo ra một cách thức đơn giản, hiệu quả và có khả năng mở rộng để các hệ thống giao tiếp với nhau qua giao thức HTTP.

RESTful API là một API được thiết kế theo các nguyên tắc của kiến trúc REST. Khi một API được gọi là “RESTful”, điều đó có nghĩa là nó tuân thủ các ràng buộc và nguyên tắc cốt lõi của REST. Khi nói về API, RESTful API (thường được gọi tắt là REST API) là một trong những kiểu thiết kế API phổ biến và được sử dụng rộng rãi nhất hiện nay, đặc biệt trong phát triển ứng dụng web và di động.

Các nguyên tắc chính của RESTful API bao gồm:

  1. Client-Server Separation (Phân tách Client-Server):
    • Client (ứng dụng gửi yêu cầu) và Server (ứng dụng cung cấp tài nguyên) hoạt động độc lập với nhau.
    • Client không cần biết về logic nghiệp vụ hay cách lưu trữ dữ liệu của server. Server cũng không cần quan tâm đến giao diện người dùng của client.
    • Điều này giúp tăng tính linh hoạt và khả năng mở rộng, cho phép cả client và server phát triển độc lập.
  2. Stateless (Không trạng thái):
    • Mỗi yêu cầu từ client đến server phải chứa tất cả thông tin cần thiết để server hiểu và xử lý yêu cầu đó.
    • Server không lưu trữ bất kỳ “trạng thái phiên” (session state) nào của client giữa các yêu cầu. Mỗi yêu cầu là độc lập và tự chứa.
    • Điều này giúp API dễ dàng mở rộng (scalable) vì server không phải quản lý trạng thái cho hàng ngàn, thậm chí hàng triệu client cùng lúc. Nó cũng tăng độ tin cậy vì nếu một server bị lỗi, yêu cầu có thể được chuyển sang một server khác mà không mất dữ liệu phiên.
  3. Cacheable (Có thể lưu trữ vào bộ nhớ đệm):
    • Các phản hồi từ server phải được đánh dấu rõ ràng là có thể lưu trữ vào bộ nhớ đệm (cacheable) hay không.
    • Nếu một phản hồi được đánh dấu là cacheable, client hoặc các trung gian (proxy) có thể lưu trữ phản hồi đó và sử dụng lại cho các yêu cầu tương tự trong tương lai, giúp cải thiện hiệu suất và giảm tải cho server.
  4. Uniform Interface (Giao diện đồng nhất): Đây là nguyên tắc quan trọng nhất của REST, bao gồm 4 ràng buộc con:
    • Identification of resources (Nhận dạng tài nguyên): Mọi “tài nguyên” (resource) trong hệ thống phải có một định danh duy nhất (URI/URL). Ví dụ: /users, /products/123.
    • Manipulation of resources through representations (Thao tác với tài nguyên thông qua các biểu diễn): Client tương tác với tài nguyên bằng cách thao tác với các “biểu diễn” (representations) của tài nguyên đó. Biểu diễn có thể là JSON, XML, HTML, v.v. Khi client gửi dữ liệu để tạo hoặc cập nhật tài nguyên, nó gửi một biểu diễn của tài nguyên đó.
    • Self-descriptive messages (Thông điệp tự mô tả): Mỗi thông điệp (yêu cầu hoặc phản hồi) phải chứa đủ thông tin để người nhận có thể hiểu cách xử lý nó. Điều này thường được thực hiện thông qua các HTTP headers (Content-Type, Accept) và cấu trúc của dữ liệu.
    • Hypermedia as the Engine of Application State (HATEOAS): Nguyên tắc này khuyến khích việc các phản hồi API bao gồm các liên kết (hyperlinks) đến các tài nguyên liên quan hoặc các hành động tiếp theo có thể thực hiện. Điều này giúp client “khám phá” API mà không cần biết trước tất cả các URL. (Tuy nhiên, HATEOAS thường ít được triển khai đầy đủ trong thực tế so với các nguyên tắc khác).
  5. Layered System (Hệ thống phân lớp):
    • Client có thể không giao tiếp trực tiếp với server cuối cùng mà thông qua các lớp trung gian như load balancers, proxies, gateways.
    • Các lớp này giúp cải thiện khả năng mở rộng, bảo mật và hiệu suất mà không ảnh hưởng đến giao tiếp giữa client và server.
  6. Code on Demand (Mã theo yêu cầu – Tùy chọn):
    • Server có thể gửi mã thực thi cho client (ví dụ: JavaScript code) để mở rộng chức năng của client. Đây là một ràng buộc tùy chọn và ít phổ biến hơn trong thiết kế RESTful API thông thường.

 

RESTful API sử dụng HTTP Methods như thế nào?

RESTful API sử dụng các method chuẩn của giao thức HTTP để thực hiện các hành động trên tài nguyên:

  • GET: Lấy (đọc) một tài nguyên hoặc một tập hợp tài nguyên.
    • Ví dụ: GET /users (lấy danh sách người dùng), GET /users/123 (lấy thông tin người dùng có ID là 123).
  • POST: Tạo một tài nguyên mới.
    • Ví dụ: POST /users (tạo một người dùng mới với dữ liệu được gửi trong body của yêu cầu).
  • PUT: Cập nhật toàn bộ một tài nguyên đã tồn tại.
    • Ví dụ: PUT /users/123 (cập nhật toàn bộ thông tin người dùng 123 với dữ liệu mới).
  • PATCH: Cập nhật một phần của tài nguyên đã tồn tại.
    • Ví dụ: PATCH /users/123 (chỉ cập nhật một số trường của người dùng 123).
  • DELETE: Xóa một tài nguyên.
    • Ví dụ: DELETE /users/123 (xóa người dùng 123).

Ưu điểm của RESTful API

  • Đơn giản và dễ hiểu: Sử dụng các phương thức HTTP và cấu trúc URL rõ ràng, dễ đọc, dễ đoán.
  • Khả năng mở rộng (Scalability): Nhờ nguyên tắc stateless, server không phải quản lý trạng thái phiên, giúp dễ dàng mở rộng hệ thống.
  • Linh hoạt (Flexibility): Cho phép client và server phát triển độc lập, sử dụng các ngôn ngữ và công nghệ khác nhau miễn là tuân thủ giao thức HTTP.
  • Hiệu suất (Performance): Khả năng cache giúp giảm số lượng yêu cầu đến server và tăng tốc độ phản hồi.
  • Hỗ trợ nhiều định dạng dữ liệu: Phổ biến nhất là JSON và XML, nhưng cũng có thể sử dụng các định dạng khác.
  • Tương thích với Web: Dựa trên các tiêu chuẩn web hiện có (HTTP, URL), dễ dàng tích hợp với các ứng dụng web và trình duyệt.

 

About the Author

Đức Phát

View all author's posts

Leave a Comment

Your email address will not be published. Required fields are marked *

Bài viết khác

Tìm hiểu Hexagonal Architecture

Hexagonal Architecture là gì? Hexagonal Architecture (tên gọi khác là ports and adapters architecture), là một mẫu kiến trúc được dùng trong thiết kế phần mềm. Nó hướng tới việc xây dựng ứng dụng xoay quanh business/application logic mà không ảnh hưởng hoặc phụ thuộc bởi bất kì thành phần bên ngoài, mà chỉ giao […]

Go-pg

go-pg là một thư viện ORM (Object-Relational Mapping) và trình điều khiển PostgreSQL cho ngôn ngữ lập trình Go. Nó cung cấp một cách tiện lợi để tương tác với cơ sở dữ liệu PostgreSQL bằng cách ánh xạ các cấu trúc (structs) trong Go thành các bảng trong cơ sở dữ liệu và ngược […]

Ngôn ngữ lập trình Golang

Golang là gì? Go (hay còn gọi là Golang) là một ngôn ngữ lập trình được thiết kế dựa trên tư duy lập trình hệ thống. Go được phát triển bởi Robert Griesemer, Rob Pike và Ken Thompson tại Google vào năm 2007. Điểm mạnh của Go là bộ thu gom rác và hỗ trợ […]

Hệ quản trị CSDL PostgreSQL

SQL là gì? SQL (Structured Query Language) là viết tắt của Ngôn ngữ truy vấn có cấu trúc, là ngôn ngữ được tiêu chuẩn hóa để tương tác với các hệ thống quản lý cơ sở dữ liệu quan hệ (RDBMS). Cơ sở dữ liệu quan hệ là tập hợp dữ liệu được tổ chức thành các […]

Flutter Form

FLUTTER FORM LÀ GÌ? Form trong Flutter là một widget dùng để thu thập và kiểm tra dữ liệu người dùng nhập vào. Khi ứng dụng yêu cầu nhập nhiều trường (fields) và cần xác minh tính hợp lệ của các giá trị này, việc sử dụng Form kết hợp với TextFormField là giải pháp […]

Backend xử lý với dữ liệu người dùng tải lên như thế nào?

Khi người dùng tải lên dữ liệu (file, hình ảnh, video, v.v.), backend thường xử lý dữ liệu này qua các bước sau: Nhận dữ liệu  Qua API: Backend nhận dữ liệu từ HTTP request (thường là POST hoặc PUT). Ví dụ: sử dụng multipart/form-data cho file. Xác thực dữ liệu Kiểm tra định dạng: […]