連載 [第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でのリクエストとレスポンス
ECSでのリクエストとレスポンス
(画像をクリックすると別ウィンドウに拡大図を表示します)

   このような、URLにパラメータを渡して単純なXMLデータを受け取るタイプのAPIは、アクセスするのも、そしてAPIを公開するのも比較的簡単なので、多く利用されています。

   例えばECSへアクセスしてISBNコードから書籍名を取得するためのコードはリスト22のようになるでしょう。

リスト22:ECSで書籍名を取得するサンプル
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を出力するからといって構えることは何もないのです。

1973年東京生まれ。エンジニア兼技術系ライター。株式会社はてな勤務。近著に「俺流Amazonの作り方」(アスキー)、「詳解RSS〜RSSを利用したサービスの理論と実践」(ディー・アート)など。趣味はラテン音楽と海外旅行と神輿。現在、家を荒らしまわるネズミの被害に頭を悩ませている。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています