連載 [第5回] :
PerlでWeb APIを使いたおすAtomPP を利用したWeb API
2006年10月12日(木)
そのほかのWeb API-ECSの場合
ここまでいくつかのWeb APIの標準的な仕様を紹介してきました。しかし、これらの標準的な仕様を利用していないWeb APIもたくさんあります。例えば、広義のRESTとして紹介した、HTTPを利用してXMLをやり取りするだけの「XML on HTTP」とも呼ばれるAPIなどです。
ここでそのいくつかを紹介しておきましょう。まずは、これまでも例に登場した、Amazonの提供するECSです。これはAmazonの商品情報を取得したり、ショッピングカートを操作できるAPIで、SOAPと(広義の)RESTのインターフェイスが用意されています。
ECSにおけるRESTインターフェイスでは、エントリポイントとなるURLが用意され、パラメータを全てクエリ文字列としてそこに渡してアクセスすると、結果がXMLで取得できます。例えば、ItemLookupという、ASINコード(Amazonの商品管理コードで、書籍はISBNコードと同じ)で指定した商品の情報を取得するオペレーションを利用した場合のURLと、その結果をリスト21に示します。
リスト21:ECSでのリクエストとレスポンス
このような、URLにパラメータを渡して単純なXMLデータを受け取るタイプのAPIは、アクセスするのも、そしてAPIを公開するのも比較的簡単なので、多く利用されています。
例えばECSへアクセスしてISBNコードから書籍名を取得するためのコードはリスト22のようになるでしょう。
リスト22:ECSで書籍名を取得するサンプル
アクセスの際には必要な情報にあわせてURLを生成してデータを取得し、それを適当なXMLパーサー(ここではXML::Simpleを利用しています)に渡して中身を取り出せばいいだけです。なお、AWSAccessKeyIdに渡す値は20桁のAPI Keyで、あらかじめECSのサイトにアクセスして取得する必要があります。
APIを公開する側にとってもこうしたシンプルな仕様は便利です。なぜならクエリ文字列で渡ってきたパラメータを解析して、それに応じてシンプルなデータを返せばいいからです。例えばXML-RPCのところでも作成した、2つの数字を受け取って足し算をして返すAPIを考えてみます。数字をURL中にnum1とnum2という名前をつけたクエリ文字列として埋め込んで渡してもらい、返すのは以下のようなシンプルなXMLです。
<?xml version="1.0"?>
<sumResult>
<value>130</value>
</sumResult>
こんなAPIならリスト23のような簡単なプログラムで実現できます。
リスト23:計算を行うAPIプログラム
#!/usr/bin/perl
use strict;
use warnings;
use CGI;
my $cgi = CGI->new;
my $num1 = $cgi->param('num1');
my $num2 = $cgi->param('num2');
my $result = $num1 + $num2;
my $response = <<"END";
Content-type: text/xml
<?xml version="1.0"?>
<sumResult>
<value>$result</value>
</sumResult>
END
print $response;
標準モジュールのCGI.pmを使ってクエリ文字列を取り出したら、後は計算をして、XMLとして出力します。その作業は単にすでに用意したXMLのテンプレートに数値を埋め込むだけの簡単なものです。自分で作ったオリジナルのXMLデータなので、別にXMLを出力するからといって構えることは何もないのです。
連載バックナンバー
Think ITメルマガ会員登録受付中
Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。