2011-02-10 32 views
6

Có phải một điều như vậy có thể không? Những người thiết kế REST chỉ nghĩ rằng họ sẽ xóa mọi thứ một lúc mãi mãi?REST - Xóa bộ sưu tập đối tượng

Vì vậy, chúng ta hãy nói rằng tôi có ID 10 Foo của 1-10

Tôi muốn xóa ID của 3, 6, và 9 với một HTTP đơn DELETE cuộc gọi.

Tôi có thể làm điều này mà không vi phạm Giáo hoàng không?

Trả lời

-1

Nếu bạn lo lắng về xúc phạm Đức Giáo Hoàng, có lẽ bạn nên dành chút thời gian đọc kinh :-) http://tools.ietf.org/html/draft-gregorio-uritemplate-04

Tôi nghĩ rằng tất cả những câu hỏi của bạn sẽ được giải đáp trong đó.

+3

Bạn có thể cho biết địa điểm chính xác trong tài liệu nói trên trả lời câu hỏi của OP không? – mark

+0

@mark Tìm tất cả các mẫu mở rộng sử dụng biến mẫu 'danh sách'. Có nhiều cách để mở rộng nhiều giá trị trong một mẫu URI. http://tools.ietf.org/html/rfc6570 –

+0

@DarrelMiller để các cặp khóa phân tách bằng dấu phẩy trong kiểu trường biểu mẫu? nên xóa bỏ trong các giao dịch với hai loại trạng thái: thành công, thất bại? (nghĩa là không thành công một phần) –

0

Tôi không nghĩ đó là vấn đề.

DELETE http://www.example.com/foos có nghĩa là xóa tất cả.

DELETE http://www.example.com/foos {3,6,9} có nghĩa là xóa foo 3, 6, 9.

+1

Các dấu ngoặc đó có phải là {#, #, #} một phần của tiêu chuẩn không? Tôi chưa bao giờ thấy điều đó trước đây. –

+0

Đó chỉ là một phần URI bình thường. Bất kỳ bộ sưu tập tài nguyên và tài nguyên nào cũng có thể được biểu diễn bằng URI, bạn có thể cung cấp ngữ nghĩa cho URI. – Dagang

+2

@Todd dữ liệu bổ sung trong URI như thế có vẻ lộn xộn, bạn có muốn gửi dữ liệu cho những gì thực sự xóa trong phần nội dung của yêu cầu không? Đây là những gì tôi đang xem xét mạnh mẽ cho một hệ thống mà trường hợp sử dụng mặc định sẽ là nhiều lần xóa. Tôi cũng có ý định chỉ gọi 'DELETE/foos' mà không có một hành động' không hợp lệ '. – thecoshman

5

Hầu hết các API Tôi quen thuộc với tôi không cho phép xóa nhiều thực thể tại một thời điểm nhưng để thực hiện các hoạt động khác trên nhiều thực thể có tham số URL như ?id=3,6,9 hoặc ? id=3&id=6&id=9. Vì vậy, nó sẽ là khá phổ biến để làm một trong hai điều sau đây:

DELETE /foos?id=3,6,9 

hoặc

DELETE /foos?id=3&id=6&id=9 
+1

Chỉ cần nhớ rằng cuộc gọi như vậy sẽ không làm mất hiệu lực các bản sao được lưu trong bộ nhớ cache của '/ foo/3','/foo/6' và '/ foo/9'. – fumanchu

+1

@fumanchu Nhưng sẽ tùy thuộc vào khách hàng để biết điều đó. Bên cạnh đó, trừ khi khách hàng xóa các mục đơn lẻ, tức là nếu họ sử dụng một số tài nguyên cho bộ sưu tập, tài nguyên cá nhân sẽ có bộ nhớ cache cũ. Nhưng, cache cũ chỉ là một phần của web. – thecoshman

+0

Tôi cũng chỉ ra, bạn chỉ có thể gửi một tải trọng trong phần nội dung của yêu cầu xóa có thể được sử dụng để nêu chi tiết chính xác những gì cần xóa. – thecoshman

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