Здравствуйте, Pauel, Вы писали:
P>Здравствуйте, gandjustas, Вы писали:
G>>>>И как клиент может проконтролировать? G>>Какие обязанности у клиента? P>Обычные — сделать запрос в соответствии с его семантикой. Если АПИ говорит о том, что операция идемпотентна, то на клиенской стороне надо сделать N соответствующих приседаний. Разумеется, это все делается самим клиентом по метаданным, а не вручную отсылая запрос POST.
Какие метаданные сообщают клиенту что операция идемпотента?
G>>В каком описании присутствует информация об идемпотентности тех или иных вызовов? P>Я привел описание, вернись и посмотри. Выглядит так, будто ты накидываешь не читая.
Ты не понял вопроса: какое описание получает клиент? В лучшем случае это swagger. В нем никак не указывается идемпотентность методов.
Что ты привел — я не знаю. Если ты сам делаешь и клиент и сервер, то можешь использовать любые методы как угодно.
P>>>Что не так с этими операциями? Вот есть у тебя ключ x-y-z, метод POST и кучка add-remove-copy. Если сервер поддерживает идемпотентность для этой операции, то какие проблемы? G>>Я не очень понимаю что значит "поддерживает" когда мы говорим об операциях вроде add-remove-copy. В зависимости от порядка выполнения набора add-remove-copy результат может быть разный. P>Что мешает зафиксировать этот порядок или вообще убрать эти add-remove-copy? P>Как то странно выполнять приседания пачкой каждый раз. Если хочешь, что бы батч, а add-remove-copy, это фактически батч, был идемпотентным, то надо приложить чуть больше усилий, чем просто выполнять каждый раз и ждать того же результата. P>Например, порядок должен быть зафиксирован, эта пачка операций идет внутри транзакции, и выполняется ровно один раз, не больше, и не меньше. Отсюда не ясно, как ты собиаешься получить "разный" результат.
Это уже правильный путь. Если сделать несколько шагов, то получится PUT на урл с ключом и полным "объектом" в теле, без всяких дельт.