18

我的数据库中保存了一组事件(一个非常特殊的数据库,所以我不能使用一些流行的开源服务器,比如 MySQL)。现在我想构建一个 CalDav 服务器(通过 Java),以便用户可以将他的日历客户端连接到它以检索或修改事件。我是新手,所以有很多问题,希望大家帮助我。

  1. 一般步骤是什么?

  2. 我需要提供一个 servlet 吗?如果是,那么我必须返回什么请求?JSON 或 XML 或 .ics 文件?

  3. 当用户订阅我的日历时,这是否意味着他的客户端将在一段时间后拉动我的服务器(调用 servlet)。

更新:自从我第一次问起,这是 1 年前的问题,但我得到了相当多的支持,所以我有义务提供一些信息:我最终使用了 Milton 库http://milton.io/,它抽象出了 servlet ,你只需要编写函数来返回数据。该库的作者非常乐于助人且内容丰富。最终结果:我们的 caldav 服务器已经工作了。

我也接受 Evert 的回答。

4

2 回答 2

8

让我试一试;-)

一般步骤是什么?

正如 Evert 所提到的,您需要实现一个 CalDAV 服务器。根据您要支持的功能,这很重要,需要了解相关规范(iCalendar RFC 5545 和 CalDAV 4791、WebDAV RFC 4918)。

实施 CalDAV 服务器的一般步骤是什么?您需要 HTTP 入口点来:

a) 提供帐户信息(在 WebDAV 中称为主体),这包括帐户日历在哪个 URL 下生效

b)提供日历列表(称为日历主页,来自a)的主要信息指向此)

c) 服务于实际的日历,即包含在这些日历中的事件。CalDAV 日历是“iCalendar”资源的特殊 WebDAV 集合。iCalendar 是表示事件的格式。

根据您想要支持的 CalDAV 功能,这可能会更加复杂(例如服务器端调度)。对更快的同步(同步报告)或上传等进行了优化。您不需要所有这些都可以开始。

我需要提供一个 servlet 吗?如果是,那么我必须返回什么请求?JSON 或 XML 或 .ics 文件?

正如 Evert 所说,如何实现 HTTP 端点是您的选择。Servlet 是一种可行的选择。主要信息、日历列表和日历中项目的 URL 以 (WebDAV) XML(多状态响应)形式返回。事件的实际内容需要以 iCalendar (.ics) 格式返回。

当用户订阅我的日历时,这是否意味着他的客户端将在一段时间后拉动我的服务器(调用 servlet)。

是的。

Some CalDAV implementations also support Push (where the server can tell the client when new data is available), but that's not yet standardized and implementations vary a lot. The polling can be kept fast if your server implements CTags and sync-reports (RFC 6578).

于 2014-02-27T01:33:24.077 回答
4

阅读 RFC: https ://www.rfc-editor.org/rfc/rfc4791

不只是一次,您至少要从上到下阅读 4 次。

不仅如此,您可能还应该阅读有关 WebDAV、WebDAV ACL 和 iCalendar 的 RFC。

您在这里得到的任何答案都将是对其中内容的重复,并且试图简化这一点是徒劳的,因为您确实需要全面了解大部分规范。

具体回答您的问题:

  1. 完全是太模糊了,无法回答。一般步骤需要理解规范并编写服务器。鼓励具体。
  2. 您需要可以响应 HTTP 请求的东西。无论是 servlet 还是其他东西都不太重要。CalDAV 是 HTTP 的扩展。为元信息返回 XML 报告,iCalendar 是实际日历数据的默认格式。对于许多 http 请求,iCalendar 包装在 xml 正文中。这些天来,服务器也开始支持 xCal 和 jCal。后两者是可选的,你必须有 iCalendar 支持。
  3. 通常,他们会以客户定义的时间间隔进行轮询。有 pub-sub 机制,但目前它们没有标准,并且有各种实现。讨论已经开始为此提出标准传输,但这可能需要一些时间才能完成。(年)
于 2013-03-12T14:36:41.903 回答