Może późno do gry, ale natknąłem się na ten problem semantyki, próbując stworzyć interfejs API REST.
Aby nieco rozwinąć odpowiedź Wrikkena, myślę, że możesz użyć jednego 409 Conflict
lub 403 Forbidden
zależnie od sytuacji - w skrócie, użyj błędu 403, gdy użytkownik nie może zrobić absolutnie nic, aby rozwiązać konflikt i zrealizować żądanie (np. Nie może wysłać DELETE
żądanie jawnego usunięcia zasobu) lub użyj 409, jeśli można coś zrobić.
Serwer zrozumiał żądanie, ale odmawia jego spełnienia. Autoryzacja nie pomoże, a prośba NIE POWINNA zostać powtórzona. Jeśli metoda żądania nie była HEAD, a serwer chce podać do publicznej wiadomości, dlaczego żądanie nie zostało spełnione, POWINIEN opisać przyczynę odmowy w jednostce. Jeśli serwer nie chce udostępnić tych informacji klientowi, zamiast tego można użyć kodu stanu 404 (Nie znaleziono).
W dzisiejszych czasach ktoś mówi „403” i przychodzi na myśl problem z uprawnieniami lub uwierzytelnianiem, ale specyfikacja mówi, że to w zasadzie serwer mówi klientowi, że nie zamierza tego zrobić, nie pytaj go ponownie, a oto dlaczego klient nie powinien „t.
Jeśli chodzi o PUT
vs. POST
... POST
należy użyć do utworzenia nowej instancji zasobu, gdy użytkownik nie ma środków lub nie powinien utworzyć identyfikatora zasobu. PUT
jest używany, gdy znana jest tożsamość zasobu.
...
Podstawowa różnica między żądaniami POST i PUT znajduje odzwierciedlenie w innym znaczeniu URI żądania. Identyfikator URI w żądaniu POST identyfikuje zasób, który będzie obsługiwał zamknięty obiekt. Ten zasób może być procesem akceptującym dane, bramą do innego protokołu lub osobnym podmiotem, który przyjmuje adnotacje. W przeciwieństwie do tego, URI w żądaniu PUT identyfikuje encję zawartą w żądaniu - agent użytkownika wie, jaki jest URI, a serwer NIE MOŻE próbować zastosować żądania do jakiegoś innego zasobu. Jeśli serwer chce zastosować żądanie do innego identyfikatora URI,
MUSI wysłać odpowiedź 301 (Moved Permanently); klient użytkownika MOŻE następnie podjąć własną decyzję dotyczącą tego, czy przekierować żądanie.