名字まで(合わせるために)
RESTはWWWのアーキテクチャスタイル
REpresentational State Transfer
はてなウェブサービスとRESTfulWiki
APIとして見たトラックバックとMT
RSSとAtom Syndication、WebDAVとAtom Public Publishingを比較
AJAXとRESTとの関係
RESTはXML over HTTPではなく、WWWのアーキテクチャスタイル。
例)P2P、MVC、パイプ&フィルタ、クライアントサーバ
各スタイルは『特徴的な制約の集合から成り立つ』
RESTはリソースのrepresentational StateをTransferする。
Webブラウザからあるリソースを取得する事を考える。
URIを使ってHTTP GETでリソースのその時の状態の表現を取得する。
Webブラウザの場合、アドレス欄にURLを指定するという統一されたインターフェースを利用してリソースを取得する事が出来る。
CRUD(Create-Read-Update-Delete)
リソース同士は単純にURIとHTTPで結びつく。
『URIがあればHTTPでリソースとアプリケーションとの連携が簡単になる』→疎結合
サーバ側でセッション管理の必要が無いため、サーバリソースをすぐに解放できる。→スケーラビリティ
リクエストメッセージは自己記述的である。
cookieやurl-rewritingを利用するとRESTではない。
RESTはUniform Interfaceであるため、インターフェースと目的とがURIで直接結びつく。一方、SOAPはインターフェースと目的とがまとまって結びつく。
URIによってそれぞれの目的が独立する場合、クライアントとサーバの間にプロキシなどを挿む事が出来る。それぞれがまとめられる場合、目的ごとにこれを行う事は出来ない。
Web(URI/HTTP)とサービスが分離
UIとデータストレージの分離
サーバー側はステートレスである
リクエストには処理に必要な全ての情報が含まれる。
同じキャッシュは再利用
コンポーネント間のインターフェースを固定
システムの知識を1階層に限る
クライアントでコードをダウンロードして実行(Flash, JS)
※RESTではCODはオプション
ウェブサービス(Web based Service)のターゲットには2種類がある。一般サービスのターゲットであるエンドユーザと、XMLウェブサービスAPIのターゲットになるデベロッパやGeekな人たち。
技術革新を伴うサービスの利用者層推移はハイテクオタクやビジョン先行と行った層が先行する。ビジョン先行層と価格品質重視層との間にはハイテクの落とし穴(Chasm)があり、ここを見落とすと大変。
『技術革新を伴うサービスにとってGeekは重要』
ユーザーがデータをコントロールできる事が大切。
奇麗なURIを心がける。
O/Rマッパ
テンプレートエンジン
それぞれに特徴的なアーキテクチャ
URIからクラスやメソッドへのdispatch(接続?)に規約(制約)を設ける。
WebAPIを容易に扱える様に、そのアーキテクチャを抽象化する事が重要→標準化
小さなAPIを作るとき
エレメントに対応するデータが直感的でない
サーバー側の実装が面倒→フレームワーク重要
シンプルで分かり易く、データ項目が明快である。また、小さなAPIも気にせず実装可能。ライブラリもサードパーティ製のものが用意されている(Net:Delicious/Perl)。
RESTとページングとはトレードオフの関係が発生する場合がある。
AtomPPはAtomで返すために仕様上の制約が発生し、返って邪魔になる場合がある。
はてなダイアリーでは1日の記事を1レコードとしているために、APIにしずらい。
SixApartが定める仕様
Charsetとして宣言される(MTは未実装)。クライアント側に任せられているため、マルチバイトの場合はUTF-8がお薦め。
MTの位置づけは、ブログではなく『パブリッシング・プラットフォーム』
MT以前に出来上がったブログはトラックバックをサポートしない
スタンドアロンのプロトコル化したことで、日本でこれだけ流行した
RDFな人は「RDFで自由拡張」、「セマンティックウェブの第1歩」を主張
DWな人は「オーバーデザインを捨てる」、「安い、早い、旨い最強」を主張
RSS2.0は名前空間に対応するも、RSS2.0の要素は名前空間に所属しないという状態に
Atomは2つの性質を持つ
Webではデータの合意が重要
WebDAVはHTTP+XML+HTTP機能拡張であるのに対し、AtomPPはHTTP+XML+HTTP用法定義。
階層構造のリソース構成で、各リソースに各自任意のXMLで記述できる属性がついてくる。リソースは親コレクション直下のURI。 (ファイルシステム的オペレーション)
常にリソースの名前が分からないとリソースを作る事が出来ない(クライアントがリソースのURIを知らないといけない)。
フラットなフィードで、再帰的操作という概念が無い。リソースはどこのURIでも許される。
純粋なWebはAtomPPのデータモデル(ハイパーリンク)。
POSTで「無名」リソースを作る事が出来る。
AtomPPはHTTPの枠内で、WebDAVはHTTPを改良したもの。
ただし、世の中にはGET/POSTのみをサポートするHTTPクライアントが存在する(J2ME, Flash)。これをSOAP経由で行うAPIセットがAtomPPに定義されていたが、途中で切り離された。現在は拡張アクセスの手段として考えられている。
結局、目的レベルでは同じである。
「RESTのためにAtomがあるんじゃねぇ、データのためにRESTがあるんだ。」
データの自動共通理解はHard SemWeb問題(ほとんど無理)
そうでもあり、そうでもない。
remixingによって、1つのURIに複数のリソースが対応する
XMLHttpRequestによってコードがコネクタとなる(1クライアントに複数のコネクタ)
URIを与える場合の設計指針として
cookieベースで、サーバー側でセッションを管理するためRESTfulじゃない。
アクセスの度に認証を行うためキュリティ的な問題などがある。
リソースごとに認証の必要性を考え、リソースを別々に取得する。認証が要らない場合Cache可能。
AJAXを利用した方がScalable?
認証不要な部分を認証せずに取得できる様になる。
Webは緩やかなリンクしか出来ないため、データを密接に繋げるためにはハードなリンクが出来る空間が必要になる。
素直なデータモデルが重要で、シンプルなプラットフォームにする事が重要
XMLスキーマがボトルネック(全てを台無しにする?)
URIの決定など、アプリケーションの指針になる
SEO対策や設計ルールに良い。
GoogleのロボットはCGI実行を嫌うため、?やパラメータを持つURIを嫌がる。クライアントから動的生成を隠す事が重要。
kylix(Linux版Delphi?)を利用して、Apacheモジュール(DSO)が開発可能(速度向上など)。