Если бы я отправлял их на сервер по одному, я бы использовал DELETE, PUT или POST в зависимости от характера операции, но так как я отправляю пакет, потенциально содержащий все три типа запросов Я не уверен, какой метод является наиболее подходящим (кроме DELETE).
Какой правильный метод HTTP использовать в этом случае?
«Это зависит».
Ключевой момент заключается в следующем: семантика http применяется к ресурсам, которые находятся в домене интеграции. Тот факт, что отправляемые вами представления интересным образом влияют на модель предметной области, не имеет значения.
Выбранный вами метод должен иметь небезопасную семантику, поскольку вы поощряете изменение исходного сервера. Вам также нужен метод, в котором тело сообщения имеет смысл. Из методов, определенных в спецификации HTTP, у вас есть PUT и POST - любой из них - fine . PATCH также может быть подходящим, в зависимости от того, можете ли вы сделать эту коллекцию изменений атомарно.
Пример: предположим, что мы на самом деле делаем тело сообщения и помещаем его в очередь для обработки «позже». Часть REST берет эту реализацию и одевает ее в маскировку HTTP.
Либо PUT, либо POST идеально подходят для этого. Использование POST для добавления чего-либо в очередь не должно быть большим сюрпризом. PUT аналогичен вставке сообщения в хранилище значений ключей.
HTTP - это протокол приложения, доменом приложения которого является «передача документов по сети». - Джим Уэббер
На вашем клиенте есть документ , в котором описываются изменения, которые вы хотите внести в модель вашего домена. Вы используете HTTP для передачи копии этого документа на сервер. POST работает для этого? Да. PUT работает для этого? тоже да.
Рассмотрим этот ресурс, что означает именно то, что написано на банке
/newest-message-in-queue
Можете ли вы обновить этот ресурс, отправив новое представление через POST? Конечно. Можете ли вы обновить этот ресурс, отправив PUT? Конечно. Будут ли побочные эффекты на объектах домена работать в любом случае? Да.
Может ли клиент определить разницу между этим и изменением значения в хранилище значений ключей? Нет <- и в этом все дело; мы замаскируем нашу реализацию за общей семантикой хранилища документов, чтобы мы могли воспользоваться имеющимися в наличии продуктами. </p>