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