SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

はじめてのWebサービス実装体験

辞書サービスの開発例


ダウンロード サンプルソース (3.7 KB)

辞書サービスを考える

 辞書サービスは、何らかのキーをパラメータにサーバに要求を行うと、キーに関連付けられている情報を結果として返すというものです。例えば「kitty」という単語を与えると「仔猫」という結果を返すことで、英和辞書サービスを実現することができます。

 Webサービスとしてこの機能を実現するには、クライアントから辞書サービスを提供するURIに接続し、HTTPのGETメソッドでコンテンツを要求します。サーバ側では、要求されたコンテンツを返す必要がありますが、当然この結果は動的なものでなければならず、事前に用意されたファイルなどではありません。クライアントから接続するURIは何らかのスクリプトを起動することになります。

 辞書サービスを提供するサーバ側スクリプトは、クライアントからキーとなる値を受け取らなければ結果を返すことができません。この値は、GETメソッドで呼び出された場合はURIのクエリから取得できます。クエリは、URIの末尾に次の様な形で指定することができます。

?名前=値

 名前には、サーバ側スクリプトに渡すパラメータの名前を、値には名前に関連付けられた値を指定します。&記号で区切ることによって複数の値を指定することも可能ですが、この場では辞書を引くためのキーを1つだけ渡せばよいので、次のような形になります。

?key=kitty

 この場合、辞書サービスに対してkittyという名前のキーを渡すことになります。サーバ側では、この値をキーとして利用し、関連付けられている値を検索して結果を返せばよいということになります。

 このサーバ機能の実装は、これまでのWebアプリケーションとほとんど変わりありません。辞書の結果がブラウザで表示可能な完成されたHTMLであれば、これはWebアプリケーションであると考えることができます。まずは、従来型のWebアプリケーションとして上記の辞書機能を実装してみましょう。

サンプル 01 dic.php
<?php
 $key = $_GET['key'];
 $DIC = array(
  "kitty" => "仔猫",
  "kitten" => "仔猫",
  "cat" => "猫",
  "siamese" => "シャム",
  "tortoiseshell" => "三毛",
  "persian" => "ペルシャ"
 );
?>

<html>
 <head>
  <meta http-equiv="Content-Type" 
        content="text/html; charset=UTF-8" />
  <title>辞書の結果</title>
 </head>

 <body>
<?php
 print '<h1>' . $key . '</h1>';
 print '<p>' . $DIC[$key] . '</p>';
?>
 </body>
</html>
サンプル 01 dic.html
<html>
 <head>
  <meta http-equiv="Content-Type" 
        content="text/html; charset=UTF-8" />
  <title>辞書アプリケーション</title>
 </head>

 <body>
  <h1>単語を入力してください</h1>
  <form method="GET" action="dic.php">
   <input type="text" name="key" />
   <input type="submit" value="送信" />
  </form>
 </body>
</html>
入力画面
入力画面
結果
結果

 本稿では、サンプルを単純化するためにソースコード上の$DIC変数に保存している配列で辞書データを表しています。実用的な辞書では数万という単位の項目を扱うことが予想されるため、データベースにすべての情報を保存し、スクリプトはクライアントが要求したキーからクエリを生成してデータベースから情報を取得する形になるでしょう。

 dic.htmlはdic.phpを実行するために必要なパラメータを入力するためのフォームを表示します。テキストボックスに入力された文字列は「送信」ボタンを押すとGETメソッドでdic.phpに渡されます。実際には、フォームを使わなくても次のようなURIからdic.phpを表示することができます。

  • http://localhost/dic.php?key=siamese

 辞書の目的は指定したキーに対応する結果を要求するものなので、PUTやPOSTメソッドを使うのは適切ではありません。GETメソッドであれば、上記のようにURIから簡単に辞書を引くことができるため、ブラウザ以外のアプリケーションからでもアクセスしやすくなります。

アプリケーションの問題点

 上記のサンプルは、入力された単語に関連する結果を返すWebアプリケーションとして機能しました。PHPが出力した結果はHTML文書であり、この結果は単語情報が構造化されたものではありません。例えば「シャム」というのはただの文章であり、これが名詞なのか動詞なのかといった構造化された情報は持ち合わせていません。

 上記のサンプルは極めて単純な結果ですが、実用的な辞書であれば1つの英単語に対しても動詞、名詞、形容詞などの品詞ごとに意味が異なるため、品詞と意味を関連付けた構造的なデータを返す必要が出てくるでしょう。また、単語の意味だけではなく、実例や補足などの情報も返したいと思うかもしれません。

 HTMLでは、こうした辞書の結果を表示することは可能ですが、アプリケーションが意味を解釈することができません。また、アプリケーションがデータを加工したり、画面レイアウトを自由に変更することは困難です。

 これに対して、Webサービスは外部のアプリケーションの要求に対して、意味を解釈できる何らかのデータを返します。XMLであれば、DOMが実装されている環境なら容易に文書から個別のデータを取り出すことができます。

次のページ
RESTの普及

この記事は参考になりましたか?

特集記事連載記事一覧

もっと読む

この記事の著者

赤坂 玲音(アカサカ レオン)

平成13年度「全国高校生・専門学校生プログラミングコンテスト 高校生プログラミングの部」にて最優秀賞を受賞。2005 年度~ Microsoft Most Variable Professional Visual Developer - Visual C++。プログラミング入門サイト WisdomSoft の管理人。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/1679 2008/08/26 13:33

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー