Chociaż ryzykuję, że nie będę popularny, mówię, że obecnie nie są one przydatne .
Myślę, że były dobrze zaplanowane i przydatne w przeszłości, kiedy na przykład DELETE powiedział serwerowi, aby usunął zasób znaleziony pod podanym adresem URL, a PUT (z jego siostrzaną PATCH) powiedział serwerowi, aby dokonał aktualizacji w idempotentny sposób.
Rzeczy ewoluowały, a adresy URL stały się wirtualne (patrz na przykład przepisywanie adresu URL ), co powoduje, że zasoby tracą swoje pierwotne znaczenie prawdziwego folderu / podfordera / pliku, a zatem czasowniki akcji CRUD objęte metodami protokołu HTTP (GET, POST, PUT / PATCH, DELETE) utracone ścieżki .
Weźmy przykład:
- / api / entity / list / {id} a GET / api / entity / {id}
- / api / entity / add / {id} vs POST / api / entity
- / api / entity / edit / {id} a PUT / api / entity / {id}
- / api / entity / delete / {id} vs DELETE / api / entity / {id}
Po lewej stronie nie jest zapisana metoda HTTP, w zasadzie nie ma to znaczenia (wystarczą POST i GET), a po prawej stosowane są odpowiednie metody HTTP.
Prawa strona wygląda elegancko, czysto i profesjonalnie. Wyobraź sobie, że teraz musisz utrzymywać kod, który korzystał z eleganckiego interfejsu API i musisz szukać, gdzie jest wykonywane wywołanie usunięcia. Będziesz szukać „api / entity”, a wśród wyników będziesz musiał zobaczyć, który z nich wykonuje DELETE. Albo co gorsza, masz młodszego programistę, który przez pomyłkę przełączył PUT na DELETE i jak URL to to samo się stało.
Moim zdaniem umieszczenie czasownika akcji w adresie URL ma zalety w porównaniu z użyciem odpowiedniej metody HTTP dla tej akcji, nawet jeśli nie jest tak elegancka. Jeśli chcesz zobaczyć, gdzie jest wykonywane wywołanie delete, po prostu wyszukaj „api / entity / delete”, a znajdziesz je od razu.
Budowanie interfejsu API bez całej tablicy metod HTTP ułatwia późniejsze wykorzystanie i konserwację