RESTful API (Representational State Transfer) là một kiểu kiến trúc và giao thức cho việc thiết kế và quản lý các giao diện lập trình ứng dụng (API) trên các hệ thống phân tán. RESTful API được xây dựng dựa trên các nguyên tắc cơ bản của kiến trúc REST, một phương pháp mà Roy Fielding đã mô tả trong luận văn của mình vào năm 2000.
Các đặc điểm chính của RESTful API bao gồm:
Cách thức truy cập dựa trên địa chỉ (URLs)
Mỗi tài nguyên được đại diện bằng một URL (Uniform Resource Locator), cho phép các hệ thống giao tiếp thông qua các yêu cầu HTTP như GET, POST, PUT và DELETE.
Cách thức truy cập stateless (không lưu trạng thái)
Mọi yêu cầu từ client đều chứa đủ thông tin cần thiết để server hiểu yêu cầu mà không cần dựa vào thông tin trạng thái trước đó. Server không cần lưu trữ thông tin về trạng thái của client giữa các yêu cầu.
Sử dụng các phương thức HTTP
RESTful API sử dụng các phương thức HTTP (GET, POST, PUT, DELETE) để định rõ mục đích của mỗi yêu cầu. Ví dụ: sử dụng GET để lấy thông tin, POST để tạo mới, PUT để cập nhật, DELETE để xóa.
Sử dụng các loại định dạng dữ liệu (Media Types)
Dữ liệu được truyền qua mạng thông qua các định dạng như JSON, XML, hoặc các định dạng tùy chỉnh khác. Mỗi yêu cầu cần chỉ rõ định dạng dữ liệu mà nó mong muốn.
Cách thức định danh tài nguyên (Resource Identification)
Các tài nguyên được định danh bằng các URL duy nhất, cho phép client truy cập vào tài nguyên bằng cách sử dụng đường dẫn đến tài nguyên.
Cacheable (Có thể lưu cache)
Các yêu cầu và phản hồi của RESTful API có thể được lưu trữ trong bộ nhớ cache của client hoặc proxy server để tối ưu hóa hiệu suất.
Lớp giao diện (Layered system)
Kiến trúc REST cho phép thêm các lớp trung gian như load balancer hoặc proxy server để tăng khả năng mở rộng và quản lý.
RESTful API được sử dụng rộng rãi trong phát triển ứng dụng web và di động, cho phép các ứng dụng giao tiếp và chia sẻ dữ liệu một cách hiệu quả. Các dịch vụ web lớn như Facebook, Twitter và Google cũng đều sử dụng kiến trúc RESTful để cung cấp các API cho các nhà phát triển.