古い記事
ランダムジャンプ
新しい記事
Webサービス(Web API)とは、ユーザがウェブ経由で他の人・会社が持っているデータや処理をアクセスして使うための技術。
プログラムから呼び出して使うことが多く、それを前提としたプロトコル、データ構造となっている。

商品検索、ウェブ検索、ソーシャルブックマーク、写真サービス、ツイッター、カレンダー、番組表、天気予報情報、路線情報、漢字変換、キーワード抽出、ウェブページのサムネイル、位置情報、地図情報、認証などさまざまなサービスで Web API が提供されている。

このような Web API を組み合わせてサイトやアプリケーションを作ることをマッシュアップと呼ぶ。

プロトコル


Web API で利用されるプロトコルは大まかに下記の二つに分けられる。

(1) REST風
(2) SOAP, XML-RPC

一つ目の、REST風プロトコルを採用している Web API では、URL に必要なパラメータを埋め込んでアクセスすると(HTTPのGETメソッド)、目的のデータ獲得や処理ができる。
ブラウザで簡単に動作確認ができる。
(もちろんPOSTメソッドが使えるものもある。)

例として、日本語文を形態素解析(≒単語に分割する)する MECAPI API (MeCab Web Service, https://maapi.net/) で説明する。
この Web API を使って日本語文「ペンは走る」を形態素解析する。
まず、「ペンは走る」を URL encode する(文字コードは UTF-8)。
このような文字列になる。
%E3%83%9A%E3%83%B3%E3%81%AF%E8%B5%B0%E3%82%8B
これをパラメータ sentence の値として下記のURLを構築する。
https://maapi.net/apis/mecapi?sentence=%E3%83%9A%E3%83%B3%E3%81%AF%E8%B5%B0%E3%82%8B
このURLへブラウザでアクセスしてみると、形態素解析結果を見ることができる。

一方、二つ目の SOAP, XML-RPC では、HTTPのPOSTメソッドが必須となるためブラウザからの動作確認は難しい。
(個人的には、ブラウザから動作確認できない Web API は面倒なのでどうしてもというとき意外はなるべく使いたくない。)

利用可能なHTTPメソッド:
GETPOST
REST風
SOAP, XML-RPC×

データ構造


Web API で利用されるデータ構造は大まかに下記の二つに分けられる。

(1) XML
(2) JSON, JSONP

一つ目の XML はデータ交換用のフォーマットとして一般的なデータ構造。
たいていのプログラミング言語では、XML で記述されたデータを処理するライブラリが充実しているため、プログラムから容易に扱うことができる。

先ほどの MECAPI API での形態素解析結果のフォーマットが XML である。
解析結果 XML データを下記に示す。
<MecabResult>
<word>
<surface>ペン</surface>
<feature>名詞,一般,*,*,*,*,ペン,ペン,ペン</feature>
</word>
<word>
<surface>は</surface>
<feature>助詞,係助詞,*,*,*,*,は,ハ,ワ</feature>
</word>
<word>
<surface>走る</surface>
<feature>動詞,自立,*,*,五段・ラ行,基本形,走る,ハシル,ハシル</feature>
</word>
</MecabResult>
(https://maapi.net/apis/mecapi?sentence=%E3%83%9A%E3%83%B3%E3%81%AF%E8%B5%B0%E3%82%8B)

二つ目の JSON, JSONP はプログラム言語 JavaScript でデータを扱うための形式である。
JSON はオブジェクトの記述、JSONP は JSON をコールバック関数の引数とした JavaScript コードである。
JavaScript はブラウザ上で動かすことができるので、JSON, JSONP ならばブラウザ上でインタラクティブに処理ができる。
Ajax には必須のデータ構造である。

先ほどの MECAPI API は JSON と JSONP にも対応している。
それぞれの解析結果データを下記に示す。
見やすくするため適宜改行を挿入している。

解析結果 JSON データ:
[
{"surface":"ペン","feature":"名詞,一般,*,*,*,*,ペン,ペン,ペン"},
{"surface":"は","feature":"助詞,係助詞,*,*,*,*,は,ハ,ワ"},
{"surface":"走る","feature":"動詞,自立,*,*,五段・ラ行,基本形,走る,ハシル,ハシル"}
]
(https://maapi.net/apis/mecapi?sentence=%E3%83%9A%E3%83%B3%E3%81%AF%E8%B5%B0%E3%82%8B&format=json)

解析結果 JSONP データ:
f([
{"surface":"ペン","feature":"名詞,一般,*,*,*,*,ペン,ペン,ペン"},
{"surface":"は","feature":"助詞,係助詞,*,*,*,*,は,ハ,ワ"},
{"surface":"走る","feature":"動詞,自立,*,*,五段・ラ行,基本形,走る,ハシル,ハシル"}
]);
(https://maapi.net/apis/mecapi?sentence=%E3%83%9A%E3%83%B3%E3%81%AF%E8%B5%B0%E3%82%8B&format=json&callback=f)

参考


- Wikipedia:Webサービス
- Webサービスとは 【web service】 http://e-words.jp/w/WebE382B5E383BCE38393E382B9.html
- Web API実践リファレンスブック[2007-05-30-2]
- 秋元裕樹 / PHP×WebサービスAPIコネクションズ[2006-11-29-6]