Разработка сервера CalDav

У меня есть набор событий, сохраненных в моей базе данных (очень специальная база данных, поэтому я не могу использовать некоторые популярные серверы с открытым исходным кодом, скажем, MySQL). Теперь я хочу построить сервер CalDav (по Java), чтобы пользователь мог подключить к нему свой клиент календаря для извлечения или изменения событий. Я новичок в этом так много вопросов, надеюсь вы поможете мне.

  1. каковы общие шаги?

  2. нужно ли предлагать сервлет? Если да, то что надо Я возвращаюсь за просьбой? JSON или XML или .файл ics?

  3. когда пользователь подписывается на мой календарь, означает ли это, что его клиент потянет мой сервер (вызов сервлета) через интервал.

обновление: это 1-летний вопрос, так как я впервые задал, но у меня есть довольно много ответов, поэтому я обязан предоставить некоторую информацию: я закончил использование библиотеки Milton http://milton.io/, он абстрагирует сервлеты, вы просто нужно написать функции для получения данных. Автор библиотеки весьма полезен и информативен. Конечный результат: наш сервер caldav работал.

Я также принимаю ответ Эверт.

2 ответов


прочитайте RFC: http://tools.ietf.org/html/rfc4791

не только один раз, вы хотите, по крайней мере, прочитать его сверху вниз 4 раза.

более того, вы, вероятно, также должны прочитать RFC для WebDAV, WebDAV ACL и iCalendar.

любой ответ, который вы получите здесь, будет повторением того, что там, и попытка упростить это довольно бесполезна, потому что вам действительно нужно полное понимание большинства спецификация.

чтобы ответить на ваши вопросы конкретно:

  1. слишком расплывчато, чтобы ответить. Общие шаги повлекут за собой понимание спецификации и написание сервера. Конкретика поощряется.
  2. вам нужно что-то, что может отвечать на HTTP-запросы. Неважно, сервлет это или что-то другое. CalDAV является расширением HTTP. XML-отчеты возвращаются для метаинформации, а iCalendar является форматом по умолчанию для фактические данные календаря. Для многих http-запросов iCalendar обернут в тела xml. В эти дни серверы также начинают поддерживать xCal и jCal. Последние два являются необязательными, вы должны поддержка стандарта iCalendar.
  3. обычно они будут опрашивать с определенным клиентом интервалом. Существуют механизмы pub-sub, но в настоящее время для них нет стандарта, и есть различные реализации. Начались обсуждения по вопросу о стандартном транспорте для этого, но это может занять некоторое время. (годы)

позвольте мне попробовать ; -)

каковы общие шаги?

Как упоминалось Evert, вам нужно реализовать сервер CalDAV. В зависимости от того, какие функции вы хотите поддерживать, это нетривиально и требует понимания соответствующих спецификаций (iCalendar RFC 5545 и CalDAV 4791, WebDAV RFC 4918).

каковы общие шаги для реализации сервера CalDAV? Вам нужны точки входа HTTP для:

a) обслуживать информацию об учетной записи (называется principals in WebDAV), это включает в себя URL-адрес, по которому календари учетной записи live

b) обслуживайте список календарей (называемый календарем home, основная информация из a) указывает на это)

c) служат фактические календари, то есть события, содержащиеся в них. Календари CalDAV-это специальные коллекции WebDAV ресурсов iCalendar. iCalendar-это формат, в котором представлены события.

в зависимости от того, какие функции CalDAV вы хотите поддержка, это может быть более сложным (например, планирование на стороне сервера). Существуют оптимизации для более быстрой синхронизации (sync-reports)или загрузки и т. д. Вам не нужно все это, чтобы начать.

нужно ли предлагать сервлет? Если да, то что я должен вернуть запрос? JSON или XML или .файл ics?

Как говорит Evert, как вы реализуете конечные точки HTTP, это ваш выбор. Сервлет - один из жизнеспособных вариантов. Основная информация, списки календарей и URL-адреса элементов в календаре возвращаются в (WebDAV) XML (многостатусные ответы). Фактическое содержимое события должно быть возвращено в iCalendar (.ics) формат.

когда пользователь подписывается на мой календарь, означает ли это, что его клиент потянет мой сервер (вызов сервлета) через интервал.

да.

некоторые реализации CalDAV также поддерживают Push (где сервер может сообщить клиенту, когда новые данные доступны), но это еще не стандартизировано, и реализации различаются много. Опрос может быть сохранен быстро, если ваш сервер реализует CTags и sync-reports (RFC 6578).