CalDAVでイベントの追加/更新/削除 - PUT/DELETEメソッドの使い方
前の記事で、CalDAVの参照メソッドREPORTについて説明しましたが、その続きで更新系メソッドについてまとめたいと思います。
CalDAVは、WebDAVの拡張プロトコルですので、イベントの追加と更新はPUTメソッドを使ってicsファイルをアップロードします。削除はDELETEメソッドを利用します。
前回説明するのを忘れていましたが、CalDAVメソッドを直接試すには、Fiddlerが便利です。
Fiddlerは、Windows版のみですが、HTTPプロトコルを手で入力して試せます。また、IEのプラグインとして通信をデバッグすることができるので何かと便利です。
ダウンロードページからexeファイルをダウンロードできるので、インストーラを起動して、ウィザードに沿って進んでいけばインストールは完了します。
イベントの追加
イベントの追加は、PUTメソッドを使います。
リクエストボディには、追加するイベントVEVENTを含むカレンダーVCALENDARを指定します。
PUT https://www.google.com/calendar/dav/hrendoh@gmail.com/events/20010712T182145Z-123401@google.com.ics HTTP/1.1 Host: www.google.com Content-Type: text/calendar; charset="utf-8" Authorization: Basic xxx Content-Length: 258 BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Example Corp.//CalDAV Client//EN BEGIN:VEVENT UID:20010712T182145Z-123401@google.com DTSTAMP:20100426T160000Z DTSTART:20100426T170000Z DTEND:20100426T180000Z SUMMARY:Fiddlerから追加 END:VEVENT END:VCALENDAR
上記のPUTリクエストをFiddlerでは、以下の手順で実行します。
追加なのでレスポンスコードは201が返されます。
HTTP/1.1 201 Created DAV: 1, calendar-access, calendar-schedule, calendar-proxy Content-Type: text/calendar; component=vevent; charset=UTF-8 Date: Sat, 24 Apr 2010 14:02:43 GMT Expires: Sat, 24 Apr 2010 14:02:43 GMT Cache-Control: private, max-age=0 X-Content-Type-Options: nosniff X-Frame-Options: SAMEORIGIN X-XSS-Protection: 1; mode=block Content-Length: 0 Server: GSE
Google Calendarで確認して見ます。ちゃんと登録されてますね。
時刻はUTCで入力したので、JSTに直されて次の日の2:00から3:00になってしまっています。
UIDとファイル名について
UIDは、コレクション(WebDAVのフォルダ)内でユニークな値を指定します。
また、PUTするカレンダーのファイル名は
(ただし、CalDAVでPUTする場合はUIDとファイル名があってなくても登録できてしまうようです。)
イベントの編集
イベントの編集は、既存のURLに対してPUTを実行します。
追加のリクエストでSUMMARYのみ変更して実行します。
PUT https://www.google.com/calendar/dav/hrendoh@gmail.com/events/20010712T182145Z-123401@google.com.ics HTTP/1.1 Host: www.google.com Content-Type: text/calendar; charset="utf-8" Authorization: Basic xxx Content-Length: 258 BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Example Corp.//CalDAV Client//EN BEGIN:VEVENT UID:20010712T182145Z-123401@google.com DTSTAMP:20100426T160000Z DTSTART:20100426T170000Z DTEND:20100426T180000Z SUMMARY:Fiddlerから編集 END:VEVENT END:VCALENDAR
編集成功のレスポンスコードは204です。
HTTP/1.1 204 No Content DAV: 1, calendar-access, calendar-schedule, calendar-proxy Date: Sat, 24 Apr 2010 15:24:09 GMT Server: GSE
Google Calendarで確認。
イベントの削除
イベントの削除はDELETEです。
DELETE https://www.google.com/calendar/dav/hrendoh@gmail.com/events/20010712T182145Z-123401@google.com.ics HTTP/1.1 Host: www.google.com Content-Type: text/calendar; charset="utf-8" Authorization: Basic xxx
削除成功のレスポンスコードは204です。
HTTP/1.1 204 No Content DAV: 1, calendar-access, calendar-schedule, calendar-proxy Date: Sat, 24 Apr 2010 15:34:18 GMT Server: GSE
Google Calendarで確認。
予定の調整機能について
CalDAVにおけるイベントの更新は、CalDAV Access (RFC 4791)では、PUT/DELETEメソッドについては特に定義されていないので、実際にはWebDAVでicsファイルを扱っているだけです。
しかし、予定の調整に関する仕様CalDAV Scheduling (draft-desruisseaux-caldav-sched)では、PUTやDELETEメソッドでイベントの更新があった場合の、スケジューリングメッセージのやり取りについての機能が追加されています。
この機能についてと、あと繰り返しイベントの扱いについては、また別途まとめたいと思います。