2011-07-16 19 views
5

Trong dự án của chúng tôi, một danh sách của tất cả các cuốn sách có thể được lấy thông qua REST:REST - HTTP DELETE - ngữ nghĩa - chỉ xóa hậu duệ

GET http://server/api/books/ 

Một cuốn sách cụ thể có thể được lấy như sau:

GET http://server/api/books/:id/ 

Xóa một cuốn sách cụ thể rất dễ dàng:

DELETE http://server/api/books/:id/ 

Bây giờ, câu hỏi của tôi: những gì nên là kết quả của sự foll owing gọi:

DELETE http://server/api/books/ 

Rõ ràng là tất cả các sách đều bị xóa. Nhưng tài nguyên sách/ cũng có bị xóa không? Tức là, sau khi yêu cầu:

  1. nên GET/books/return 200 OK với danh sách trống? hoặc
  2. nên GET/books/return 404 không tìm thấy?

Theo thông số kỹ thuật, thông báo rằng URI cụ thể sẽ biến mất sau đó, tôi sẽ chọn tùy chọn thứ hai. Tuy nhiên, điều này làm cho mọi thứ phức tạp và không rõ ràng, theo ý kiến ​​của tôi. Có ý nghĩa hơn khi có danh sách trống sách, thay vì không có sách.

Bạn nghĩ sao?

Trả lời

0

Tuy nhiên, điều này làm cho những điều phức tạp và unlogic

như thế nào? Bạn đang yêu cầu xóa tài nguyên. Tài nguyên đó bị xóa. Kết quả là nó không còn nữa.

Nếu có bất kỳ điều gì, bạn sẽ thấy khó hiểu khi có nó sau khi bạn xóa nó.

+0

Theo logic của bạn, một câu hỏi: hãy tưởng tượng chỉ có một cuốn sách còn lại, với id 50. Bây giờ, DELETE/books/50/được gọi. GET/books/return nên làm gì? 200 OK hoặc 404? –

+1

200 OK với danh sách trống – fumanchu

+0

Tôi đồng ý. Tuy nhiên, và đây là điểm của tôi, điều này có nghĩa là/books/có thể trả về 404 (nếu DELETE/books/được gọi) hoặc 200 (nếu DELETE/books/id-of-last-book/được gọi). Điều này có nghĩa là trong backend của chúng ta, chúng ta phải nhớ điều này. Điều này làm cho nó phức tạp không cần thiết. Bạn không đồng ý –

2

Nếu nó làm cho bạn cảm thấy tốt hơn, giả sử rằng máy chủ có logic tự động tạo lại tài nguyên sách sau khi nó đã bị xóa. :-)

Tôi muốn tìm 200 OK và danh sách trống. Nếu bạn thực sự không thích điều đó sau đó tạo ra một nguồn lực mới gọi là /books/all

và làm

DELETE /Books/all 
+0

Giới thiệu/sách/tất cả đều có ý nghĩa. Tôi sẽ gọi nó/sách/@ tất cả mặc dù (nếu đây là một URI hợp lệ, tôi không biết bằng đầu), để làm cho nó rõ ràng rằng đây không phải là một cuốn sách thực sự. –

+0

Trong giải pháp này, điều gì sẽ trả về GET/books/all? 204 không có nội dung? Thứ gì khác? –

+0

@Appelsein Bạn không thể trả lại nội dung, bạn có thể trả lại 405 - phương pháp không được phép hoặc bạn có thể chuyển hướng đến '/ books' –

0

Tôi nghĩ rằng cho phép DELETE /books là quá mạo hiểm. Một phần của api được thiết kế tốt là tránh những lỗi "dễ dàng" từ phía api-client. Nó có thể dễ dàng xảy ra rằng trong mã khách hàng một cái gì đó là sai, vô tình id (ví dụ như biến chuỗi rỗng) là mất tích và không mong muốn DELETE /books được gửi đi.

Điều tôi sẽ làm là buộc khách hàng lặp lại thông qua DELETE /books/{id} trong trường hợp anh ấy muốn xóa tất cả sách.

Có lẽ bạn có thể cung cấp thêm dữ liệu đầu vào cho trường hợp sử dụng của mình: Tôi tự hỏi khả năng trường hợp sử dụng là DELETE /books là nguồn gốc được gọi là (nó khá triệt để để xóa tài nguyên gốc). Có thể bạn đang cung cấp xóa tài nguyên phụ, ví dụ: /user/{id}/shopping-cart/{id}/books.Nếu đó là một tài nguyên "thoáng qua" (như giỏ mua hàng) thì việc xóa api cho tất cả các sách sẽ có ý nghĩa hơn.

Về câu hỏi khác của bạn: Đối với /books Tôi sẽ trả lại 200 và danh sách trống. Trong các trường hợp sưu tập, tôi thích các danh sách trống hơn các giá trị 'null'.

+0

Xin lỗi, tôi không mô tả chính xác về mô tả/sách của tôi. Trong dự án của chúng tôi, đó thực sự là một tài nguyên thu thập tạm thời, như ví dụ về giỏ hàng mà bạn đã cung cấp. Theo nghĩa đó, có nghĩa là xóa toàn bộ bộ sưu tập. Điều đó nói rằng, trả lại 200 OK và trả lời bằng một bộ sưu tập trống (thay vì 404) có vẻ là sự đồng thuận, mặc dù nó hơi không rõ ràng đối với ngữ nghĩa HTTP DELETE. –

+0

Vâng, tôi cũng nghĩ rằng nếu nó là một + thoáng qua thông thường sau đó DELETE ..../sách là hoàn toàn tốt đẹp. Khi nghĩ đến một tài nguyên sưu tập DELETE + 200 Tôi nghĩ nó có thể hợp lý khi dùng cụm từ sau: "Bạn đang xóa tất cả sách khỏi giá sách, nhưng giá sách vẫn ở đó" –

+0

Tôi đồng ý với quan điểm ngữ nghĩa. Tuy nhiên, các chi tiết cụ thể của HTTP DELETE nói rằng tài nguyên đằng sau URI sẽ biến mất. Đây không phải là trường hợp nếu bạn nhận giả định (rất hợp lý) của bạn. Do đó câu hỏi của tôi. Điều đó nói rằng, cách tiếp cận thực dụng có lẽ là tốt nhất ở đây. –

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