ウェブサービス(Web API)とは?
2009-12-24-1
[WebAPI][Programming]
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)。
このような文字列になる。
一方、二つ目の SOAP, XML-RPC では、HTTPのPOSTメソッドが必須となるためブラウザからの動作確認は難しい。
(個人的には、ブラウザから動作確認できない Web API は面倒なのでどうしてもというとき意外はなるべく使いたくない。)
利用可能なHTTPメソッド:
Web API で利用されるデータ構造は大まかに下記の二つに分けられる。
(1) XML
(2) JSON, JSONP
一つ目の XML はデータ交換用のフォーマットとして一般的なデータ構造。
たいていのプログラミング言語では、XML で記述されたデータを処理するライブラリが充実しているため、プログラムから容易に扱うことができる。
先ほどの MECAPI API での形態素解析結果のフォーマットが XML である。
解析結果 XML データを下記に示す。
二つ目の JSON, JSONP はプログラム言語 JavaScript でデータを扱うための形式である。
JSON はオブジェクトの記述、JSONP は JSON をコールバック関数の引数とした JavaScript コードである。
JavaScript はブラウザ上で動かすことができるので、JSON, JSONP ならばブラウザ上でインタラクティブに処理ができる。
Ajax には必須のデータ構造である。
先ほどの MECAPI API は JSON と JSONP にも対応している。
それぞれの解析結果データを下記に示す。
見やすくするため適宜改行を挿入している。
解析結果 JSON データ:
解析結果 JSONP データ:
- 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]
プログラムから呼び出して使うことが多く、それを前提としたプロトコル、データ構造となっている。
商品検索、ウェブ検索、ソーシャルブックマーク、写真サービス、ツイッター、カレンダー、番組表、天気予報情報、路線情報、漢字変換、キーワード抽出、ウェブページのサムネイル、位置情報、地図情報、認証などさまざまなサービスで 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メソッド:
GET | POST | |
---|---|---|
REST風 | ○ | ○ |
SOAP, XML-RPC | × | ○ |
データ構造
Web API で利用されるデータ構造は大まかに下記の二つに分けられる。
(1) XML
(2) JSON, JSONP
一つ目の XML はデータ交換用のフォーマットとして一般的なデータ構造。
たいていのプログラミング言語では、XML で記述されたデータを処理するライブラリが充実しているため、プログラムから容易に扱うことができる。
先ほどの MECAPI API での形態素解析結果のフォーマットが XML である。
解析結果 XML データを下記に示す。
(https://maapi.net/apis/mecapi?sentence=%E3%83%9A%E3%83%B3%E3%81%AF%E8%B5%B0%E3%82%8B)<MecabResult> <word> <surface>ペン</surface> <feature>名詞,一般,*,*,*,*,ペン,ペン,ペン</feature> </word> <word> <surface>は</surface> <feature>助詞,係助詞,*,*,*,*,は,ハ,ワ</feature> </word> <word> <surface>走る</surface> <feature>動詞,自立,*,*,五段・ラ行,基本形,走る,ハシル,ハシル</feature> </word> </MecabResult>
二つ目の JSON, JSONP はプログラム言語 JavaScript でデータを扱うための形式である。
JSON はオブジェクトの記述、JSONP は JSON をコールバック関数の引数とした JavaScript コードである。
JavaScript はブラウザ上で動かすことができるので、JSON, JSONP ならばブラウザ上でインタラクティブに処理ができる。
Ajax には必須のデータ構造である。
先ほどの MECAPI API は JSON と JSONP にも対応している。
それぞれの解析結果データを下記に示す。
見やすくするため適宜改行を挿入している。
解析結果 JSON データ:
(https://maapi.net/apis/mecapi?sentence=%E3%83%9A%E3%83%B3%E3%81%AF%E8%B5%B0%E3%82%8B&format=json)[ {"surface":"ペン","feature":"名詞,一般,*,*,*,*,ペン,ペン,ペン"}, {"surface":"は","feature":"助詞,係助詞,*,*,*,*,は,ハ,ワ"}, {"surface":"走る","feature":"動詞,自立,*,*,五段・ラ行,基本形,走る,ハシル,ハシル"} ]
解析結果 JSONP データ:
(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)f([ {"surface":"ペン","feature":"名詞,一般,*,*,*,*,ペン,ペン,ペン"}, {"surface":"は","feature":"助詞,係助詞,*,*,*,*,は,ハ,ワ"}, {"surface":"走る","feature":"動詞,自立,*,*,五段・ラ行,基本形,走る,ハシル,ハシル"} ]);
参考
- 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]