Весь ключ в том, делаете ли вы идемпотентное изменение или нет. То есть, если выполнение действия над сообщением дважды приведет к тому, что «будет» то же самое, как если бы оно было сделано только один раз, у вас есть идемпотентное изменение, и оно должно быть сопоставлено с PUT. Если нет, он отображается на POST. Если вы никогда не разрешаете клиенту синтезировать URL-адреса, PUT довольно близок к Update, и POST прекрасно справляется с Create, но это, безусловно, не единственный способ сделать это; если клиент знает, что он хочет создать /foo/abc
, и знает, какой контент туда поместить, он просто отлично работает как PUT.
Каноническое описание POST - это когда вы совершаете покупку чего-либо: это действие, которое никто не хочет повторять, не зная об этом. В отличие от этого, предварительная установка адреса отправки заказа может быть выполнена с помощью PUT очень хорошо: не имеет значения, если вам посоветуют отправлять на 6 Anywhere Dr, Nowhereville
один, два или сто раз: это все тот же адрес. Значит ли это, что это обновление? Может быть ... Все зависит от того, как вы хотите написать бэкэнд. (Обратите внимание, что результаты могут не совпадать: вы могли бы сообщить пользователю, когда они последний раз делали PUT, как часть представления ресурса, что гарантирует, что повторные PUT не вызовут идентичного результата, но результат все равно будет быть «одинаковым» в функциональном смысле.)