2012-07-05 38 views
5

Tôi đang cố tạo một API cho hai tài nguyên, một với Người dùng và một với Phim. Cả hai tài nguyên đều có liên kết - Người dùng sẽ có nhiều Phim và Phim sẽ có nhiều Người dùng. Có lẽ, tôi muốn thiết kế API của tôi như sau:Thiết kế API RESTful với các liên kết

/api/users/ 
/api/users/:id 
/api/users/:id/movies 

/api/movies/ 
/api/movies/:id 
/api/movies/:id/users 

Nhưng đây là vấn đề: Tôi cũng đang sử dụng Backbone.js ở phía máy khách để tìm nạp dữ liệu API. Nếu Nếu tôi tạo một Bộ sưu tập tại

/api/users/:id/movies 

thì điều này sẽ làm việc tốt cho các yêu cầu GET, nhưng POST và PUT yêu cầu sẽ dường như sau đó được hướng dẫn tại địa chỉ:

/api/users/:id/movies/:id 

Nhưng, dường như, nó sẽ là tốt hơn nếu nó được đăng lên số

/api/movies/:id 

thay thế. Đúng không? Mọi người thường đối phó với các hiệp hội RestFul như thế nào?

Trả lời

1

Không chắc chắn ý bạn là gì bởi "yêu cầu POST và PUT dường như sẽ được hướng đến ...". Backbone.js có tự động thêm tham số vào URL không? Nếu vậy, bạn nên xem xét cấu hình nó để nó không làm điều đó, bởi vì nó sẽ không thể sử dụng được với một API REST. Các liên kết được cung cấp bởi một API REST phải là các API đầy đủ, không có gì để thêm hoặc xóa chúng khỏi chúng.

Cuối cùng, nếu bạn muốn liên kết phim với người dùng. Bạn sẽ POST phim (hoặc chỉ cần ID của nó) tới:

/api/users/:id/movies 
+0

Cảm ơn Laurent. Backbone gắn một id vào URL để POST hoặc PUT một mô hình mới cho bộ sưu tập mà nó thuộc về. Nói cách khác, bộ sưu tập sẽ có URL/api/users/1/movies và POST sẽ tự động sử dụng URL/api/users/1/movies /: id. Đối với tôi, có vẻ thích hợp hơn khi có url POST là/api/movies /: id thay vì ... nhưng có lẽ tôi đã sai. Về phía máy chủ tôi có thể, có khả năng, xử lý POST đến/api/users/1/movies /: id là tốt. – bento

-2

Như tôi hiểu bạn đang cố gắng tìm ra một cái gì đó có thể đọc được và cách tiêu chuẩn của việc tạo ra url dịch vụ REST của bạn. Câu chuyện thực là url dịch vụ hoàn toàn khác với thiết kế API.

dịch vụ url có thể trông giống như:

/api/getMovies/userId: tham gia với get yêu cầu

/api/updateMovieList/userId: tham gia với bài

này là trực quan và tự hơn biểu cảm.

This site có tài nguyên tốt để trải qua.

+0

dường như, cần cập nhật câu trả lời này, – Forhad

Các vấn đề liên quan