Можливо, пізно до гри, але я натрапив на це питання семантики, намагаючись зробити API REST.
Щоб трохи розширити відповідь Вріккена, я думаю, ви могли б використовувати 409 Conflict
або 403 Forbidden
залежно від ситуації - коротше кажучи, використовувати помилку 403, коли користувач не може зробити абсолютно нічого для вирішення конфлікту та завершення запиту (наприклад, він не може надіслати DELETE
запит явно видалити ресурс) або використовувати 409, якщо щось можливо зробити.
Сервер зрозумів запит, але відмовляється його виконувати. Авторизація не допоможе, і запит НЕ повинен повторюватися. Якщо метод запиту не був HEAD і сервер бажає оприлюднити, чому запит не був виконаний, він ДОЛЖЕН описувати причину відмови в організації. Якщо сервер не бажає надавати цю інформацію клієнту, замість цього може використовуватися код статусу 404 (Не знайдено).
Сьогодні хтось каже "403", і дозволу або проблеми автентифікації приходить на думку, але специфікація каже, що це в основному сервер, який каже клієнту, що він не збирається цього робити, не запитувати його знову, і ось чому клієнт не повинен 'т.
Що стосується PUT
vs. POST
... POST
слід використовувати для створення нового примірника ресурсу, коли користувач не має можливості або не повинен створити його ідентифікатор. PUT
використовується, коли особа ресурсу відома.
...
Принципова відмінність запитів POST від PUT відображається в різному значенні Request-URI. URI у запиті POST ідентифікує ресурс, який буде обробляти додану сутність. Цей ресурс може бути процесом прийняття даних, шлюзом до якогось іншого протоколу або окремим об'єктом, який приймає примітки. На відміну від цього, URI у запиті PUT ідентифікує об'єкт, укладений із запитом - агент користувача знає, для чого призначений URI, і сервер НЕ МОЖЕ намагатися застосувати запит до якогось іншого ресурсу. Якщо сервер бажає, щоб запит було застосовано до іншого URI,
ОБОВ'ЯЗКОВО надіслати відповідь 301 (постійно переміщена); користувальницький агент МОЖЕ приймати власне рішення щодо перенаправлення запиту чи ні.