开发 CalDav 服务器一般步骤是什么?我需要提供 servlet 吗?如果是,那么我必须为请求返回什么?JSON或XML或.ics文件?当用户订阅我的日历时,这是否意味着他的客户端将在一段时间后拉取我的服务器(调用servlet)。

2022-09-02 13:50:32

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

  1. 一般步骤是什么?

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

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

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

我也接受埃弗特的回答。


答案 1

让我试一试;-)

一般步骤是什么?

正如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)。

是的。

一些CalDAV实现也支持Push(服务器可以在新数据可用时告诉客户端),但这还没有标准化,实现差异很大。如果您的服务器实现了 CTags 和同步报告 (RFC 6578),则可以保持快速轮询。


答案 2

阅读 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. 通常,它们将按客户端定义的时间间隔进行轮询。有发布子机制,但目前没有针对它们的标准,并且有各种实现。讨论已经开始为此提出标准传输,但这可能需要一些时间才能完成。(年)

推荐