Bất ngờ chưa? API của bạn chẳng cần PUT, PATCH, DELETE đâu!
Lê Lân
0
Hot Take: API Của Bạn Không Cần PUT, PATCH, DELETE Hay Những Thứ “Học Thuật” Khác
Mở Đầu
REST - một kiến trúc API phổ biến - đang trở nên ngày càng khó áp dụng trong phát triển web hiện đại. Nhiều nhà phát triển từng chán nản với sự phức tạp của PUT, PATCH, DELETE và hàng loạt luân lý HTTP khác.
Trong bối cảnh năm 2025, cách xây dựng API của bạn có thể cần được thay đổi để phù hợp hơn với thực tế phát triển ứng dụng hiện đại. Bài viết này sẽ chỉ ra lý do tại sao những HTTP phương thức như PUT, PATCH, DELETE có thể trở nên dư thừa, đồng thời giới thiệu một giải pháp đơn giản hơn dựa trên POST và định dạng dữ liệu TOML, giúp API vừa dễ hiểu vừa hiệu quả hơn trong thực tế.
Chúng ta sẽ đi qua: cái gọi là “rạp xiếc REST” trong thực tiễn; cách mà frontend hiện đại xử lý việc định tuyến; backend thực sự cần gì; lý do PUT/PATCH/DELETE chỉ là “đoản kịch” của REST; lý do TOML là “kẻ hủy diệt JSON”; và cuối cùng là ví dụ thực tế so sánh với các API truyền thống.
Thực Trạng REST Trong Năm 2025
Các Kiểu API Thường Gặp
Bạn có thể đã quen với các loại API sau:
API REST "thuần túy":
GET /users/123 // Lấy thông tin người dùng
POST /users // Tạo người dùng mới
PUT /users/123 // Thay thế toàn bộ người dùng
PATCH /users/123 // Cập nhật một phần người dùng
DELETE /users/123 // Xóa người dùng
API “Chỉ POST Mọi Thứ”:
POST /api/getUser
POST /api/createUser
POST /api/updateUser
POST /api/deleteUser
API hỗn hợp lộn xộn:
GET /users/123 // Đôi khi dùng được
POST /users/login // Hợp lý
GET /users/delete/123 // Rất khó hiểu
Thực tế: REST không được triển khai thống nhất, gây khó hiểu và phức tạp cho dự án.
Các Ứng Dụng Hiện Đại Xử Lý Định Tuyến Riêng
Ngày nay, với React, Vue, Angular, Flutter, React Native hay Electron,... hầu hết logic định tuyến được xử lý ở phía frontend hoặc app, không còn dựa vào HTTP routes:
React/Vue/Angular: Dùng React Router, Vue Router để điều hướng client-side.
Flutter/React Native: Navigation có sẵn, không cần HTML.
Apps Mobile: API chỉ để lấy dữ liệu, không render trang.
Electron: Chỉ cần endpoints dữ liệu.
Điều này biến backend thành một “data API” đơn thuần, không cần quan tâm đến tài nguyên HTML hay điều hướng server.
Backend Thực Sự Cần Gì?
Bạn chỉ cần một số endpoint POST đơn giản để lấy hoặc thay đổi dữ liệu:
Ứng dụng
Endpoint
Chức năng
React
POST /api/users
Lấy dữ liệu người dùng
Flutter
POST /api/products
Lấy danh sách sản phẩm
Mobile
POST /api/auth
Đăng nhập
Dashboard
POST /api/analytics
Biểu đồ báo cáo
Ngoài ra, GET chỉ cần thiết cho:
Tài nguyên tĩnh như CSS, JS, hình ảnh
Trang SEO (nếu có)
Kiểm tra tình trạng hệ thống
Bạn không cần PUT, PATCH hay DELETE khi backend chỉ giữ vai trò trả dữ liệu theo yêu cầu.
Tại Sao PUT/PATCH/DELETE Chỉ Là Buổi Biểu Diễn?
REST Đưa Câu Hỏi Phức Tạp Không Cần Thiết
Phép toán có idempotent hay không?
Là thay thế toàn bộ (PUT) hay cập nhật từng phần (PATCH)?
DELETE có nên trả lại dữ liệu đã xóa không?
Trong hầu hết trường hợp, code chỉ cần biết rõ hành động và tham số mà API nhận – sự phân biệt HTTP này là phiền toái.
Bạn có thể làm rõ ý định bằng trường dữ liệu “action” thay vì dùng phương thức HTTP: