18 votes

Développer un serveur CalDav

J'ai un ensemble d'événements enregistrés dans ma base de données (une base de données très spéciale, je ne peux donc pas utiliser certains serveurs open-source populaires avec, par exemple, MySQL). Je veux maintenant construire un serveur CalDav (en Java) pour qu'un utilisateur puisse y connecter son client de calendrier pour récupérer ou modifier des événements. Je suis nouveau dans ce domaine et j'ai beaucoup de questions. J'espère que vous pourrez m'aider.

  1. Quelles sont les étapes générales ?

  2. Dois-je proposer une servlet ? Si oui, que dois-je renvoyer pour une requête ? un fichier JSON, XML ou .ics ?

  3. Lorsqu'un utilisateur s'abonne à mon calendrier, cela signifie-t-il que son client fera appel à mon serveur (appel de la servlet) après un intervalle.

Mise à jour : Cette question date d'un an, mais j'ai reçu pas mal de votes positifs, je suis donc obligé de fournir quelques informations : J'ai fini par utiliser la bibliothèque Milton http://milton.io/ Il fait abstraction des servlets et il suffit d'écrire des fonctions pour renvoyer les données. L'auteur de la bibliothèque est très utile et informatif. Le résultat final : notre serveur caldav a fonctionné.

J'accepte également la réponse d'Evert.

8voto

hnh Points 729

Laissez-moi faire un essai ;-)

Quelles sont les étapes générales ?

Comme mentionné par Evert, vous devez implémenter un serveur CalDAV. Selon les fonctionnalités que vous souhaitez prendre en charge, cela n'est pas trivial et nécessite de comprendre les spécifications pertinentes (iCalendar RFC 5545 et CalDAV 4791, WebDAV RFC 4918).

Quelles sont les étapes générales pour mettre en place un serveur CalDAV ? Vous avez besoin de points d'entrée HTTP pour :

a) servir les informations sur le compte (appelées "principals" dans WebDAV), ce qui inclut l'URL sous laquelle se trouvent les calendriers d'un compte.

b) servir la liste des calendriers (appelée la maison des calendriers, l'info principale de a) y renvoie)

c) servir les calendriers réels, c'est-à-dire les événements qu'ils contiennent. Les calendriers CalDAV sont des collections WebDAV spéciales de ressources "iCalendar". iCalendar est le format dans lequel les événements sont représentés.

Selon les fonctionnalités de CalDAV que vous souhaitez prendre en charge, cela peut être beaucoup plus complexe (par exemple, la planification côté serveur). Il existe des optimisations pour accélérer les synchronisations (sync-reports), ou les téléchargements, etc. Vous n'avez pas besoin de tout cela pour commencer.

Dois-je proposer une servlet ? Si oui, que dois-je renvoyer pour une requête ? un fichier JSON, XML ou .ics ?

Comme le dit Evert, la façon dont vous implémentez les points de terminaison HTTP est votre choix. Les servlets sont une option viable. Les informations principales, les listes de calendriers et les URL des éléments d'un calendrier sont renvoyées au format XML (WebDAV) (réponses multi-status). Le contenu réel d'un événement doit être renvoyé au format iCalendar (.ics).

Lorsqu'un utilisateur s'abonne à mon calendrier, cela signifie-t-il que son client fera appel à mon serveur (appel de la servlet) après un intervalle.

Oui.

Certaines implémentations de CalDAV prennent également en charge la fonction "Push" (le serveur peut indiquer au client quand de nouvelles données sont disponibles), mais cette fonction n'est pas encore normalisée et les implémentations varient beaucoup. L'interrogation peut rester rapide si votre serveur implémente CTags et sync-reports (RFC 6578).

4voto

Evert Points 17625

Lisez le RFC : https://www.rfc-editor.org/rfc/rfc4791

Pas seulement une fois, vous devez le lire au moins 4 fois de haut en bas.

En outre, vous devriez également lire les RFC pour WebDAV, WebDAV ACL et iCalendar.

Toute réponse que vous obtiendriez ici ne serait qu'une répétition de ce qui s'y trouve, et toute tentative de simplification est plutôt futile, car vous devez vraiment comprendre la plupart des spécifications.

Pour répondre précisément à vos questions :

  1. est entièrement trop vague pour y répondre. Les étapes générales consisteraient à comprendre la spécification et à écrire le serveur. Les précisions sont encouragées.
  2. Vous avez besoin de quelque chose qui puisse répondre aux requêtes HTTP. Que ce soit une servlet ou autre chose est moins important. CalDAV est une extension de HTTP. Des rapports XML sont renvoyés pour les méta-informations, et iCalendar est le format par défaut pour les données réelles du calendrier. Pour de nombreuses requêtes http, iCalendar est enveloppé dans des corps xml. Ces jours-ci, les serveurs commencent également à prendre en charge xCal et jCal. Ces deux derniers formats sont facultatifs, vous doit ont un support iCalendar.
  3. En général, ils sont interrogés à un intervalle défini par le client. Il existe des mécanismes de pub-sub, mais il n'y a actuellement aucune norme pour eux, et il y a plusieurs implémentations. Des discussions ont été entamées afin d'élaborer un transport standard pour cela, mais cela peut prendre un certain temps pour aboutir. (ans)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X