Perlクックブック Volume 2

Perlクックブック〈VOLUME2〉

Perlクックブック〈VOLUME2〉

買いました。「やりたいこと」が具体的にどうコードを書けばいいのか、どのライブラリを使えばいいのか書いてあるので非常にいい感じ。WebAPIの叩き方もXMLPRC::Liteを使う方法とSOAP::Liteを使う方法の2つが紹介されていた。

あとDNSの参照、POP3を使ったメールの受信、SMTPを使ったメールの送信、それぞれの添付ファイルの扱い方、FTPクライアントの使い方etc etc。

で、RESTについては記述がなかったのでYahooデベロッパーネットワークとかちょっと見てみると・・・ リクエストする時は、URLの組み立てで、CGIにパラメータ渡すのと大差ない。というか同じ? サンプルのコードを見ると・・・

my $base_url = "http://api.search.yahoo.co.jp/WebSearchService/V1/webSearch";
my $type = "all"; #alternates: any, phrase.
my $results = 50;
my $language = "ja"; 
my $results_sort = "rank"; #alternate: date.
my $req_url = "$base_url?appid=$appID&query=$query&results=$results";

$req_url .= "&language=$language&sort=$results_sort";

# Make the request
my $yahoo_response = get($req_url);

同じだよw 使っているのは文字列の操作とLWP::Simple::getだけだ。こんなURLの組み立てとgetなんてとっくのとうに理解してるっつーの! でも、もどってくるのはXMLになっていて、続くコードはこんな感じ。

# Parse the XML
my $xmlsimple = XML::Simple->new();
my $yahoo_xml = $xmlsimple->XMLin($yahoo_response, ForceArray=>['Result']);

# Set some variables
my $out;
my $result_count = 0;

# Add the column header
my $totalresult = $yahoo_xml->{totalResultsAvailable};

#top link
$out .= "Search again
\n
\n"; $out .= "result : $totalresult

\n"; # Loop through the items returned foreach my $result (@{$yahoo_xml->{Result}}) { #ごにょごにょ }

ふーむ。

なんというか、SOAPより簡単にリクエストを投げられるのはいいかも。でも情報通信の階層モデルって考えでこれを見てみると、非対称で美しくない。SOAPはHTTPの上層に、同じフォーマット(XML)でサービスとデータ構造を定義していて対称なモデルになっていると思う。それにRESTだって結果はXMLで返ってくるんだから、いくらリクエストを簡単に書けたって、結局XMLのパージングは必要じゃないか。まあ、タグを頼りに文字列の部分切り出しで値を取り出すこともできるけどさ。でもなんつーかそれは、「正しさ」や「美しさ」がないじゃないか。

「正しさ」よりも「美しさ」よりも「使える」事が重要ではあるけど、「使える」事にさらに「正しさ」と「美しさ」を添えるべきだと思う。「正しさ」と「美しさ」はあるけど、「使えない」ものは、一篇の詩みたいなもんだろうねw 読む人が読めば感動を与えるけど、それでゴハンは食べれませんよと。