Tôi có nên chỉ định userId trong cấu trúc URL REST không?


9

Về cơ bản, một tính năng của ứng dụng của tôi là truy xuất bạn bè của người dùng đã đăng nhập.

Trên thực tế, tôi do dự giữa cả hai loại điểm cuối:

  1. NHẬN / api / người dùng / bạn bè
  2. NHẬN / api / users /: userId / friends

Sử dụng 1, userIdsẽ có thể truy cập thông qua mã thông báo xác thực.
Sử dụng 2, máy chủ sẽ phải kiểm tra bổ sung sự tương ứng giữa thông qua userIdvà id người dùng đã đăng nhập được chỉ định trong mã xác thực để tránh mọi truy cập độc hại vào dữ liệu người dùng khác, như bạn bè.

Vì vậy, 1 là đủ, nhưng nó không giống như một url nghỉ ngơi tiêu chuẩn.

Một thực hành tốt là gì?

Câu trả lời:


7

Giải pháp đầu tiên có lợi ích là tránh trùng lặp dữ liệu. Yêu cầu rõ ràng có nghĩa là:

Xin chào, tôi là John. Hãy cho tôi danh sách bạn bè của tôi .

Nếu có thể, tôi thậm chí sẽ rút ngắn nó xuống GET /api/friends.

Mặt khác, nếu bạn mong đợi có thể truy cập bạn bè của những người dùng khác, giải pháp thứ hai sẽ xuất hiện một giải pháp tốt. Yêu cầu có nghĩa là:

Xin chào, tôi là John. Cho tôi danh sách bạn bè của John.

nhưng cũng có thể là:

Xin chào, tôi là John. Cho tôi danh sách bạn bè của Mary.

Ví dụ, một tình huống có thể thay đổi như vậy là nơi một người có thể tìm thấy bạn bè của mình, nhưng cũng là bạn của bạn bè của cô ấy.


Trả lời gọn gàng, cảm ơn. Bạn vừa xác nhận những gì tôi nghĩ;)
Mik378

Tôi sẽ đi một bước xa hơn. Với GET /api/friendstôi sẽ đổi tên nó GET /api/myFriends. Từ một quan điểm khám phá của nó xem tài liệu nhiều hơn. Hơn nữa, với REST rất hữu ích để suy nghĩ về cách bộ đệm trình duyệt / proxy sẽ xử lý nó. Với GET /api/myFriendsnó, hoàn toàn có thể có một lỗi mà bạn hiển thị sai bạn bè do bộ nhớ đệm.
ArTs 16/2/2015

Có một nhược điểm khi bạn sử dụng các URI tương đối (liên quan đến người dùng đã đăng nhập) một số tình huống nhất định trở nên khó thực hiện. Đặc biệt khi bạn muốn cho phép người dùng mạo danh người khác, chẳng hạn như người dùng hỗ trợ cần đăng nhập và xem mọi thứ là người dùng khác. Nếu anh ta đăng nhập với tư cách là người dùng hỗ trợ, nhưng cố gắng mạo danh người dùng mà anh ta muốn giúp đỡ, anh ta cuối cùng sẽ nhìn vào bạn bè của mình chứ không phải người dùng mà anh ta đang cố gắng giúp đỡ.
Jbm

3

Phần còn lại của Api phải được điều khiển siêu văn bản! Như bạn sẽ nhấp từ liên kết này đến liên kết khác trong trang html tiêu chuẩn.

Một URL là một định danh duy nhất cho một tài nguyên. Có một url đại diện cho nhiều tài nguyên là hoàn toàn không phù hợp với ReST.

Với ví dụ của bạn, url sau:

/api/users/:userId

nên có một liên kết trong phản hồi của nó với url: userId friends

Luận án của Roy Fielding chứa một tập các ràng buộc cần thiết để tuân thủ ReST.

http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven http://fr.sl slideshoware.net/rnewton/2013-06q-connycrestfulwebapis http: //www.ics. uci.edu/~fielding/pub/dissertation/rest_arch_style.htmlm

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.