Подход [REST] [1] использует POST, GET, PUT и DELETE для реализации правил CRUD для веб-ресурса. Это простой и удобный способ выставлять объекты на запросы в Интернете. Это веб-сервисы без накладных расходов.
Просто чтобы прояснить смысловые различия. Каждая операция довольно различна. Суть в том, чтобы иметь хорошие HTTP-методы, которые имеют четкое и понятное значение.
POST создает новые объекты. URI не имеет ключа; он принимает тело сообщения, которое определяет объект. Вставка SQL. [ Редактировать Хотя у POST нет технической причины не иметь ключа, ребята из REST настоятельно рекомендуют, чтобы у POST было отдельное значение как CREATE, но у него не должно быть ключа.]
GET извлекает существующие объекты. URI может иметь ключ, зависит от того, выполняете ли вы одиночный GET или список GET. SQL Select
PUT обновляет существующий объект. URI имеет ключ; Он принимает тело сообщения, которое обновляет объект. Обновление SQL.
УДАЛИТЬ удаляет существующий объект. У URI есть ключ. SQL Delete.
Можете ли вы обновить запись с помощью POST вместо PUT? Не без внесения некоторой двусмысленности. Глаголы должны иметь однозначные последствия. Кроме того, POST URI не имеют ключа, где PUT должен иметь ключ.
Когда я отправлю сообщение, я ожидаю, что 201 СОЗДАН. Если я не понимаю, что-то не так. Точно так же, когда я ставлю, я ожидаю 200 ОК. Если я не понимаю, что-то не так.
Полагаю, вы могли бы настаивать на некоторой двусмысленности, когда POST выполняет POST или PUT. URI должен быть другим; также связанное сообщение может быть другим. Как правило, REST люди берут свое начало от SQL, где INSERT и UPDATE - это разные глаголы.
Можно сделать так, чтобы UPDATE вставлял, если запись не существует, или обновлял, если запись существует. Однако проще, если UPDATE означает UPDATE, а неудача обновления означает, что что-то не так. Тайный откат к INSERT делает операцию неоднозначной.
Если вы не создаете интерфейс RESTful, то обычно используется только GET и POST для извлечения и создания / обновления. Распространены различия в URI или в содержании сообщения, чтобы различать POST и PUT, когда пользователь нажимает кнопку «Отправить» в форме. Однако он не очень чистый, потому что ваш код должен определить, находитесь ли вы в POST = create case или POST = update case.