Pozwoliłem na hurtową wymianę kolekcji, np. Gdy PUT ~/people/123/shoes
ciało jest reprezentacją całej kolekcji.
Działa to w przypadku małych podrzędnych kolekcji elementów, w przypadku których klient chce przejrzeć elementy, a niektóre usunąć i dodać inne, a następnie zaktualizować serwer. Mogliby umieścić pustą kolekcję, aby usunąć wszystkie.
Oznaczałoby to, GET ~/people/123/shoes/9
że nadal pozostawałby w pamięci podręcznej, mimo że PUT usunął go, ale jest to tylko problem z pamięcią podręczną i byłby problemem, gdyby inna osoba usunęła but.
Moje interfejsy API danych / systemów zawsze używają znaczników ETag, a nie czasów wygaśnięcia, więc serwer jest trafiany przy każdym żądaniu i wymagam poprawnych nagłówków wersji / współbieżności, aby zmutować dane. W przypadku interfejsów API, które są tylko do odczytu i dostosowane do wyświetlania / raportowania, używam czasów wygaśnięcia, aby zmniejszyć trafienia w źródle, np. Tabela wyników może być dobra przez 10 minut.
W przypadku znacznie większych kolekcji, takich jak ~/people
, zwykle nie potrzebuję wielokrotnego usuwania, przypadek użycia nie pojawia się naturalnie, więc pojedyncze DELETE działa dobrze.
W przyszłości, z doświadczenia w budowaniu REST API i trafianiu na te same problemy i wymagania, takie jak audyt, byłbym skłonny używać tylko czasowników GET i POST oraz projektować wokół zdarzeń, np. POST zmiana adresu zdarzenia, chociaż podejrzewam, że Pojawi się z własnym zestawem problemów :)
Pozwoliłbym również programistom front-end na tworzenie własnych interfejsów API, które używają bardziej rygorystycznych interfejsów API zaplecza, ponieważ często istnieją praktyczne, ważne powody po stronie klienta, dla których nie lubią surowych projektów interfejsu API REST „zelotów Fielding”, a także ze względu na produktywność i przyczyny warstw pamięci podręcznej.