Для REST API вы должны подумать о том, как вы делаете это с веб-сайтом и HTML формами (в конце концов, всемирная паутина - это эталонное приложение для REST архитектурного стиля ) .
Для примера, такого как нехватка средств, мы отправили бы обратно веб-страницу со словами: «Извините, для этого недостаточно денег». Представление HTML будет находиться в теле сообщения ответа, потому что именно к этому относится заказная информация - это информация, адресованная конечному клиенту, которая должна игнорироваться компонентами общего назначения, участвующими в обмене данными.
Строка состояния и заголовки зарезервированы для информации из домена «передача документов по сети», которая должна быть понятна компонентам общего назначения.
В этом случае сообщение было обработано правильно, но не дало ожидаемого эффекта. Поэтому мы хотим использовать код состояния ошибки клиента 4xx.
Какой? 403 Запрещено - прямой ответ
Код состояния 403 (Запрещено) указывает, что сервер понял запрос, но отказывается его авторизовать. Сервер, который хочет опубликовать c, почему запрос был запрещен, может описать эту причину в полезной нагрузке ответа (если есть).
Другая возможность - 409 Конфликт
Код состояния 409 (Конфликт) указывает, что запрос не может быть выполнен из-за конфликта с текущим состоянием целевого ресурса. Этот код используется в ситуациях, когда пользователь может разрешить конфликт и повторно отправить запрос.
Например, в вашем примере пользователь может разрешить конфликт, изменив количество деньги в запросе.
Марк Ноттингем обращает внимание на спецэффекты кода состояния - что будут делать компоненты общего назначения по-другому? К сожалению, я не смог найти точных определений этих эффектов - в некоторых случаях намеки на них разбросаны по стандарту, но большую часть времени ????