1. 21:49 05/08/2026
Khi bắt đầu một dự án web hoặc ứng dụng, nhiều nhóm thường tập trung vào giao diện, tốc độ ra mắt tính năng và xử lý nghiệp vụ trước mắt. Tuy nhiên, API mới là phần “xương sống” kết nối frontend, mobile app, hệ thống nội bộ và dịch vụ bên thứ ba. Một API được thiết kế vội có thể chạy được trong giai đoạn đầu, nhưng càng về sau càng khó mở rộng, khó debug và dễ gây lỗi dây chuyền.
Dưới đây là một số kinh nghiệm thực tế giúp thiết kế API dễ bảo trì hơn, đặc biệt phù hợp với các dự án vừa và nhỏ đang phát triển nhanh.
1. Đặt tên endpoint theo tài nguyên, không theo hành động
Thay vì thiết kế endpoint kiểu:
- /getUser
- /createOrder
- /deleteProduct
Hãy ưu tiên cách đặt theo tài nguyên:
- GET /users/123
- POST /orders
- DELETE /products/456
Cách này giúp API dễ đoán hơn. Lập trình viên frontend hoặc mobile chỉ cần nhìn vào method HTTP là hiểu hành động chính. Khi dự án có thêm nhiều module, quy ước này giúp giảm tranh luận và giảm số lượng endpoint đặt tên tùy hứng.
2. Trả response nhất quán
Một lỗi phổ biến là mỗi API trả dữ liệu theo một kiểu khác nhau. Ví dụ API đăng nhập trả { user, token }, API danh sách sản phẩm trả thẳng một mảng, API chi tiết đơn hàng lại bọc trong data. Điều này làm phía client phải xử lý nhiều ngoại lệ không cần thiết.
Nên thống nhất một cấu trúc cơ bản, chẳng hạn:
- Thành công: { "data": ..., "message": null }
- Thất bại: { "data": null, "message": "Email không hợp lệ", "errors": {...} }
Không nhất thiết dự án nào cũng phải dùng đúng mẫu này, nhưng nên có một chuẩn chung và ghi lại trong tài liệu nội bộ.
3. Dùng mã lỗi HTTP đúng ngữ cảnh
Đừng trả 200 OK cho mọi trường hợp rồi nhét lỗi vào body. Việc này khiến logging, monitoring và xử lý lỗi phía client trở nên rối hơn.
Một số mã thường dùng:
- 200: Lấy hoặc cập nhật dữ liệu thành công
- 201: Tạo mới thành công
- 400: Dữ liệu gửi lên không hợp lệ
- 401: Chưa đăng nhập hoặc token không hợp lệ
- 403: Đã đăng nhập nhưng không có quyền
- 404: Không tìm thấy tài nguyên
- 500: Lỗi phía server chưa xử lý được
Dùng đúng mã lỗi không chỉ giúp code rõ ràng hơn mà còn hỗ trợ tốt khi tích hợp với công cụ theo dõi hệ thống.
4. Nghĩ sớm về phân trang, lọc và sắp xếp
Ngay cả khi dữ liệu ban đầu ít, danh sách người dùng, đơn hàng hoặc bài viết thường sẽ tăng theo thời gian. Nếu API danh sách không có phân trang, một ngày nào đó nó có thể trở thành điểm nghẽn.
Một mẫu đơn giản có thể là:
- GET /orders?page=1&limit=20
- GET /orders?status=paid&sort=created_at_desc
Response cũng nên trả thêm thông tin phân trang như tổng số bản ghi, trang hiện tại, số bản ghi mỗi trang. Điều này giúp frontend làm giao diện phân trang hoặc tải thêm dữ liệu dễ dàng hơn.
5. Đừng để dữ liệu nhạy cảm “lọt” ra ngoài
Một lỗi rất thực tế là trả nguyên object từ database ra API. Ví dụ bảng users có password_hash, reset_token, internal_note; nếu không lọc cẩn thận, các trường này có thể xuất hiện trong response.
Nên có lớp chuyển đổi dữ liệu trả ra, thường gọi là serializer, resource, transformer hoặc DTO tùy framework. Mục tiêu là API chỉ trả đúng những gì client cần, không phụ thuộc hoàn toàn vào cấu trúc bảng trong database.
6. Ghi tài liệu ngay từ những endpoint đầu tiên
Tài liệu API không cần quá cầu kỳ lúc ban đầu. Một file nội bộ ghi rõ endpoint, method, request mẫu, response mẫu và các mã lỗi thường gặp đã rất hữu ích. Khi nhóm lớn hơn hoặc có nhiều client cùng dùng API, có thể chuyển sang công cụ chuyên dụng hơn.
Điều quan trọng là tài liệu phải được cập nhật cùng code. Tài liệu cũ sai còn nguy hiểm hơn là không có tài liệu, vì nó khiến người khác tin vào thông tin không còn đúng.
Kết luận
Thiết kế API tốt không nhất thiết phải phức tạp. Bắt đầu từ những việc nhỏ như đặt tên rõ ràng, response nhất quán, dùng đúng HTTP status, hỗ trợ phân trang và kiểm soát dữ liệu trả ra đã đủ giúp dự án dễ bảo trì hơn rất nhiều. Nếu nhóm thống nhất các quy ước này từ sớm, việc thêm tính năng, tích hợp app mobile hoặc mở API cho hệ thống khác sau này sẽ nhẹ nhàng hơn đáng kể.
0