WADLは必要か・その2
「WADLは必要か・その1」の続きです。
フォームをクライアントに作らせたい
一般的なWebアプリケーションでは、サーバがフォームを作ります。form要素の含まれたHTMLをクライアントに返すわけです。
しかし、「サーバサイドでSmalltalkのMVCパターンを使うのは無理があるかも」という記事に書いたように、MVCのVをクライアントにまかせ、サーバがCとMのみ担当することで、少なくともサーバ側は美しいプログラムが書けそうだと感じています。
machine-readableな仕様書を使いたい
フォームをクライアントに作らせるには、サーバが処理可能なリクエスト形式を、何らかの手段でクライアントに伝えなければなりません。AtomPubの場合はRFC 5023がその手段であり、Twitterの場合はAPI仕様書で伝えています。クライアント作成者は、これらの仕様を読めば、適切なフォームが作れます。それらを組み立て、デスクトップアプリケーションとして配布できるわけです。
しかし、RFCならばともかく、Twitterの仕様はころころ変わる可能性があります。古い仕様に基づいて作られたデスクトップアプリケーションは、使い物にならなくなってしまうかもしれません。
もしも仕様書がmachine-readableであれば、そしてクライアントがフォーム生成のたびに仕様書を参照するのであれば、仕様がころころ変わったとしても問題は起きないはずです。そこでWADL文書が使えるのではないか、と思いつきました。
WADL文書の使用例
本当にWADL文書が使えるのかどうか、Twitterのようなマイクロブログを題材に考えてみます。
何はともあれ、つぶやきを投稿するフォームが必要でしょう。リクエスト形式は下記のWADL文書で規定することにします。クライアントには、この文書を参照して適切なフォームを表示することを期待します。
http://example.com/wadls/post_tweets.wadl
<application xmlns="http://wadl.dev.java.net/2009/02" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <resources base="http://example.com/"> <!-- URI Templateが使えます。ユーザIDはクライアントが保持しているでしょう --> <resource path="users/{userId}/tweets"> <method name="POST"> <request> <representation mediaType="application/x-www-form-encoded"> <param name="tweet" type="xsd:string" required="true" /> <representation> <request> </method> </resource> </resources> </application>
タイムラインの取得機能も必要でしょう。上記同様、WADL文書を公開します。
http://example.com/wadls/get_friends_tweets.wadl
<application xmlns="http://wadl.dev.java.net/2009/02" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <resources base="http://example.com/"> <!-- 上に同じ --> <resource path="users/{userId}/friends_tweets"> <method name="GET"> <request> <!-- クエリ変数でページ番号を指定できます --> <param name="page" type="xsd:int" required="false" default="1" /> <request> </method> </resource> </resources> </application>
これで問題ないのか
さて、ここまで特に問題はなさそうにみえますが、本当にそうでしょうか。と、疑問を呈したところで、次回に続きます。