2013-02-16 134 views
16

我有一組事件保存在我的數據庫(一個非常特殊的數據庫,所以我不能使用一些流行的開源服務器,比如說MySQL)。現在我想構建一個CalDav服務器(通過Java),以便用戶可以將他的日曆客戶端連接到它以檢索或修改事件。我是新手,所以有很多問題,希望你們幫助我。開發CalDav服務器

  1. 什麼是一般步驟?

  2. 我需要提供一個servlet嗎?如果是,那麼我必須返回什麼要求?一個JSON或XML或.ics文件?

  3. 當用戶訂閱我的日曆時,是否意味着他的客戶端會在間隔後拉我的服務器(調用servlet)。

更新:這是1歲的問題,因爲我第一次問,但我得到了相當長的一段upvotes,所以我有義務提供一些信息:最後我用米爾頓庫http://milton.io/,它抽象掉在servlet中,你只需編寫函數來返回數據。該圖書館的作者是相當有幫助和信息。最終結果是:我們的caldav服務器已經工作。

我也接受埃弗特的答案。

+0

你好 - 你還在使用milton.io嗎?它是如何去的? – avijendr 2017-08-23 22:50:35

回答

4

閱讀RFC: http://tools.ietf.org/html/rfc4791

不只是一次,你要至少頂部閱讀它到底4倍。

除此之外,您還應該閱讀RFC的WebDAV,WebDAV ACL和iCalendar。

你會在這裏得到的任何答案都是重複那裏的內容,並試圖簡化這個過程是徒勞的,因爲你真的需要對規範的大部分有完整的理解。

具體回答你的問題:

  1. 是完全過於含糊回答。一般的步驟需要理解規範並編寫服務器。鼓勵具體細節。
  2. 您需要能夠響應HTTP請求的內容。無論是servlet還是其他東西都不那麼重要。 CalDAV是HTTP的擴展。爲meta-information返回XML報告,iCalendar是實際日曆數據的默認格式。對於許多http請求,iCalendar被包裝在xml主體中。現在,服務器也開始支持xCal和jCal。後兩者都是可選的,你必須必須支持iCalendar
  3. 通常,它們將在客戶端定義的時間間隔進行輪詢。有pub-sub機制,但目前沒有標準,並且有各種各樣的實現。討論已經開始爲此提供標準的交通工具,但這可能需要一些時間才能完成。 (年)
+3

這個問題有3點。你的「答案」不提供任何答案。 – bjedrzejewski 2013-10-18 14:01:25

+1

我的答案提供了提供所有答案的官方文檔的參考。實施了流行的CalDAV服務器後,如果不閱讀文檔,甚至無法啓動。 – Evert 2013-10-18 15:06:24

+1

我同意你的看法,但我不同意這篇文章回答了3個問題,這可能不需要閱讀整個文檔就可以回答。這更多的是關於SO的格式的討論,而不是你剛纔所說的真相。 – bjedrzejewski 2013-10-18 15:14:57

5

讓我試試看;-)

哪些一般步驟?

正如Evert所述,您需要實施CalDAV服務器。根據您想要支持的功能,這是非平凡的,需要了解相關規範(iCalendar RFC 5545和CalDAV 4791,WebDAV RFC 4918)。

實現CalDAV服務器的一般步驟是什麼?您需要HTTP入門點:

一)服務帳戶信息(WebDAV中稱爲校長),這包括根據何種網址帳戶直播

B)的日曆服務的日曆列表(稱爲日曆主頁,來自a)的主要信息指向此)

c)爲實際日曆提供服務,即包含在這些事件中的事件。 CalDAV日曆是'iCalendar'資源的特殊WebDAV集合。 iCalendar是表示事件的格式。

根據您希望支持的CalDAV功能,這可能會更復雜(例如服務器端調度)。有更快的同步(同步報告)或上傳等優化。您不需要全部開始。

我需要提供一個servlet嗎?如果是,那麼我必須返回什麼要求?一個JSON或XML或.ics文件?

正如Evert所說,您如何實現HTTP端點是您的選擇。 Servlet是一個可行的選擇。 在(WebDAV)XML(多狀態響應)中返回日曆中項目的主要信息,日曆列表和URL。 事件的實際內容需要以iCalendar(.ics)格式返回。

當用戶訂閱我的日曆時,是否意味着他的客戶端會在間隔後拉我的服務器(調用servlet)。

是的。

一些CalDAV實現還支持Push(服務器可以在新數據可用時告訴客戶端),但這還沒有標準化,實現也有很大差異。 如果您的服務器使用CTags和同步報告(RFC 6578),則輪詢可以保持較快。