2012-05-29 29 views
7

Tác vụ: Tôi có nhiều tài nguyên cần được cập nhật trong một cuộc gọi HTTP.Tìm cách tiếp cận RESTful để cập nhật nhiều tài nguyên với cùng một trường tập

Loại tài nguyên, trường và giá trị cần cập nhật giống nhau cho tất cả các tài nguyên.

Ví dụ: có bộ xe ô tô theo ID của họ, cần cập nhật "trạng thái" của tất cả các xe thành "đã bán".

cổ điển RESTful phương pháp: sử dụng yêu cầu URL cái gì đó như PUT/xe với JSON cơ thể như [{id: 1, trạng thái: bán}, {id: 2, tình trạng: đã bán}, ... ]

Tuy nhiên điều này có vẻ là một overkill: quá nhiều lần để đưa trạng thái: bán

Tìm kiếm một cách RESTful (ý tôi là cách mà là càng gần với "chuẩn" giao thức phần còn lại càng tốt) để gửi trạng thái : đã bán chỉ một lần cho tất cả các xe cùng với danh sách ID xe hơi cần cập nhật. Đây là những gì tôi sẽ làm:

PUT/xe Với JSON {id = [1,2, ...], tình trạng: đã bán} nhưng tôi không chắc chắn nếu điều này thực sự là cách tiếp cận RESTful .

Bất kỳ ý tưởng nào?

Cũng như một lợi ích bổ sung: Tôi muốn để có thể tránh JSON cho số ít những chiếc xe bằng cách đơn giản thiết lập một URL với các thông số như sau:?

PUT/xe id = 1,2 , 3 & trạng thái = đã bán

Đây có phải là RESTful đủ không?

Trả lời

2

Một cách đơn giản thậm chí sẽ chỉ được:

{sold:[1,2,...]} 

Không cần phải có nhiều phương pháp cho số lớn hơn hoặc nhỏ hơn yêu cầu - nó lãng phí thời gian phát triển và không có tác động noteable khi hiệu suất hoặc băng thông.

Theo như RESTful được gửi, miễn là nó dễ dàng giải mã được bởi người nhận và chứa tất cả thông tin bạn cần, thì không có vấn đề gì với nó.

+0

"miễn là nó có thể dễ dàng giải mã được bởi người nhận" - tốt, tôi có thể có thứ gì đó như ** POST/cars/update? Ids = 1,2,3 & status = sold ** và nó đơn giản nhất mọi người có thể nhận được. Nhưng nó thực sự là RESTful? – Nikolay

+1

Không, khi bạn đang sử dụng các biến GET để thay đổi dữ liệu trên máy chủ, thay vì chỉ để "GET" nó. http://ajaxpatterns.org/RESTful_Service#RESTful_Principles cung cấp thông tin tốt hơn về các tiêu chuẩn được chấp nhận chung. – Death

0

Vì tôi hiểu nó bằng cách đặt không đủ để viết một thuộc tính duy nhất của tài nguyên. Một ý tưởng chỉ đơn giản là hiển thị thuộc tính dưới dạng tài nguyên:

Do đó: PUT/car/carId/status có nội dung 'Đã bán'.

Việc cập nhật nhiều hơn một ô tô sẽ dẫn đến nhiều lần đặt vì yêu cầu chỉ nên nhắm mục tiêu một tài nguyên.

Một ý tưởng khác là hiển thị một giao thức nhất định nơi bạn tạo tài nguyên 'lô'.

nội dung

POST/ngày-giao-báo cáo/body { "bán": [1, 2, 3, 4, 5]}

Sau đó, hệ thống chỉ có thể thừa nhận các giao dịch được thực hiện và cập nhật tình trạng xe chinh no. Bằng cách này, bạn tạo ra một quan điểm hoàn toàn mới và cho phép một REST nhiều hơn như api sau đó bạn thực sự dự định. Ngoài ra, bạn nên suy nghĩ về việc phơi bày một tài nguyên liệt kê tất cả các xe có sẵn và do đó đã sẵn sàng để được bán (do đó không được bán, và không cần sửa chữa hoặc không được cho thuê). Page 5

GET/cars/pricelist? City = * -> Danh sách tất cả các xe đã sẵn sàng để bán bao gồm cả id xe và giá.

Bằng cách này, ô tô không có trạng thái liên quan đến người đang sở hữu chiếc xe. Một nguồn tài nguyên thường độc lập với chủ sở hữu của nó (chủ sở hữu là tổng hợp ô tô không phải là tổng hợp của nó).

Bất cứ khi nào bạn gặp khó khăn trong việc ánh xạ một thao tác với tài nguyên, mô hình của bạn có xu hướng thiếu sót do tư duy hướng đối tượng. Với các nguồn tài nguyên, nhiều mối quan hệ (thuộc tính cha mẹ) và các thuộc tính trạng thái có xu hướng bị thất lạc vì việc thiết kế các tài nguyên thậm chí còn trừu tượng hơn nhiều so với suy nghĩ trong các dịch vụ.

Nếu bạn cần thao tác nhiều đối tượng tương tự, bạn cần xác định quy trình nghiệp vụ kích hoạt những thay đổi đó và phơi bày quá trình này bằng một tài nguyên mô tả đầu vào của nó (giống như báo cáo giao dịch hàng ngày).

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