(przepraszam, mój pierwszy raz przegapiłem / edit / i / delete / in (2) ...)
Idea URI polega na tym, że jest to identyfikator zasobu adresowalnego , a nie wywołanie metody . Dlatego identyfikator URI powinien wskazywać określony zasób. A jeśli uszanujesz identyfikator URI, zawsze powinieneś uzyskać ten sam zasób.
Oznacza to, że powinieneś myśleć o identyfikatorach URI w taki sam sposób, jak myślisz o kluczu podstawowym wiersza w bazie danych. To jednoznacznie identyfikuje coś: Universal Resource Identifier.
Niezależnie od tego, czy używasz liczby mnogiej czy pojedynczej, identyfikator URI powinien być identyfikatorem, a nie wywołaniem . To, co próbujesz zrobić, odbywa się w metodzie, a mianowicie: GET (pobierz), PUT (utwórz / zaktualizuj), DELETE (usuń) lub POST (wszystko inne).
Zatem „/ item / delete / 123” przerywa REST, ponieważ nie wskazuje zasobu, jest raczej wywołaniem metody.
(Również semantycznie powinieneś być w stanie UZYSKAĆ URI, zdecydować, że jest nieaktualny, a następnie USUNĄĆ ten sam URI - ponieważ jest to identyfikator. Jeśli GET URI nie ma „/ delete /”, a DELETE ma, to jest sprzeczne z semantyką HTTP. Nadajesz 2 lub więcej identyfikatorów URI na zasób, gdzie 1 to zrobi.)
Teraz oszustwo jest takie: nie ma naprawdę jasnej definicji tego, co jest zasobem, a nie zasobem, więc powszechnym unikaniem w REST jest zdefiniowanie „rzeczownika przetwarzającego” i wskazanie na to URI. To właściwie gra słowna, ale spełnia semantykę.
Jeśli na przykład z jakiegoś powodu naprawdę nie można tego użyć:
DELETE /items/123
możesz zadeklarować światu, że masz zasób przetwarzający „deletor” i jego użycie
POST /items/deletor { id: 123 }
Teraz wygląda to bardzo podobnie do RPC (Remote Procedura Call), ale przechodzi przez rozległą lukę w klauzuli „przetwarzania danych” specyfikacji POST nazwanej w specyfikacji HTTP.
Jednak robi to rodzaj wyjątkowe, a jeśli mogą korzystać ze wspólnej PUT dla tworzenia / UPDATE, DELETE do usunięcia, a POST dla append, tworzyć i wszystko inne, to powinien , bo to bardziej standardowe użycie protokołu HTTP. Ale jeśli masz trudny przypadek, taki jak „zatwierdzenie” lub „opublikuj” lub „zredaguj”, to przypadek użycia rzeczownika procesora spełnia wymagania purystów REST i nadal zapewnia semantykę, której potrzebujesz.
PUT
iDELETE
wolałbym dodać go do ścieżki, nie różnicując go ciągiem zapytania. To nie jest modyfikacja ciągu zapytania do istniejącej operacji; to osobna operacja.