連載 [第1回] :
  PerlでWeb APIを使いたおす

Web APIの紹介

2006年9月27日(水)
水野 貴明

Web APIとは


   まず、Web APIとは何か、ということに簡単に触れておきます。Web APIはWebサービスAPIとか、Webサービスなどとも呼ばれます。Web上で行われていることがわかりきっている場合には、さらに略して「API」と呼ばれてしまうこともあります(ちなみにAPIはApplication Program Interfaceの略で、Web APIに限らずプログラムがその機能をほかのプログラムから利用できるように公開するインターフェイスのことを指します)。最近はインターネットで提供されているサービスがWeb APIを公開することが珍しくなくなってきているので、「どこどこのサービスがAPIを公開した」といったニュースを耳にしたこともあるのではないかと思います。

   それでは結局Web APIとは何なのでしょうか。Web APIの定義はあいまいなところがあるのですが、ここでは「HTTPを利用してネットワーク越しに処理を実行して結果を受け取る仕組み」ということにして、話を進めたいと思います。

   例えばPerlではサブルーチンを作成してプログラム内のほかの場所から呼び出すことができます。Web APIはこれと同様に、ネットワーク越しにほかのコンピュータ上にあるサブルーチンを実行して、その結果を受け取ることができるというものだといえます(図1)。
Web APIはネットワーク越しに呼び出すサブルーチ
図1:Web APIはネットワーク越しに呼び出すサブルーチ

   例えばGoogleやYahoo!が公開する検索APIは、検索キーワードを送ることで、検索結果を受け取ることができます。Amazonは販売されている商品情報を検索したり、ショッピングカートを利用できる仕組みを公開しています。これらのAPIを自分のプログラムから呼び出し、受け取ったデータを利用できるわけです。このようにWeb APIは、自分自身のシステム内だけでなく、インターネット越しに外部のサービスが提供するAPIを呼び出して、その処理結果やデータを活用できる点が大きな特長となっています。

   ネットワーク越しに処理を呼び出す仕組みはWeb API以外にもありますが、Web APIではHTTPを利用している点がもうひとつの特徴となっています。通常のWebページなどへのアクセスと同様にURLでアクセス先を指定してデータを送信し、結果を受け取るわけです。

   HTTPはブラウザーがWebページを表示するために用いられるプロトコルですが、基本的にはURLを利用してデータをやり取りするシンプルなプロトコルで、Webページデータのやり取り以外にも利用できます。そしてHTTPは非常に一般的なプロトコルであるため、多くの言語でライブラリが用意されていますし、そもそもがシンプルなプロトコルなので、ソケットを利用できれば自作することもそれほど難しくなりません。さらに、インターネット経由でのデータのやり取りを行う際には、ファイアウォールによるアクセスの制限が問題となる場合も多いのですが、HTTPはファイアウォールによって許可されているケースが多いこともメリットとなっています。

   そして、その上でやり取りされるデータもXMLなどの汎用的なデータ形式を利用するのが普通です。つまりはWeb APIへのアクセスは、言語や環境に依存することなく行えるのです。これはそれだけそのAPIの利用してもらえる可能性が高くなることを意味しています。そのため、ネットワークを経由してアクセスできるAPIを公開する際に、汎用的なデータ形式が非常によく利用されるようになってきているのです。

   Perlでも、Web APIへアクセスをするのは非常に簡単です。PerlにはLWPが用意されています。これはlibwww-perlの略で、Webアクセス関連の機能を提供するモジュールです。LWPは標準モジュールであり、すでに使ったことがあるという方も多いと思いますが、ここで簡単にその使い方に触れておきます。

   例えばWeb上のデータにアクセスしてデータを取得するには、LWP::Simpleを利用すればたった1行です(リスト1)。

リスト1:LWP::Simpleのサンプル
use LWP::Simple;
my $data = get('http://www.example.com/');

   ただしLWP::Simpleはその名のとおりとてもシンプルで、GETメソッドによるデータ取得にしか対応していない、タイムアウトの設定ができないなどの制限があります。きちんとした処理を行いたい場合は代わりにLWP::UserAgentを利用します(リスト2)。

リスト2:LWP::UserAgentのサンプル
use LWP::UserAgent;
my $ua = LWP::UserAgent->new;
$ua->agent('PerlSample/0.1');
$ua->timeout(5);
my $response =
    $ua->get('http://www.example.com/');
print $response->content
    if $response->is_success;

   Web APIは、基本的にこうしたHTTPでのデータのやり取りさえ可能なら、アクセスができます。あとはどんなURLにアクセスするのか、どういったデータをやり取りするのか、といったことが違うだけです。

   Web APIという言葉自体は、やり取りするデータを規定していないので、さまざまなデータ形式を利用したAPIが公開されていますし、もし自分でAPIを作って公開する場合にも、データ形式は自由です。しかし、いくつかの標準的なやり取りの方式が存在しています。例えば「XML-RPC」や「SOAP」などがその代表格です。

   こうした標準的な方法は、広くその仕様が知られているために利用が簡単で、APIを提供する側も利用する側にも便利だといえるでしょう。実際Perlにおいても、XML-RPCやSOAPは、利用するためのモジュールが用意されているので、使い方さえ知っていれば、実際にどういうやり取りが行われているのかをほとんど知らなくても利用できるのです。

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

連載バックナンバー

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

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

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

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