Điều cần chú ý để xây dựng RESTful API
Chả xa lạ gì ghi nói đến RESTful API nữa nhưng với newbie khi tiếp cận thì học cũng không biết cách viết API như thế nào để thuận tiện cho việc xử lý, đó chính là câu hỏi mà mình tự đặt ra cho mình trong quá trình xây dựng API cho mini app của mình. Giai đoạn đầu mình chưa biết cách viết thế nào ...
Chả xa lạ gì ghi nói đến RESTful API nữa nhưng với newbie khi tiếp cận thì học cũng không biết cách viết API như thế nào để thuận tiện cho việc xử lý, đó chính là câu hỏi mà mình tự đặt ra cho mình trong quá trình xây dựng API cho mini app của mình. Giai đoạn đầu mình chưa biết cách viết thế nào cho chuẩn với tiện nên cách đơn giản nhất là mình load tất nhưng gì của record ra và đặt những method riêng ra sau khi code xong nhìn lại! wtf? những cái kia để làm gì! và mình bắt đầu thấy việc trả về toàn bộ các thuộc tính của record là một điều ngớ ngẩn! nó quá thừa dữ liệu và gây nặng nề cho quá trình server phải gửi data về. Bài viết này mình muốn đề cập tới những chú ý trong quá trình tìm hiểu về cách thiết kế RESTful API.
1.Sử dụng danh từ, tránh sử dụng động từ
cái này thì đơn giản vì nếu vạn dùng route cho request đúng với route chuẩn RESTful rồi thì không phải nghĩ tới nó nữa! cần tránh là khi bạn xây dựng những route riêng thì cần tránh việc đặt những động từ vào trong nó như thế này nè:
/getAllUsers /removeUser /updateUser
hãy sử dụng đúng chuẩn là có thế thiết kế 1 api ngon rồi bạn nhé! đơn giản như này là đủ:
GET | POST | PUT | DELETE | |
---|---|---|---|---|
/users | trả về tất cả người dùng | tạo mới người dùng | Cập nhật người dùng hàng loạt | Xóa tất cả người dùng |
/users/1 | trả về 1 người dùng cụ thể | (phương thức này không được phép -> 405) | Cập nhật thông tinngười dùng cụ thể | Xóa 1 người dùng cụ thể |
2.Sử dụng danh từ số nhiều
tương tự như trên, nếu dùng route chuẩn RESTful rồi thì ngon, còn nếu muốn custom lại thì dùng danh từ số nhiều theo chuẩn. ví dụ:
/user -> /users /order -> /orders
3.Nếu có các quan hệ giữa các resource thì nên gọi resource đó theo parent resource
các này sẽ có route như sau:
GET /orders/1/products
một đơn hàng thì có nhiều sản phẩm, muốn lấy tất cả các sản phẩm thuộc đơn hàng đó thì dùng như trên, đơn giản là bạn sẽ không cần thêm 1 params[:order_id] bên trong danh sách params nữa