Разработка сервера CalDav - программирование
Подтвердить что ты не робот

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

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

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

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

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

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

Я также принимаю Evert answer.

4b9b3361

Ответ 1

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

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

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

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

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

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

Ответ 2

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

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

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

Каковы общие шаги по внедрению CalDAV-сервера? Вам нужны точки входа HTTP:

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

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

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

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

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

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

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

Да.

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