2013-02-16 2 views
16

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

  1. Каковы основные этапы?

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

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

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

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

+0

Привет, вы все еще используете milton.io? Как прошло? – avijendr

ответ

4

Прочитайте 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, но в настоящее время для них нет стандартов, и там есть различные реализации. Дискуссии начали придумывать стандартный транспорт для этого, но это может занять некоторое время. (лет)
+3

В этом вопросе есть 3 вопроса. Ваш «ответ» не дает ответа ни на один из них. – bjedrzejewski

+1

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

+1

Я согласен с вами, но я не согласен с тем, что это сообщение отвечает на 3 вопроса, на которые, вероятно, можно было бы ответить, не прочитав всю документацию. Это скорее мета-обсуждение формата SO, чем истина в том, что вы только что сказали. – bjedrzejewski

5

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

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

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

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

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

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

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

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

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

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

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

Да.

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