バックとは?
|
この文書は web サイト間のピアツーピア通信/通知のためのフレームワークであるトラックバックについて解説したものです。トラックバックの中心となっているアイディアはトラックバック ping です。トラックバック ping は「リソース A は リソース B に関連/リンクしています」という内容を通知するリクエストです。トラックバックの「リソース」とはトラックバック Ping URLであり、これはいわゆる URI のことです。 トラックバック を使うことで複数のサイトが、お互い関連するリソースに関する通信が可能になります。ウェブロガー A さんが何かおもしろいこと(あるいはB さんに関連していること、またはショッキングなこと)を書いたので、そのことをウェブロガー B さんに伝えたいとします。A さんはトラックバック ウェブロガー B さんのサイトでは、B さんのエントリを参照しているすべてのサイトが自動的に一覧表示され、彼のサイトを訪れる読者は、彼のエントリに関連していて、(他サイトにある) web 上のエントリもすべてを読むことが可能になります。もちろんその中には、A さんのエントリも含まれます。 トラックバック ping は誰かがリンクをクリックすることによって成立する暗黙のリンク(例: refferrer ログ)とは違い、2つのサイトにそれぞれある特定のエントリと特定のエントリの間に明示的なリンク関係を築きます。 トラックバックは REST アーキテクチャを採用しており、リクエストは普通のHTTP プロトコルを使っておこなわれます。トラックバック ping の送信は、クライアントからサーバへ HTTP リクエストを送ることで実現されます。サーバからの応答は簡単な XML の形式で返ってきます(詳細は後述)。 トラックバックシステムにおいて、トラックバック ping を受信するための URL はトラックバック Ping URL と呼ばれます。トラックバック Ping URL は http://www.foo.com/mt-tb.cgi/5 のような形式で、この例の場合最後の5がトラックバック ID になります。 サーバの実装にあたり、トラックバック Ping URL の形式はどのようなものにしてもかまいませんが、クライアントの実装は特定の URL 形式に依存しないようにしてください。 リクエストを送信することで実現されます。コンテンツのコンテントタイプは必ず application/x-www-form-urlencoded とします。たとえば、 (クライアント側)エントリの要約です。Movable Type の実装においては、255バイト以上ある場合、252バイトでちょん切られ、後に...が付けられるようになっています。 (クライアント側)エントリの permalink です。他の permalink 同様、このリンクはできる限り、HTML ページ上の実際のエントリを指すようにすべきです。その理由は、その理由はたとえば、(クライアント側のエントリの中でサーバ側エントリへの)質問をしているような場合でも分かりやすくするためです。 Movable Type の実装においては、上記のうち url だけが入力必須項目になっています。title が設定されていない場合、url の値が title として使われます。 上記リクエストに対するレスポンスは、アプリケーションレベルでエラー検知ができるように簡単な XML 形式で返されます(HTTP レベルのエラーは数値で返されます。たとえば、トラックバック URL に指定されたコンテンツが存在しないときは、404 が返されます。)。 アプリケーションには今後、新たな送信の項目が追加されていくかもしれませんが、レスポンスの XML 構造は変わりません。 string を付けて、HTTP GET リクエストを送信します。なお、(前項で述べた)トラックバック Ping の GET から POST への変更猶予期間が済んだら、単にトラックバック Ping URL に GET リクエストを送るだけで ping のリストを受信できるという簡単な仕様に変更されるかもしれません。 このリクエストに対するレスポンスは、エラーの場合前述の内容と同じになります。成功の場合、トラックバック ping のリストが <response> タグで囲まれた RSS マークアップの形式で返されます。 <rss> から </rss> までの部分が RSS データの実体です。残りは単純なレスポンスラッパーで、処理の際には切り捨てられます。 サーバ側のトラックバック Ping URL をクライアントに自動的に検知させるには、トラックバック クライアントが特定の URL、あるいは ウェブログエントリに対応する トラックバック Ping URL を知るための方法が何か必要です。これを実現するためには、サーバの実装にあたり、生成するページごとに RDF を埋め込むようにする必要があります。RDF はエントリごとのトラックバック Ping URL 注意: XHTML へ RDF を埋め込むと、現状のバリデータではエラーになってしまうため、バリデータでチェックしたいときは、RDF 部分をコメント記号で囲むようにしてください。 (対象となるエントリの web ページ) URL my_url を与えられたクライアントは(トラックバック Ping を送信する前に)次のステップに従って動作します。 ページコンテンツをスキャンして、埋め込まれている RDF を探します。ページ内には複数の RDF インスタンスを記述できるため、クライアントは dc:identifier ブロックが my_url と一致する インスタンスを探します。 トラックバック Ping URL がわかったところでトラックバック ping の送信(トラックバック Pingの送信 参照)が可能になります。 自分でトラックバックを実装しようという開発者に全体像を把握してもらうため、Movable Type に依存しない、スタンドアロン版のトラックバック実装をリリースしています。このシステムは HTTP リクエスト経由で ping を受信し、その内容をファイルシステム上に保存、そして特定のトラックバックアイテムに対する ping のリストを RSS 形式で返します。また、このシステムは必要であれば、スタティックな RSS ファイルを生成するようになっています。このソフトウェアは充分実用になるはずです。たとえばサイトのサイドバーに最新15個の ping リストを表示することも、これを使えば可能です。 この Perl コードではサブルーチン discover_tb を定義しています。URL を与えられると、それに対応するトラックバック Ping URL を探します。見つかればトラックバック Ping URL を返し、見つからなければ、undef を返すようになっています。 現在トラックバック ping は HTTP GET ではなく、POST を使うように変更されています。以前の仕様は廃止され、GET のサポートは2003年1月で打ち切られます。 Paul Prescod さんをはじめ、トラックバックを REST アーキテクチャに沿った形にするのを助けてくれたみなさんに感謝します。 |
[ 2] トラックバック技術仕様書
[引用サイト] http://lowlife.jp/yasusii/stories/8.html
