WebHookの調査と実装
Upcoming SlideShare
Loading in...5
×
 

WebHookの調査と実装

on

  • 12,524 views

 

Statistics

Views

Total Views
12,524
Views on SlideShare
12,468
Embed Views
56

Actions

Likes
9
Downloads
43
Comments
0

1 Embed 56

http://ameblo.jp 56

Accessibility

Categories

Upload Details

Uploaded via as Microsoft Word

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

WebHookの調査と実装 WebHookの調査と実装 Document Transcript

  • 研究課題:WebHook の調査と実装 1
  • 1 はじめに Web 上のコンテンツの更新検知は、今までは対象コンテンツを網羅的にクローリングする 方法がスタンダードであったが、コンテンツの数が膨大な事による処理負荷の増大や更新 検知のリアルタイム性に問題があった。 問題を解決する方法としてコンテンツ側が更新時に更新情報を他アプリケーションに通知 する、という手段があるが、その手段のひとつとして「WebHook」という考え方が一部の Web サービスで流行し始めている。 今回は WebHook についての調査と、実際に WebHook の概念を用いたデモアプリケーシ ョンの作成を行った。その紹介を以下行う。 2 WebHook について WebHook は、Web サービスの更新情報を他の Web サービスに通知するための概念である。 情報の通知は HTTP の POST メソッドを使用して送信される。 WebHook については「HTTP の POST メソッドを使用して情報を通知する」という大枠 の概念は定義されているものの、パラメータ名やデータフォーマットなど細かい仕様につ いては定義されていない。 「 あ る サ ー ビ ス の 更 新 情 報 を POST 経 由 で 他 サ ー ビ ス に 通 知 す る 」 と い う 方 式 が WebHook だ、とゆるやかに認識されているようである。 WebHook が日本で著名になったきっかけとして、株式会社はてなの提供するサービス 「はてなブックマーク」が WebHook に対応したことが挙げられる[1]。 はてなブックマークでは「自分がブックマークをした時」「自分のブックマークに対して はてなスターが付与された時」などに WebHook が送られるようである。 なお、WebHook の概念を踏襲した一実装として、Google が「PubSubHubBub(パブサブ ハバブ)」というプロトコルを公開している[2]。PubSubHubBub については後述する。 3 WebHook の一実装~PingHook について WebHook の検証の一環として、WebHook の概念を用いたデモアプリ「PingHook」[3]を 作成した。 3.1 PingHook とは PingHook は、ブログの update ping(更新 ping)を受信して、WebHook 形式に変換して Hook を送信するアプリである。 Google の提供するクラウド環境、GAE/J(Google App Engine for Java)上で動作してい る。 2
  • PingHook では、update ping 受信用の URL の作成が行える。URL 作成時に、この URL で ping を受信した時にどの WebHook 対応サーバに Hook を送信するかを設定する。 こちらで作成した URL をブログサービスの update ping 送信先に指定すると、ブログ記 事更新時に PingHook を介して他サービスに WebHook を送信すことができる。 動作イメージとしては以下の図のようになる。 3.2 Pin g Hook の動作フロー PingHook の内部動作フローを、フローチャートで記す 3
  • 3.3 Pin g Hook の URL 作成 update ping 受信用の URL の作成は、PingHook にログインし、「新たに登録する」から 以下の情報を入力すると行える。 WebHook 送信先の URL user key(update ping URL 生成の際に使用します。未指定の場合 はログインアカウントが割り振られます) データフォーマット(PingHook 独自/PubSubHubBub) WebHook 送信タイミング(記事更新時に常に/初回のみ) こ ち ら で 作 成 し た URL を 、 各 ブ ロ グ サ ー ビ ス の update ping 送 信 先 に 指 定 す る と 、 PingHook が使えるようになる。 4
  • 3.4 Pin g Hook から送信されるパラメータ PingHook から WebHook サーバへは、以下のパラメータが送信される。 blogname ブログ名 blogurl ブログの URL entryurl 記事 URL entrytitle 記事タイトル entrytext 記事本文(HTML タグは削除済み。128 文字以上の場合は以降は削除) urls 記事中に含まれる URL。複数渡される場合はカンマ文字を区切り文 字とする。 imgs 記事中に含まれる画像 URL。複数渡される場合はカンマ文字を区切 り文字とする。 ※ブログサービスの更新 ping に更新記事の URL が渡されていない場合、更新記事の情報が取 得できない場合は、entryurl、entrytitle、entrytext、urls、imgs の値は送信されません。 3.5 動作デモ 動作デモとして、ブログの更新内容を PingHook~WebHook 対応サービスを経由してメー ル送信する、というデモを試してみる。 WebHook 対応サービスは、今回は「HookHub」というサービスを使用した[4]。 HookHub は、受信した WebHook 形式のデータを、JavaScript 文法のユーザ定義文で自 由に加工することができるサービスである。 たとえば、受け取った WebHook の内容を所定の twitter アカウントに post する、といっ た事が可能である。 今回は、ブログの記事タイトルをメールタイトル、記事 URL をメール本文としてメール 送信するという定義文を作成し、そちらを使用した[5]。 var url = stash.params.entryurl ? stash.params.entryurl : stash.params.blogurl; var title = stash.params.entrytitle ? stash.params.entrytitle : stash.params.blogname; mail("[update blog]" + title, url); ブログサービスは、ameblo を使用した[6]。 3.5.1 ping 送信先設定 以下のように、PingHook で作成した URL を登録。 5
  • 3.5.2 記事を書く 記事エディタから以下のような記事を書く。タイトルは「PingHook テスト」とした。 3.5.3 記事の投稿~メールの送信 記事を投稿すると、投稿記事の update ping が PingHook に送信される。 PingHook では update ping を WebHook 形式に変換した上で HookHub に Hook 送信。 HookHub では受信内容をメールで送信、という流れになる。 今回は以下のようなメールが送信された。 6
  • 3.6 考察 上述のように、ブログの更新内容を PingHook を使用して他サービスに Hook し、任意の 処理を追加することができた。 今回は単純なケースだったが、記事に画像が含まれていたら twitter に post、記事に特定 のニュースサイトへのリンクが含まれていたら facebook に投稿、といったような処理も WebHook を使用することで容易に実現が可能である。 4 PubSubHubBub(パブサブハバブ)について PubSubHubBub は、Google が実装した WebHook の考え方を取り入れた一実装である。 更新情報を通知する Publisher と受信する Subscriber の間に Hub を用意し、Hub を介し て更新情報の通知を行えるようにしている。 日本では、livedoor blog ならびに livedoor reader が PubSubHubBub 対応をしたことで知 名度が上がった[7]。 4.1 PubSubHubBub の処理の流れ 以下の図は、PubSubHubBub の説明として Google が用意しているスライド資料から引用 したものである[8]。 まず Subscriber は、自分が購読をしたい URL を Hub に登録する。 7
  • Hub とのネゴシエーションに成功すると、購読 URL の登録が行える。 この方式により一方的に Subscriber に情報を通知することが出来ないため、spam などの 抑制が可能である。 Publisher は、自身のサービスでコンテンツが更新された際に Hub に情報を通知する。 初回については、更新通知した内容が本当に存在するかどうかを確認するために、 Hub が Publisher に対してリクエストを発行し、情報の所在有無を確認する。 8
  • 一度登録された Publisher の URL は 、都度更新しなくても自動的にクローリングされる ようだ。 (こちらについては Hub の内部実装次第の可能性があるため、必ずそうであるかどうかは 定かではない) Subscriber が登録した URL に更新情報が存在する場合は、Hub が Subscriber に対して情 報を通知する。 PubSubHubBub のプロトコルについては以下の URL にて記載されているので、詳しくは こちらを参照いただきたい。 http://pubsubhubbub.googlecode.com/svn/trunk/pubsubhubbub-core-0.2.html 9
  • 4.2 PubSubHubBub のメリット いくつか考えられるが、  プロトコル・仕様が規定されることで実装の混乱が防げること  Publisher は Hub の存在だけを知っていれば良いこと。データの受信先が増えても Publisher が複数のデータ通知をしなくても済む。  同様に、Subscriber も Hub の存在だけを知っていれば良いこと。Publisher から不 要なトラフィックが直接送られてくることも無い といった事が挙げられる。 Publisher~Subscriber 間の無駄なトラフィックが抑制できること。信頼されたメッセー ジのみ授受ができることが大きなメリットと考えられる。 デメリットとしては、Hub にトラフィックが集中する可能性があること、だろうか。 5 考察とまとめ Web のリアルタイム性を向上するための方法として注目を集めている WebHook について、 調査ならびにデモアプリの実装を行った。 今後 Web の世界は、twitter などの隆盛でも感じられるように、よりリアルタイム性が求 められてくると考えられる。 Web サービスの開発担当者も、この潮流と、その中で用いられている技術トレンドについ てキャッチアップし、サービスに展開していく事が望ましいと思われる。 6 参考文献・URL [1]http://d.hatena.ne.jp/keyword/%A4%CF%A4%C6%A4%CA %A5%D6%A5%C3%A5%AF%A5%DE%A1%BC%A5%AF%20Web%20Hook [2] http://code.google.com/p/pubsubhubbub/ [3] http://just-do-pinghook.appspot.com/top [4] http://www.hookhub.com/ [5] http://www.hookhub.com/moaikids/hook/13002 [6] http://ameblo.jp/ [7] http://www.itmedia.co.jp/news/articles/0908/18/news090.html [8] http://docs.google.com/present/view?id=ajd8t6gk4mh2_34dvbpchfs 10