岩本隆史の日記帳(アーカイブ)

はてなダイアリーのサービス終了をうけて移行したものです。更新はしません。

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>

これで問題ないのか

さて、ここまで特に問題はなさそうにみえますが、本当にそうでしょうか。と、疑問を呈したところで、次回に続きます。