Как избежать временного конфликта или совпадения для CalDAV?
Я изучаю протокол CalDAV.
У меня есть какой-то вопрос для временного конфликта или совпадения для CalDAV.
Позвольте мне объяснить на примере для некоторого сценария. Я сделал событие PM1 ~ PM6 в календаре. А потом я пытаюсь сделать еще одно событие PM2~7 в том же календаре. Это время конфликта или перекрытия.
Как сервер CalDav разрешает этот конфликт? Сервер делает ошибку при втором событии?
Я действительно искал RFC 6638. Но я не мог найти решение. Пожалуйста, помогите мой вопрос.
Спасибо за прочтение.
2 ответа
Клиент CalDAV должен решить, как вести себя, когда происходит перекрытие. Если клиент решит написать событие, которое перекрывает другое, сервер запишет событие, которое перекрывает.
При планировании (пользователь A хочет пригласить пользователя B на собрание, но не хочет выбирать временной интервал, который уже занят в календаре пользователя B), клиент CalDAV может запросить FREEBUSY
статус для пользователя (см. RFC 4791
). Есть также доступность, которая позволяет клиенту CalDAV получать доступность пользователя (например, рабочие часы).
Функциональность, которую Ким запрашивает, очень распространена для систем бизнес-календарей (не нужно, чтобы одно и то же лицо заказывалось дважды и т. Д.)
Я думаю, что в мире CalDAV есть две части:
а) Сначала клиент должен выполнить запрос freebusy, чтобы проверить, доступен ли пользователь. А затем показать предупреждение о конфликте или что-то, что кажется подходящим.
Это сколько систем, в том числе и между Exchange. Сири также делает этот тип обнаружения конфликта ("эй, у вас уже есть событие в то время, я все еще создаю конфликтующее, мастер?")
б) Но в разумной системе вам действительно нужно гарантировать, что информация не устарела во время PUT. Т.е. ни один второй клиент не запланировал одного и того же посетителя / ресурса.
Я думаю, что в CalDAV вы можете сделать это, протестировав sync-token
или CTag
используя If
заголовок на PUT
, То есть пусть PUT
только успешно, если вся основная коллекция не изменилась. И если бы это сделал (PUT
потерпит неудачу с конфликтом), переделайте freebusy, затем повторите попытку.
Я не думаю, что есть надежный способ сделать это в кросс-коллекциях CalDAV (календари), то есть если доступность ресурса изменилась из-за того, что он был зарезервирован в другом календаре, целевая коллекция синхронизации обычно не изменится его тег синхронизации и PUT
будет работать через Плохая вещь в CalDAV (с планированием) состоит в том, что PUT больше не являются идемпотентными. В противном случае вы могли бы сделать PUT
, перепроверьте, есть ли у него все еще конфликты, и если да, то опустите его по факту.