2011-02-10 10 views
6

Czy coś takiego jest możliwe? Czy ludzie, którzy zaprojektowali REST, myślą, że usuwają rzeczy po jednej na raz?REST - Usuwanie kolekcji obiektów

Więc powiedzmy, że mam 10 ID Foo 1-10

Chcę usunąć identyfikatora 3, 6 i 9 za pomocą jednego połączenia HTTP DELETE.

Czy mogę zrobić to bez obrażania papieża?

Odpowiedz

-1

Jeśli chodzi o obrażanie papieża, może warto poświęcić trochę czasu na czytanie Pisma :-) http://tools.ietf.org/html/draft-gregorio-uritemplate-04

myślę wszystkie pytania odpowiedź będzie udzielona tam.

+3

Czy możesz wskazać dokładne miejsce we wspomnianym dokumencie odpowiadającym na pytanie OP? – mark

+0

@mark Wyszukaj wszystkie próbki rozszerzeń, które używają przykładowej zmiennej 'list'. Istnieje wiele sposobów rozszerzania wielu wartości w szablonie URI. http://tools.ietf.org/html/rfc6570 –

+0

@DarrelMiller tak rozdzielane przecinkami pary kluczy w stylu pola formularza? czy usuwanie powinno być zawijane w transakcje z dwoma typami statusu: sukces, porażka? (tzn. brak częściowego sukcesu) –

0

Nie sądzę, że to problem.

DELETE http://www.example.com/foos oznacza usunąć wszystko.

DELETE http://www.example.com/foos {3,6,9} oznacza usunięcie foo 3, 6, 9.

+1

Czy są to nawiasy {#, #, #} normy? Nigdy wcześniej tego nie widziałem. –

+0

To tylko normalna część URI. Każdy zbiór zasobów i zasobów może być reprezentowany za pomocą identyfikatora URI, możesz nadać semantykę URI. – Dagang

+2

@Dodaj dodatkowe dane w URI, które wyglądają niechlujnie, czy nie wolisz wysyłać danych o tym, co faktycznie usunąć w treści żądania? Właśnie to bardzo uważam za system, w którym domyślnym przypadkiem użycia będzie wielokrotne usuwanie. Zamierzam również zrobić po prostu "DELETE/foos" bez ciała i "nieważne" działanie. – thecoshman

5

Większość API Znam nie pozwalają na usuwanie wielu jednostek na raz, ale do wykonywania innych operacji na wiele elementów o parametrach adresu URL, takich jak ?id=3,6,9 lub ? id=3&id=6&id=9. Więc byłoby to dość powszechne, aby wykonać jedną z następujących czynności:

DELETE /foos?id=3,6,9 

lub

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

Pamiętaj tylko, że takie połączenie nie zostanie unieważnione buforowane kopie '/ foo/3','/foo/6' i '/ foo/9'. – fumanchu

+1

@fumanchu Ale to zależy od klienta, aby to wiedzieć. Poza tym, o ile klient nie usunie pojedynczych elementów, tj. Jeśli użyje jakiegoś elementu do gromadzenia, indywidualne zasoby będą miały nieaktualne pamięci podręczne. Ale nieaktualne pamięci podręczne są po prostu częścią sieci. – thecoshman

+0

Chciałbym również zwrócić uwagę, że można po prostu wysłać ładunek w treści żądania usunięcia, które może być użyte do sprecyzowania, co dokładnie usunąć. – thecoshman

Powiązane problemy