Сервер CardDAV в PHP - PullRequest
       20

Сервер CardDAV в PHP

3 голосов
/ 10 декабря 2010

В настоящее время я пытаюсь найти способ построить сервер CardDAV на PHP. Это небольшая разработка, которая, я надеюсь, позволит моей компании обмениваться контактами со многими типами устройств, обслуживаемыми пользовательским бэкэндом / CRM.

Я начал играть, пытаясь понять протокол, но в конце концов оказался в замешательстве. Затем я прочитал черновики IETF, но обнаружил, что даже не понимаю основы самого WebDAV.

Каким образом вы бы порекомендовали мне начать изучать CardDAV, WebDAV и все, что с этим связано?

Ответы [ 2 ]

12 голосов
/ 10 декабря 2010

Мне любопытно посмотреть, смогу ли я помочь разрешить некоторую путаницу вокруг webdav. В большинстве стандартов IETF используется язык, который кажется очень тупым.

Обоснование WebDAV

HTTP был разработан для извлечения веб-ресурсов или, скажем так, для чтения. Он не предназначен для создания веб-ресурса.

Короче говоря, WebDAV предоставляет полный набор возможностей удаленного доступа к документам, включая хранение файлов, управление каталогами и поддержку совместной разработки.

Подумайте о файловой системе

Кратчайший путь к пониманию webdav - это сходство с такими веб-ресурсами, как файловая система.

Как и папки, существует collections в качестве специального веб-ресурса, который может содержать другие веб-ресурсы. Нужно было выделить это как особый ресурс, потому что возможности (применяемые методы различны для обычного ресурса)

Так родился новый метод - mkcol

Так же, как files have attributes, web resources have meta-properties, который предоставляет некоторые подробности о веб-ресурсе. Сам контент веб-ресурса может отображаться как раньше (HTTP уже делает это за вас).

Короче, вам также нужно иметь methods to enquire into meta-properties - PROPFIND, а также изменить их - PROPATCH. Полезные нагрузки XML предназначались для запроса и получения этих свойств.

Подход WebDAV заключается в хранении свойств вне тела файла, их можно запрашивать без получения всего тела и обновлять без изменения тела.

Некоторые свойства относятся к webdav. Они были созданы по необходимости. Например: Resourcetype Property. Он был создан для того, чтобы узнать, используете ли вы специальный ресурс коллекции или обычный веб-ресурс, содержащийся в коллекции.

Помните, что GET (например, HTTP) выбирает ресурс, PUT изменяет ресурс, а DELETE удаляет ресурс.

Ограничения HTTP

Чтобы понять webdav, вы должны понимать ограничения HTTP.

  1. Он не имеет состояния, заставляя пользователя строить поиск с нуля.
  2. Нельзя сказать, делайте это тоже для всех ресурсов в определенной коллекции.
  3. Он предназначен только для чтения и не обеспечивает возможности совместной работы, необходимые для авторинга.
  4. В нем отсутствует поддержка операций с несколькими ресурсами. Для поддержки этого было создано depth header, чтобы вы могли определить, нужно ли работать со всеми ресурсами.

Модель ресурсов WebDAV

  +--------+    +--------------+
  |Resource|... |Property      |
  +--------+    +--------------+
                +------++------+
                |Webdav||custom|
                +------++------+

  +-----------+
  |Dav root: /|......
  +-----------+     |     +--------+
                    |.....|Resource|
                    |     +--------+
                    |     +----------+
                    |.....|Collection|.....   +----------+
                    '     +----------+    |...|Collection|
                                          |   +----------+
                                          |    +--------+
                                          |....|Resource|
                                               +--------+
0 голосов
/ 22 декабря 2012

Вы также можете попробовать DAViCal, сервер CalDAV и CardDAV, написанный на PHP с бэкэндом Postgres. Я нахожу это очень надежным, но будьте осторожны: разработка остановилась хотя бы временно. В списке рассылки есть патч, который делает DAViCAl совместимым с последними продуктами Apple (которые содержат много ошибок, которые нужно обойти).

Код с открытым исходным кодом (не уверен, какая лицензия применяется точно), но если вы все еще хотите что-то создать самостоятельно, вы можете посмотреть, как DAViCal обрабатывает Cal- и CardDAV.

http://www.davical.org

...