ОК, значит, дело не в идемпотентности. Но тогда может возникнуть следующий вопрос: что, если мы все же решим использовать 204 в последующем DELETE? Это нормально?
Хороший вопрос. Мотивация понятна: позволить клиенту по-прежнему достичь желаемого результата, не беспокоясь об обработке ошибок. Я бы сказал, что возвращение 204 при последующем DELETE - это в значительной степени безобидная "белая ложь" на стороне сервера, в которой клиентская сторона не сразу заметит разницу. Вот почему около 25% людей делают это в дикой природе, и, похоже, это все еще работает. Просто имейте в виду, что такая ложь может считаться семантически странной, потому что GET /non-exist
возвращает 404, но DELETE /non-exist
дает 204, в этот момент клиент поймет, что ваш сервис не полностью соответствует разделу 6.5.4 404 Not Found .
Но я хочу отметить, что предполагаемый способ, на который намекает RFC 7231, то есть возврат 404 при последующем DELETE, в первую очередь не должен быть проблемой. Это сделали в 3 раза больше разработчиков, и слышали ли вы когда-нибудь о серьезных инцидентах или жалобах, вызванных тем, что клиент не может обработать ошибку 404? По-видимому, нет, и это потому, что любой достойный клиент, который реализует HTTP DELETE (или любой HTTP-метод, если на то пошло), не будет слепо предполагать, что результат всегда будет успешным 2xx. И затем, когда разработчик начнет рассматривать обработку ошибок, ошибка 404 Not Found будет одной из первых ошибок, которые приходят в голову. В этот момент он, вероятно, сделает вывод, что для операции HTTP DELETE семантически безопасно игнорировать ошибку 404. Так и сделали.