Hey hey hey hey, cuối năm cũng khá bận bịu công việc này kia nên cũng không có nhiều thời gian viết bài phục vụ anh em được. Nay mình xin chia sẻ một vài những tiêu chí mà mình hay sử dụng khi viết REST API. Mình tin rằng những tiêu chí này sẽ giúp ích khá nhiều khi các endpoint trong dự án của các bạn ngày dần nhiều lên. 1, 2, 3 zô..... 2, 3 zô ... 2, 3 à mà thôi, bắt đầu nào.
Mặc dù đây không phải là một quy định bắt buộc của REST, hầu hết REST APIs sử dụng JSON để gửi nhận dữ liệu. Tuy nhiên, như vậy là chưa đủ để trả về nội dung chưa một chuỗi có định dạng JSON. Bạn cần phải chỉ định rõ Content-Type
trong Header, nó phải có giá trị là application/json
.
Lý do là bởi vì HTTP method đã đủ để nói nên được hành động mà bạn muốn trên tài nguyên đó. Bad Practice:
GET: /restaurants/:id/listFood/
Good Practice:
GET: /restaurants/:id/foods/
Bad Practice:
GET: /restaurant/:id/
Good Practice:
GET: /restaurants/:id/
Khi một API server xử lý một lỗi, bạn sẽ rất dễ dàng sử lý nếu như nhận được mô tả chi tiết của lỗi đó bên trong response body. Bạn có thể sử dụng cấu trúc như ví dụ bên dưới:
{
"error": "Invalid payoad.",
"detail": {
"surname": "This field is required."
}
}
Có 6 status codes thường được sử dụng RESTful API. Sử dụng status code và chỉ sử dụng response body
để cung cấp chi tiết lỗi. Nếu bạn làm được việc này thì quá tuyệt vời. Tuy nhiên, trong một vài trường hợp mình cũng nên để thêm status code
bên trong response body
.
401 - Unauthorized
400 - Bad Request
404 - Page Not Found
403 - Forbidden Error
500 - Internal Error
503 - Service Unavailable
Người dùng có thể muốn nhận được các mục đáp ứng một điều kiện cụ thể hoặc một số lượng nhỏ dữ liệu để cải thiện hiệu suất.
Good Practice:
GET: /restaurants?name=blabla&page=2&page_size=20
Với bộ lọc, người dùng có thể chỉ rõ thuộc tính mà dữ liệu trả về trong response body
nên có. Phân trang cho phép người dùng truy cập một bộ dữ liệu nhỏ hơn. Điều này khá gần gũi với các bạn phải không nào :)
401 - Unauthorized
.403 - Forbidden
.Mình tin chắc ít ai để ý đến status code này. Tuy nhiên, nó rất hữu ích trong 2 trường hợp sau:
PUT
request sẽ thay đổi toàn bộ nội dung của một tài nguyên. Trong khi một PATCH
request được sử dụng trong trường hợp thay đổi một phần nội dung của một tài nguyên.clear
và clean
rất nhiều. Có rất nhiều naming convention trong lập trình (CamelCase, snake_case, and spinal-case
). Ở đây, các bạn nên sử dụng spinal-case
bởi vì nó được sử dụng ở khá nhiều những tổ chức lớn (Google, Paypal ...
).Trên đây mình đã chắt lọc và viết ra những nguyên tắc theo mình nghĩ là quan trọng để có thể tạo ra những APIs xịn xò. Nếu các bạn thấy hay có thể cho mình một like và nếu có bất cứ thắc mắc gì cũng đừng ngại comment các bạn nhé. Mình sẽ cùng các bạn tìm hiểu và giải đáp những thắc mắc đó. Cảm ơn mọi người rất nhiều :D.
Link các bài viết tham khảo: [] (https://dev.to/pragativerma18/restful-api-design-best-practices-4mi8), [] (https://restfulapi.net/resource-naming/)