2006年05月18日

Google Calendar Data APIのgsessionid

Google Calendar Data APIを使ってカレンダーのイベントFeedを取得するためには、gsessionidと呼ばれるIDが必要です。 gsessionidは、カレンダー取得用のURLにGETリクエストを送ることで簡単に取得できます。

例えば、こんな感じのGETリクエストを送信すると、

GET /calendar/feeds/tfggtnbkkq7jp5tfggrsm3kld0@group.calendar.google.com/public/full HTTP/1.1
Host: www.google.com

以下のようなレスポンスが返ってきます。

HTTP/1.1 302 Moved Temporarily
Set-Cookie: S=calendar=8ctwctPlkp4
Location: http://www.google.com/calendar/feeds/tfggtnbkkq7jp5tfggrsm3kld0@group.calendar.google.com/public/full?gsessionid=8ctwctPlkp4
Content-Length: 0
Content-Type: text/html

「8ctwctPlkp4」がgsessionidです。Set-Cookieフィールドから取り出すこともできそうですが、公式な手順はLocationフィールドのURLから取り出すことなのでそうしましょう。

こうして取得したgsessionidは、イベントFeedを取得するために使います。
例えば、以下のようにURLにgsessionidを含めたGETリクエストを送信すると、

GET /calendar/feeds/tfggtnbkkq7jp5tfggrsm3kld0@group.calendar.google.com/public/full?gsessionid=8ctwctPlkp4 HTTP/1.1
Host: www.google.com

以下のようなレスポンスが返ってきます。

HTTP/1.1 200 OK
Content-Type: application/atom+xml; charset=UTF-8
Content-Length: 5509

レスポンスボディはイベントFeedです。このようにしてgsessionidを使うことによりイベントFeedを取得することができます。

これでgsessionidの取得方法と使い方は分かりました。しかし、そもそもこのIDは一体何のためにあるのでしょうか?
認証のため?でもgsessionidを取得するのにパスワードも何も要りません。それじゃ認証の役には立たないでしょう。
パフォーマンスを上げるため?gsessionid取得時にGoogleがデータの先読みをしておくとか・・・。でもgsessionidは結構使いまわしができます。例えば一つのgsessionidで複数のカレンダーにアクセスすることができます。これでは先読みは難しそうです。gsessionidを生成して302を返すだけでもそれなりにコストがかかるはずなのでパフォーマンスはかえって悪くなるでしょう。
では一体何のためか・・・と考えていたところ、Google Calendar Data APIのドキュメントにちゃんと書いてありました。
「That gsessionid parameter is the way that Calendar keeps track of your session, to improve speed of response.」
だそうです。gsessionidはアプリケーションの振る舞いをサーバ側から観測するための仕組みのようですね。 でもってGoogleはそうした観測に基づいてGoogle Calendarを改良していくようです。なんとも素晴らしい。

この手のWebサービスのAPIに、Webサービスの改良を目的とした仕組みが入っているものは珍しいですね。私は他に見たことがありません。 良いWebサービスに仕立て上げるぞ!という強い意志を感じた気がしました。なんというかGoogleらしいですね。

投稿者 MASATO : 2006年05月18日 00:10 | トラックバック
コメント
コメントする









名前、アドレスを登録しますか?