2013-02-16 6 views
16

Ich habe eine Reihe von Ereignissen in meiner Datenbank gespeichert (eine sehr spezielle Datenbank, daher kann ich einige populäre Open-Source-Server nicht mit, sagen wir, MySQL verwenden). Jetzt möchte ich einen CalDav-Server (per Java) aufbauen, damit ein Benutzer seinen Kalender-Client damit verbinden kann, um Ereignisse abzurufen oder zu ändern. Ich bin neu, also habe viele Fragen, hoffe, dass ihr mir hilft.Entwicklung eines CalDav-Servers

  1. Was sind die allgemeinen Schritte?

  2. Muss ich ein Servlet anbieten? Wenn ja, was muss ich dann für eine Anfrage zurückgeben? eine JSON- oder XML- oder .ics-Datei?

  3. Wenn ein Benutzer meinen Kalender abonniert, bedeutet dies, dass sein Client nach einem Intervall meinen Server (das Servlet) aufrufen wird.

Update: das 1-jährige Frage, da ich zunächst gefragt, aber ich habe ganz ein paar upvotes, also bin ich verpflichtet, einige Informationen zur Verfügung zu stellen: Ich landete mit Milton Bibliothek http://milton.io/, es abstrahiert die Servlets, Sie müssen nur Funktionen schreiben, um Daten zurückzugeben. Der Autor der Bibliothek ist sehr hilfreich und informativ. Das Endergebnis: Unser caldav-Server hat funktioniert.

Ich akzeptiere auch Everts Antwort.

+0

Hallo da - benutzen Sie immer noch milton.io? Wie ist es gelaufen? – avijendr

Antwort

4

die RFC-Lesen: http://tools.ietf.org/html/rfc4791

Nicht nur einmal, Sie wollen es von oben nach unten 4 mal zumindest zu lesen.

Mehr als das sollten Sie wahrscheinlich auch die RFCs für WebDAV, WebDAV ACL und iCalendar lesen.

Jede Antwort, die Sie hier erhalten würden, wäre eine Wiederholung dessen, was darin enthalten ist, und der Versuch, dies zu vereinfachen, ist ziemlich zwecklos, weil Sie die meisten Spezifikationen wirklich verstehen müssen.

Um Ihre Fragen gezielt zu beantworten:

  1. zu beantworten ganz zu vage. Die allgemeinen Schritte würden das Verständnis der Spezifikation und das Schreiben des Servers beinhalten. Besonderheiten sind erwünscht.
  2. Sie benötigen etwas, das auf HTTP-Anfragen antworten kann. Ob das ein Servlet oder etwas anderes ist, ist weniger wichtig. CalDAV ist eine Erweiterung von HTTP. XML-Berichte werden für Meta-Informationen zurückgegeben, und iCalendar ist das Standardformat für die tatsächlichen Kalenderdaten. Für viele HTTP-Anfragen ist iCalendar in xml bodies eingebettet. Heutzutage beginnen Server auch, xCal und jCal zu unterstützen. Die letzten beiden sind optional, Sie müssen iCalendar-Unterstützung haben.
  3. Normalerweise werden sie in einem vom Client definierten Intervall abfragen. Es gibt Pub-Sub-Mechanismen, aber derzeit gibt es keinen Standard für sie, und es gibt verschiedene Implementierungen da draußen. Die Diskussionen haben begonnen, einen Standardtransport dafür zu entwickeln, aber das kann einige Zeit dauern. (Jahre)
+3

In diesen Fragen gibt es 3 Punkte. Ihre "Antwort" gibt keine Antwort auf einen von ihnen. – bjedrzejewski

+1

Meine Antwort enthält einen Verweis auf die offizielle Dokumentation, die alle Antworten bietet. Wenn Sie einen beliebten CalDAV-Server implementiert haben, können Sie gar nicht erst anfangen, ohne das Dokument zu lesen. – Evert

+1

Ich stimme dir zu, aber ich stimme nicht zu, dass dieser Beitrag die 3 Punkte beantwortet, die wahrscheinlich beantwortet werden könnten, ohne die gesamte Dokumentation zu lesen. Dies ist eher eine Meta-Diskussion über das Format von SO als die Wahrheit in dem, was Sie gerade gesagt haben. – bjedrzejewski

5

Lassen Sie mich es versuchen ;-)

Was sind die allgemeinen Schritte?

Wie von Evert erwähnt, müssen Sie einen CalDAV-Server implementieren.Je nachdem, welche Funktionen Sie unterstützen möchten, ist dies nicht trivial und erfordert das Verständnis der relevanten Spezifikationen (iCalendar RFC 5545 und CalDAV 4791, WebDAV RFC 4918).

Was sind die allgemeinen Schritte zur Implementierung eines CalDAV-Servers? Sie müssen HTTP-Entry-Level-Punkte:

a) die Kontoinformationen (sogenannte Principals in WebDAV) dienen, dazu gehören unter denen URL die Kalender eines Kontos Live

b) dienen dazu, die Liste der Kalender (die so genannte calendar home, die Hauptinfo von a) verweist auf diese)

c) die eigentlichen Kalender, also die darin enthaltenen Ereignisse, bedienen. CalDAV-Kalender sind spezielle WebDAV-Sammlungen von "iCalendar" -Ressourcen. iCalendar ist das Format, in dem die Ereignisse dargestellt werden.

Je nachdem, welche CalDAV-Funktionen Sie unterstützen möchten, kann dies sehr viel komplexer sein (z. B. serverseitige Planung). Es gibt Optimierungen für schnellere Synchronisierungen (Sync-Berichte) oder Uploads usw. Sie brauchen nicht alles, um loszulegen.

Muss ich ein Servlet anbieten? Wenn ja, was muss ich dann für eine Anfrage zurückgeben? eine JSON- oder XML- oder .ics-Datei?

Wie Evert sagt, wie Sie die HTTP-Endpunkte implementieren, ist Ihre Wahl. Servlets sind eine praktikable Option. Hauptdaten, Kalenderlisten und URLs zu Elementen innerhalb eines Kalenders werden in (WebDAV) XML (Multistatus-Antworten) zurückgegeben. Der tatsächliche Inhalt eines Ereignisses muss im Format iCalendar (.ics) zurückgegeben werden.

Wenn ein Benutzer meinen Kalender abonniert, heißt das, dass sein Client nach einem Intervall meinen Server (das Servlet) aufrufen wird.

Ja.

Einige CalDAV-Implementierungen unterstützen auch Push (wobei der Server dem Client mitteilen kann, wenn neue Daten verfügbar sind), aber das ist noch nicht standardisiert und Implementierungen variieren sehr. Das Polling kann schnell gehalten werden, wenn Ihr Server CTags und Sync-Reports (RFC 6578) implementiert.