以下、本発明の実施形態を、図面を参照して説明する。
<実施形態の構成>
図1は、本発明の実施形態に係るAPI集約装置を含む通信システムの構成を示すブロック図である。
図1に示す通信システム20は、API集約装置24と、m個のアプリケーション25a〜25mと、j個のAPI26a〜26jと、n個のイネーブラ27a〜27nと、p個のAPI28a〜28pとを備えて構成されている。
j個のAPI26a〜26jは、API集約装置24とm個のアプリケーション25a〜25mとの間に接続されており、m個のアプリケーション25a〜25mとは個数が異なる。また、p個のAPI28a〜28pは、API集約装置24とn個のイネーブラ27a〜27nとの間に接続されている。p個のAPI28a〜28pは、n個のイネーブラ27a〜27nよりも個数が多い。イネーブラ27bに3つのAPI28b1,28b2,28b3が繋がっている。このように、1つのイネーブラ27は、1つのAPIのみならず、複数のAPIを持つ場合がある。本実施形態では、1つのイネーブラ27bは、3つのAPI28b1,28b2,28b3を持つものとする。但し、全API28a〜28pは、全イネーブラ27a〜27nと同数でもよい。
各々のアプリケーション(アプリ)25a〜25mは、クラウド等に存在し、言い換えれば、インターネットのWEB(World Wide Web)上に存在し、インターネットに接続されている。例えば、スマートフォン(スマホ)やパーソナルコンピュータ等の端末機に、アプリ(例えば25a)をインストールし、このクライアントのアプリ25aからインターネット上のアプリサーバ(図示せず)にアクセスする。アプリサーバにはプログラミングコードが書かれており、このコードの中にAPI集約装置24のAPI26a〜26jを実行するというソースコードが書かれている。このソースコードを実行すると、インターネットを介してAPI集約装置24まで信号が伝わり、API28a〜28pにアクセスする。このアクセスが行われると、API集約装置24に繋がっている例えば位置情報取得機能としてのイネーブラ27aのAPI28aから、「位置情報」を取得し、これをアプリサーバを介してスマートフォンに返すといった仕組みになっている。
API28a〜28pは、イネーブラ27a〜27nに対してリクエスト情報及びレスポンス情報を送受信中継(単に、送受信ともいう)する動作を実行する。
なお、後述において、アプリ(例えば25a)からAPI集約装置24を介してAPI(例えば28b1)にアクセスすると表現した場合、そのアクセスは、次に記載の定義を含むものとする。即ち、アクセスとは、API集約装置24を介して送信されてきたリクエスト情報を、API28b1がイネーブラ27bへ送信し、また、イネーブラ27bがリクエスト情報に応じて返信したレスポンス情報を、API28b1がAPI集約装置24(又はアプリ25a)へ返信する動作を実行することを含む動作をいう。
イネーブラ27a〜27nは、通信処理機能を備え、位置検索や必要情報等のユーザが所望する情報を提供する等、何らかの目的を果たすための機能を有する装置である。本実施形態では、例えば1つのイネーブラ27が1つの機能を持つものとする。1つの機能とは、例えば位置情報取得機能、グルメ検索機能及びレコメンド機能等の何れか1つの機能である。
なお、1つのイネーブラ27は、位置情報取得機能、グルメ検索機能、レコメンド機能の3つの機能を併せ持ったり、2つの機能を併せ持ったりできる。当然のことながら、3つを超える機能を持つ場合もある。
API集約装置24は、1つのイネーブラ(例えば27b)が複数のAPI(例えば28b1,28b2,28b3)を持つ場合に、アプリ(例えば25a)からのリクエストに応じて、利用者が効率良く利用可能に複数のAPI28b1,28b2,28b3をマッシュアップする処理を行う。このAPI集約装置24は、API処理機能部21、開発者ポータル機能部22及び保守運用機能部23を備える。
マッシュアップする処理を、図2及び図3を参照して具体的に説明する。但し、本実施形態では、図2に示すように、イネーブラ27a(図1参照)は位置情報取得機能27aであり、イネーブラ27bはグルメ検索機能27b、イネーブラ27cはレコメンド機能27cであるとする。位置情報取得機能27aにAPI28aが繋がり、グルメ検索機能27bに3つのAPI28b1,28b2,28b3が繋がり、レコメンド機能27cにAPI28cが繋がっている。また、各API28a〜28cを組合せてアプリ25aが作成されているとする。なお、位置情報取得機能27a、グルメ検索機能27b、レコメンド機能27cを、単に、機能27a、機能27b、機能27c、と称す場合もある。
まず、図2に示す構成において、アプリ25aがAPI28aを介して位置情報取得機能27aから位置情報を取得した後に、グルメ検索機能27bからグルメに係る情報を取得する処理を行うとする。この場合、アプリ25aはリクエスト情報を、矢印Y1aで示すように、API26bを介してAPI集約装置24へ送信し、更に、矢印Y1bで示すように、API28b1を介してグルメ検索機能27bへ送信する。これによって、グルメ検索機能27bから、そのリクエスト情報に応じたレスポンス情報が返信される。このリクエスト情報が矢印Y1c,Y1dで示すように、API28b1、API集約装置24及びAPI26bを介してアプリ25aへ返信される。このリクエスト及びレスポンスの処理が、次に、矢印Y2a,Y2b,Y2c,Y2dで示すように行なわれ、その次に、矢印Y3a,Y3b,Y3c,Y3dで示すように行なわれる。これによって、アプリ25aが所望の情報をグルメ検索機能27bから取得する。
ここで、3つのAPI28b1,28b2,28b3を、図3に示すように、1つのAPI28b3に見えるようにマッシュアップしたとする。この場合、アプリ25aは、矢印Y4a,Y4b,Y4c,Y4dで示すように、1回のリクエスト及びレスポンスの処理を行うのみで、所望の情報をグルメ検索機能27bから取得するができる。
なお、この後、アプリ25aは、図2に示すAPI28cを介してレコメンド機能27cへアクセスして、ユーザが嗜好する飲食物情報等を取得する。
なお、図1に示すAPI処理機能部21は、認証機能、トラフィック制御機能及びIF変換機能を有する。
認証機能は、APIがインターネットに公開され、様々なユーザに使用されるため、誰に使用されているかをユーザID等で認証する機能である。
トラフィック制御機能は、検索等のための通信が使用され、負荷が掛かり過ぎるとAPI集約装置24等が故障するので、故障しないようにトラフィック制御を行う機能である。
IF機能は、アプリ25a〜25mからのリクエスト情報又はレスポンス情報の変換を行う機能である。この機能によれば、例えば、軽量なデータ記述言語の1つであるJSON(JavaScript(登録商標) Object Notation)形式を、構造化されたデータを交換するための言語であるXML(Extensible Markup Language)形式に変換することができる。
開発者ポータル機能部22は、APIを利用するための窓口機能であり、アプリ開発者のアプリ開発支援(APIドキュメントやAPI利用申請等)機能を有する。
保守運用機能部23は、API集約装置24を保守する処理、実際にAPIをAPI集約装置24に接続する処理、実際にAPI互換処理が実行されているか否かを判定する処理等を行う。更に、保守運用機能部23は、検索等のための通信のトラフィック量を分析するトラフィック分析機能や、API集約装置24からグルメ検索機能等のAPIにリクエスト情報を送れるようにするエンジニアリング機能を有する。
次に、図4にAPI集約装置24の特徴構成を示す。このAPI集約装置24は、API信号取得部21aと、API情報蓄積部21bと、計測部21cと、分析部21eと、API計測情報蓄積部21dと、API信号送信部21fと、API粒度判断部21gと、API粒度変換部21hと、情報作成部21iと、開発者ポータル機能部22とを備えて構成されている。
なお、API信号取得部21aを取得部21aともいい、API情報蓄積部21bを蓄積部21b、API計測情報蓄積部21dを蓄積部21d、API信号送信部21fを送信部21f、API粒度判断部21gを粒度判断部21g、API粒度変換部21hを粒度変換部21hともいう。
図4において、破線枠21で囲む次の要素がAPI処理機能部21(図1参照)の機能を分割した構成要素である。即ち、API信号取得部21a、API情報蓄積部21b、計測部21c、分析部21e、API計測情報蓄積部21d、API信号送信部21f、API粒度判断部21g、API粒度変換部21h、情報作成部21iが、API処理機能部21の構成要素である。
ここで、図4に示すAPI集約装置24で用いられるリクエスト情報とレスポンス情報の構成を、図5を参照して説明する。
図5(a)に示すように、リクエスト情報qは、メソッド及びURI(Uniform Resource Identifier)を有するリクエスト部qrと、ヘッダ情報及び認証情報を有するヘッダ部qhと、データ形式及びパラメータを有するボディ部qbとから構成されている。
図5(b)に示すように、レスポンス情報pは、ステータスコードを有するレスポンス部prと、ヘッダ情報を有するヘッダ部phと、データ形式及びパラメータを有するボディ部pbとから構成されている。
次に、図6(a)及び(b)に、リクエスト情報qとレスポンス情報pの構成例を示し、その説明を行う。
図6(a)に示すリクエスト情報qにおいて、リクエスト部qrの情報は、例えば、「POST/apiName/v1/calls」である。「POST」がメソッドであり、「apiName/v1/calls」がURIである。
ヘッダ部qhの情報は、例えば、「Authorization API−KEY:h47tq384」である。「Authorization」がヘッダ情報であり、「API−KEY:h47tq384」が認証情報である。
ボディ部qbの情報は、例えば、「{“name”:“Alice” “from”:”0422−59−1111” “to”:“0422−59−2222”}」である。{}内の全ての文字列がパラメータである。データ形式は、例えばJSON形式である。
次に、図6(b)に示すレスポンス情報pにおいて、レスポンス部prの情報は、例えば、「200 OK」であり、これがステータスコードである。
ヘッダ部phの情報は、例えば、「Location http://xxx/aaa/v1/bb」であり、これがヘッダ情報である。
ボディ部pbの情報は、例えば、「{“id”:“001”}」であり、これがパラメータである。データ形式は、例えばJSON形式である。
図4に戻って、アプリ25aは、事前に登録された宛先であるイネーブラ(例えば27bとする)に繋がるAPI(宛先API)28b1,28b2,28b3へ、矢印Y11で示す信号により、リクエスト情報を送信する。この送信されたリクエスト情報は、API集約装置24のAPI信号取得部21aで受信(取得)される。以降、イネーブラ27b及び、API28b1,28b2,28b3を宛先APIとして例に挙げて説明する。
API信号取得部21aは、矢印Y12で示す信号により、取得したリクエスト情報を後述のAPI情報として蓄積部21bへ出力すると共に、矢印Y13で示す信号により、同リクエスト情報を計測部21c及び分析部21eを介して、宛先のイネーブラ27bへ出力する。
宛先のイネーブラ27bへのアクセスは、例えば、イネーブラ27bに繋がる3つのAPI28b1,28b2,28b3(図2参照)がマッシュアップされている場合は、API集約装置24と、各API28b1,28b2,28b3との間で、リクエスト情報とレスポンス情報との遣り取りを複数回行うことができる。API28b2,28b3の2つがマッシュアップされている場合は、API28b1へアクセスし、次にAPI28b2,28b3へ纏めてアクセスすることが可能である。
蓄積部21bは、API情報を記憶して蓄積する。API情報は、図7(a)に示すような、エリア情報取得API28b1,カテゴリ情報取得API28b2,グルメ検索API28b3毎の、アプリID(identification)、APIID、リクエストパラメータ及びレスポンスパラメータ等を含む情報である。なお、エリア情報取得API28b1,カテゴリ情報取得API28b2,グルメ検索API28b3は、図2に示すAPI28b1,28b2,28b3に対応している。
アプリIDは、アプリ25a〜25m(図1参照)の固有情報である。APIIDは、各機能27a〜27cに繋がるAPI28a〜28p(図1参照)の固有情報である。リクエストパラメータは、アプリ25aによるリクエスト時における検索対象を検索するためのリクエスト項目としてのパラメータである。レスポンスパラメータは、リクエスト項目に応じて検索された情報であり、レスポンス情報に含まれる検索情報としてのパラメータである。
図4に戻って、計測部21cは、リクエスト情報の宛先API(例えば、API28b1,28b2,28b3)へのアクセス時に、宛先API28b1,28b2,28b3の実行時間としてのAPI実行時間を計測し、更に、API間実行時間、API実行順序、API実行順序実施回数、アプリ実行時間を計測する。これらを計測情報として、矢印Y14で示すようにAPI計測情報蓄積部21dへ出力する。図7(b)に計測情報であるAPI実行時間、API間実行時間、API実行順序、API実行順序実施回数、アプリ実行時間の例を示す。
API実行時間は、APIの機能を実行している時間であり、例えば、グルメ検索API28b3であれば、グルメに係るリクエストパラメータによる項目の情報を検索している時間である。図7(b)の例では、API28b1が0.14ms、API28b2が0.16ms、API28b3が3.01msである。
API間実行時間は、APIから他のAPIへの移行時間(API間の移行時間)であり、例えば、エリア情報取得API28b1からカテゴリ情報取得API28b2へ移行する際に掛かる時間である。図7(b)の例では、API28b1からAPI28b2への移行時間が0.03ms、API28b2からAPI28b3への移行時間が0.10msである。但し、API間実行時間の閾値をαとして事前に設定し、API28b2とAPI28b3のAPI間実行時間がαよりも小さければ、API28b2とAPI28b3は組合されて(マッシュアップされて)実行されていると判断することが可能となる。なお、閾値αは、API間の移行時間を多数回計測することにより統計的に得られる数値であってもよい。閾値αは、請求項記載の予め定められた時間である。
API実行順序は、各API28b1,28b2,28b3を実行する順序である。図7(b)の例では、API28b1、API28b2、API28b3の順序で移行するようになっている。
API実行順序実施回数は、API実行順序で各API28b1,28b2,28b3が実行した回数を示す。これは、全てのAPI28b1,28b2,28b3がその順序で実行した場合に、1回とカウントされる。
アプリ実行時間は、1つのアプリ25aの実行時間である。
分析部21eは、計測部21cで計測された計測情報を分析し、図8(a)に一例を示すAPI独立実行回数、API組合せ実行回数、組合せAPIの分析情報を生成し、この分析情報を図4に示す矢印Y15で示す信号により、API計測情報蓄積部21dに記憶して蓄積する。
但し、分析部21eは、計測情報の分析量が膨大になると最新の分析結果を取得できなくなるため、事前に設定された計測情報の分析を閾値を用いて絞り込んでもよい。また、同一アプリからのリクエストの連続実行のみであれば分析しなくてもよい。更に、実行するアプリ数が少なくても、リクエストの実行回数が多い場合には、その実行回数を利用することで、スマホ等の端末機のCPU(Central Processing Unit)リソースの有効活用を図ることができる。なお、分析情報は、蓄積部21bのAPI情報と共に、ポータル機能部22で開発者がAPIリストとして閲覧することが可能となっている。
上述したAPI独立実行回数は、各API28が独立して処理を実行した場合の回数である。このAPI独立実行回数は、各API28b1,28b2,28b3のAPI間実行時間{図7(b)}が長ければ、各API28b1,28b2,28b3が独立して処理を実行したと判断して、各実行をカウントする。なお、API独立実行回数は、信号中継時間が所定の閾値以上の場合は、インクリメントされるようにしてもよい。
図8(a)の例のように、API28b1が12回、API28b2が11回、API28b3が0回の場合、API28b1,28b2は独立で叩かれているが、API28b3は0回なので独立では叩かれないことが分かる。このAPI28b3は、マッシュアップされていることが分かる。ここで、API実行順序{図7(b)}を見て、API28b2の後にAPI28b3にアクセスされ、この際のAPI28b2とAPI28b3とのAPI間実行時間が短ければ、API28b2とAPI28b3がマッシュアップされていることが分かる。
API組合せ実行回数は、他の何れかのAPIと組合されて処理を実行した際の回数を表す。図8(a)の例では、3つのAPI28b1,28b2,28b3ともに、225回、210回、564回とAPI組合せ実行回数が非常に多いので、3つのAPI28b1,28b2,28b3をマッシュアップしてもよいことが分かる。例えば、API28b1は、異なるアプリケーション(25a〜25mの何れか1つ又は複数)から実行されたものを纏めてカウントしてもよい。
組合せAPIは、自APIに組合された他のAPI28を表す情報である。
図4に示すイネーブラ27bは、リクエスト情報に応じたレスポンス情報を、API28b1,28b2,28b3(図1参照)を介して、矢印Y16で示す信号により、送信部21fへ送信する。
送信部21fは、イネーブラ27bからAPI28b1,28b2,28b3を介して送られて来るレスポンス情報を、矢印Y17で示す信号により、蓄積部21bに保存すると共に、矢印Y18で示す信号により、アプリ25aへ送信する。
粒度判断部21gは、矢印19で示す信号により、蓄積部21dに蓄積された分析情報を取得し、複数のAPI28b1,28b2,28b3をマッシュアップ可能か否かの判断を行うと共に、マッシュアップ時等の適切なAPI粒度(後述)を判断するものである。この判断結果の情報は、矢印Y20で示す信号により、粒度変換部21hへ出力される。
粒度判断部21gは、API独立実行回数が小さく、且つAPI組合せ実行回数が大きい条件に当て嵌まるAPI28を、マッシュアップ可能と判断する。このため、粒度判断部21gは、予めAPI独立実行回数の閾値をβ、API組合せ実行回数の閾値をγとして持っており、蓄積部21dから取得した分析情報のAPI独立実行回数が閾値βより小さく、API組合せ実行回数の閾値γより大きい場合は、この条件に当て嵌まるAPIがマッシュアップ可能と判断する。なお、閾値β又はγは、API独立実行回数又はAPI組合せ実行回数を多数回計測することにより統計的に得られる数値であってもよい。閾値βは請求項記載の第1回数、閾値γは請求項記載の第2回数である。
次に、粒度判断部21gは、リクエスト情報及びレスポンス情報からAPI粒度(単に、粒度ともいう)を判断する。API粒度を判断する場合、次の3つがある。
1つ目は、マッシュアップするAPI28の数から粒度を判断する。この場合、API28の数が予め定められた閾値未満であれば、粒度が粗いと判断し、閾値以上であれば粒度が細かいと判断する。
2つ目は、リクエスト情報及びレスポンス情報の各情報からAPI粒度を判断する。これは、図5(a)に示すリクエスト情報の場合、メソッドの個数、ヘッダ情報の個数、認証情報の個数の各々が、予め定められた閾値未満であれば、粒度が粗いと判断し、閾値以上であれば粒度が細かいと判断する。また、URIの長さが、所定の閾値未満であれば、粒度が粗いと判断し、閾値以上であれば粒度が細かいと判断する。更に、データ形式の許容している形式が、所定の形式であれば、粒度が粗いと判断し、所定の形式で無ければ粒度が細かいと判断する。同様に、図5(b)に示すレスポンス情報においても粒度を判断する。但し、レスポンス情報においては、図5(b)の構成例では、リクエスト情報のメソッドの個数ではなく、ステータスコードの個数となり、また、リクエスト情報のURI、認証情報が存在しない。
3つ目は、リクエスト情報及びレスポンス情報の各パラメータからAPI粒度を判断する。この場合は、図8(b)に示すような、所望のレスポンスパラメータの数が得られるリクエストパラメータの数が、API粒度となる。従って、リクエストパラメータ又はレスポンスパラメータの個数の各々が、予め定められた閾値k未満であれば、粒度が粗いと判断し、閾値k以上であれば粒度が細かいと判断する。なお、閾値kは、リクエストパラメータ又はレスポンスパラメータの個数を多数回取得することにより統計的に得られる数値であってもよい。閾値kは、請求項記載の予め定められた数値である。
図4に戻り、粒度変換部21hは、複数のAPIをマッシュアップしたり、APIの粒度を粗く又は細かくする粒度変換を行うためのシナリオが記載されたシナリオ情報を保持している。なお、シナリオ情報には、粒度を変えないとするシナリオも記載されている。粒度変換部21hは、そのシナリオ情報に従って、マッシュアップ及び粒度変換を行う。また、粒度変換は、粒度判断部21gがマッシュアップ不可能と判断した場合でも、必要に応じて実施されるようになっている。
即ち、粒度変換部21hは、粒度判断部21gでマッシュアップ可能と判断された際に、シナリオ情報に従って、マッシュアップ対象の複数のAPIをマッシュアップする。このマッシュアップされたAPIを、マッシュアップAPIという。この際に、粒度変換部21hで粒度が粗いと判断されていれば、シナリオ情報に従って、マッシュアップAPIの粒度としての例えばリクエストパラメータ数を少なくする。一方、粒度変換部21hで粒度が細かいと判断されていれば、シナリオ情報に従って、リクエストパラメータ数を多くする。
つまり、粒度判断部21gで、アプリ25aが所望のレスポンス情報を取得するためのリクエスト情報におけるリクエスト項目の数が少ないほどに粗くなり、多いほどに細かくなる粒度を判断し、粒度変換部21hが、その判断された粒度に対応するリクエスト項目を、マッシュアップされたAPIに対応付ける処理が行われる。
また、粒度変換部21hは、シナリオ情報に従ってマッシュアップする場合、先行側のAPIのレスポンス情報と、後続側のAPIのリクエスト情報とを紐付けて、マッシュアップAPIとする。なお、このマッシュアップ後も、マッシュアップする前のAPIは、必要に応じてAPI集約装置24を介して繋がるようにしてもよい。紐付けには、マッシュアップ対象の複数のAPIのレスポンス情報とリクエスト情報とを1対1で紐付ける場合や、n対1(又は1対n)で紐付ける場合、n対m(又はm対n)で紐付ける場合等、様々なパターンの紐付けが有る。このような紐付けも、シナリオ情報に記載されている。
例えばマッシュアップ対象の3つのAPIがある場合、第1APIのレスポンス情報と第3APIのリクエスト情報とを1対1で紐付けるパターンがある。また、第1及び第2APIの各レスポンス情報と、第3APIのリクエスト情報とを2対1で紐付けるパターンがある。
粒度変換部21hは、上述したマッシュアップAPI及びAPI粒度の情報に、API識別情報としてのAPIID等を付与してAPI情報を作成し、このAPI情報を矢印Y21で示す信号により、蓄積部21bに蓄積する。
情報作成部21iは、蓄積部21bに蓄積されたマッシュアップAPIやAPI粒度を含むAPI情報を矢印Y22で示す信号により取得し、更に、矢印Y23で示す信号により、ポータル機能部22へ登録する。この登録されたAPI情報は、APIドキュメントとしてのポータル機能部22のAPIリファレンス機能等に反映される。
アプリ開発者30は、矢印Y24で示す信号により、ポータル機能部22に登録されたAPIドキュメントを閲覧してAPI粒度を選択し、マッシュアップAPIを利用することができる。
<実施形態の動作>
次に、本実施形態に係るAPI集約装置24によるマッシュアップ及びAPI粒度変換の動作を、図9に示すフローチャートと、図10に示す通信システム20Aの構成図を参照して説明する。
但し、図10に示すグルメ検索機能27bに繋がる各API28b1,28b2,28b3は、図7及び図8に示すエリア情報取得API28b1,カテゴリ情報取得API28b2,グルメ検索API28b3に対応している。
図7(a)に示すように、エリア情報取得API28b1及びカテゴリ情報取得API28b2のリクエストパラメータは存在しない。このため、アプリ25aから各API28b1,API28b2には、パラメータを含まないリクエスト情報が送信されるようになっている。また、API28b1のAPIIDは[api−0001]、API28b2のAPIIDは[api−0002]、API28b3のAPIIDは[api−0003]である。更に、アプリ25aのアプリIDは[app−0001]である。
まず、図10に、アプリ25aと各API26a〜26eとの間の双方向矢印と、API集約装置24と各API28b1〜28b3を介したグルメ検索機能27bとの間の双方向矢印とで示すように、リクエスト情報とレスポンス情報とが送受信されているとする。この際、リクエスト情報及びレスポンス情報の送受信の順番は、図7(b)のAPI実行順序に示すように、API28b1,28b2,28b3の順であるとする。
この場合、リクエスト情報に応じてAPI28b1から返信されるレスポンスパラメータは、図7(a)に示すように、「エリアコード」「エリア名称」「都道府県コード」「都道府県名」の4つであるとする。また、API28b2から返信されるレスポンスパラメータは、「カテゴリーコード」「カテゴリー名」の2つであるとする。これらレスポンスパラメータは、API集約装置24の蓄積部21bに保持される。
この保持されたレスポンスパラメータの内、「都道府県コード」と「カテゴリーコード」は、図7(a)に示すように、3番目のAPI28b3のリクエストパラメータとして、「ソート」「検索ワード」に横並びに付加されるようになっている。これは、上述したように、1番目と2番目のAPI28b1,28b2の各レスポンス情報が、3番目のAPI28b3のリクエスト情報に紐付けられていることによる。つまり、リクエストパラメータは、「都道府県コード」「カテゴリーコード」「ソート」「検索ワード」の4つである。
このような条件下において、図9に示すステップS1において、アプリ25aからリクエスト情報が宛先のAPI28b3及びグルメ検索機能27bへ向けて送信されたとする。この際、リクエスト情報は、まず、API26aを介してAPI集約装置24へ送信される。
ステップS2において、リクエスト情報は、API集約装置24の取得部21aで取得され、図10[1]で示すように蓄積部21bに記憶される。また、リクエスト情報は、取得部21aから計測部21cへ出力される。
ステップS3において、計測部21cは、リクエスト情報の宛先API(例えば、API28b1,28b2,28b3)へのアクセス時に、宛先API28b1,28b2,28b3の実行時間としてのAPI実行時間を計測{図10[2]}し、更に、API間実行時間、API実行順序、API実行順序実施回数、アプリ実行時間を計測{図10[2]}する。この計測された各時間等は、図7(b)に示す通りである。
ステップS4において、計測部21cは、その計測されたAPI実行時間、API間実行時間、API実行順序、API実行順序実施回数、アプリ実行時間による計測情報を、図10[3]で示すように蓄積部21dに蓄積(保存)する。
ステップS5において、分析部21eは、計測部21cで計測された計測情報を分析{図10[4]}し、図8(a)に一例を示すAPI独立実行回数、API組合せ実行回数、組合せAPIの分析情報を生成し、この分析情報を図10[5]で示すように、蓄積部21dに蓄積(保存)する。
次に、ステップS6において、粒度判断部21gは、図10[6]で示すように、蓄積部21dに蓄積された分析情報を取得し、複数のAPI28b1,28b2,28b3をマッシュアップ可能か否かの判断を行う。この判断は、3つのAPI28b1,28b2,28b3のAPI独立実行回数が閾値β(例えば、20回)より小さく、API組合せ実行回数の閾値γ(例えば、100回)より大きい条件に当て嵌まる場合にマッシュアップ可能と判断する。条件に当て嵌まらない場合は、マッシュアップ不可能と判断する。
この結果、マッシュアップ不可能(No)であれば、ステップS9おいて、マッシュアップ不可能なことを示す情報が、図10[7]及び[8]で示すように、粒度変換部21hを介して蓄積部21bに蓄積される。
一方、上記ステップS6の判断結果、マッシュアップ可能(Yes)であれば、ステップS7において、粒度判断部21gは、マッシュアップ時のAPI粒度が粗いか、細かいかを判断して何れかの情報を求める。その判断は、3つのAPI28b1,28b2,28b3をマッシュアップした際に必要なリクエストパラメータの数(リクエスト項目の数)が、予め定められた閾値k(例えば、「3」)よりも少ない場合は粒度が粗い、閾値k以上の場合は粒度が細かいと判断する。
ここで、必要なレスポンスパラメータが図7(a)のAPI28b3の欄に示す「店舗名」「店舗URL」「住所」「電話番号」であるとすると、このパラメータを取得するために必要なリクエストパラメータは、「都道府県コード」「カテゴリーコード」「ソート」「検索ワード」の4つである。このリクエストパラメータは、3番目のAPI28b3のものであり、これは、上述したように、1番目と2番目のAPI28b1,28b2の各レスポンス情報が、3番目のAPI28b3のリクエスト情報に紐付けられることにより生成{図10[7]}される。
即ち、1番目と2番目のAPI28b1,28b2のレスポンスパラメータの「都道府県コード」と「カテゴリーコード」が、3番目のAPI28b3のリクエストパラメータとして、「ソート」「検索ワード」に横並びに付加されることにより生成{図10[7]}される。
このことから、3つのAPI28b1,28b2,28b3を1つにマッシュアップした際に必要なリクエストパラメータは、図8(b)に示すように、所望のレスポンスパラメータ「店舗名」「店舗URL」「住所」「電話番号」を得るためのレスポンスパラメータの「ソート」「検索ワード」の2つである。この場合、上記ステップS7の判断では、閾値k「3」よりも少ないので粒度が粗いと判断されて、粒度が粗いことを示す情報が得られる。なお、閾値k「3」以上の場合は、粒度が細かいと判断されるが、ここでは粗いと判断されたとする。
次に、ステップS8において、粒度変換部21hは、シナリオ情報に従ってマッシュアップ及び粒度変換を次のように行う。
即ち、粒度変換部21hは、粒度判断部21gでマッシュアップ可能と判断された際に、シナリオ情報に従って、マッシュアップ対象の3つのAPI28b1,28b2,28b3を1つにマッシュアップする。これをマッシュアップAPIとする。この際、粒度変換部21hは、更にシナリオ情報に従って、API28b1,28b2,28b3の順に実行されるようにマッシュアップする。また、1番目と2番目のAPI28b1,28b2のレスポンス情報を、3番目のAPI28b3のリクエスト情報に紐付けて、マッシュアップAPIとする。
更に、粒度変換部21hは、粒度変換部21hで粒度が粗いと求められているので、シナリオ情報に従って、マッシュアップAPIの粗い粒度としての例えばリクエストパラメータ数を閾値k「3」よりも少ない「ソート」「検索ワード」の2つとする。
次に、ステップS9において、粒度変換部21hは、上記ステップS8で得たマッシュアップAPI及びAPI粒度の情報に、API識別情報としてのAPIID[api−0001][api−0002][api−0003]を付与してAPI情報を作成する。このAPI情報を蓄積部21bに蓄積{図10[8]}する。
これによって、3つのAPI28b1,28b2,28b3はマッシュアップされて、図3に示したように、1つのマッシュアップAPI28b3となる。この場合、アプリ25aから図8(b)に示すリクエストパラメータ「ソート」「検索ワード」を、API26b、API集約装置24を介してAPI28b3へ送信する。このAPI28b3に繋がるグルメ検索機能27bがレスポンス情報として、図8(b)に示すレスポンスパラメータ「店舗名」「店舗URL」「住所」「電話番号」を返信するので、アプリ25aは1回のレスポンス送信により、所望のレスポンス情報を得ることができる。
<実施形態の効果>
以上説明した本実施形態のAPI集約装置24は、通信システム20において、アプリケーションとグルメ検索機能27bとの間に複数のAPI28b1,28b2,28b3を介して接続されている。通信システム20は、所定の目的を少なくとも通信を行って実現する例えばグルメ検索機能27bに繋がるAPIを複数組合せたアプリケーション25aが、所望の情報を取得するためのリクエスト情報をAPIを介してグルメ検索機能27bへ送信する。この送信されたリクエスト情報を受信したグルメ検索機能27bがリクエスト情報に応じたレスポンス情報を、APIを介してアプリケーションへ返信する。
本実施形態の特徴は、API集約装置24のAPI処理機能部21が、グルメ検索機能27bに繋がる複数のAPI28b1〜28b3を組合せるマッシュアップを行う際に、API28b1〜28b3がグルメ検索機能27bに対して行うリクエスト情報及びレスポンス情報の送受信中継の実行回数を計数する。更に、API集約装置24が、その計数された実行回数から、APIが独立で実行した独立実行回数と、APIが組合されて実行した組合せ実行回数を求める。そして、API集約装置24が、独立実行回数が予め定められた第1回数としての閾値βより小さく、且つ組合せ実行回数が予め定められた第2回数としての閾値γより大きい条件に当て嵌まるAPIを、マッシュアップするようにした。
これによって、API28b1〜28b3がグルメ検索機能27bに対して行うリクエスト情報及びレスポンス情報の送受信中継の実行回数を計数し、この実行回数から、API独立実行回数と、API組合せ実行回数を求め、これら回数を、予め定められた閾値β,γと比較することでマッシュアップすることを決定するようにした。予め設定した時間間隔で繰り返し判断をしてもよい。また、別に予め設定した時間間隔での閾値を用いてもよい。
APIが独立に実行されることはマッシュアップするには不適切と判断できる。また、APIが組合されて実行されることはマッシュアップに適していると判断できる。このことから、マッシュアップに、不適切なことを示す回数に応じて閾値βを設定し、適切なことを示す回数に応じて閾値γを設定すれば、マッシュアップに不適切なAPIを排除し、適切なAPIをマッシュアップすることが可能となる。従って、利用者の自己都合によりマッシュアップされることが無くなり、統計的に優位にマッシュアップすることが可能となる。このため、多くの利用者が効率良く利用可能なように、複数のAPI28b1〜28b3をマッシュアップすることができる。
また、API処理機能部21は、マッシュアップを行う際に、先行側の少なくとも1つのAPIのレスポンス情報と、後続側の少なくとも1つのAPIのリクエスト情報とを紐付けて、マッシュアップするようにした。
これによって、マッシュアップされたAPIの実行順序を規定することができる。また、最後に実行されるAPIのリクエスト情報に含まれる必要なリクエスト項目の設定を、当該APIの先行側の1又は複数のAPIのレスポンス情報から取得して設定可能となる。このため、最終的に必要なレスポンス情報が得られるような、リクエスト項目を設定することができる。
また、API処理機能部21は、アプリケーションが所望のレスポンス情報を取得するためのリクエスト情報におけるリクエスト項目の数が少ないほどに粗くなり、多いほどに細かくなる粒度を判断し、この判断された粒度に対応するリクエスト項目を、マッシュアップされたAPIに対応付けるようにした。
これによれば、粒度によって、マッシュアップされたAPIで最終的に必要とされるレスポンス情報を取得するためのリクエスト項目の数が判断され、マッシュアップAPIに対応付けられる。このため、マッシュアップAPIに、最終的に必要なレスポンス情報が得られるリクエスト項目を設定することが可能となる。
また、API処理機能部21は、リクエスト項目の数が、予め定められた数値よりも少ない場合は粒度が粗い、数値以上の場合は粒度が細かいと判断するようにした。
これによって、粒度の粗い、細かいの判断を、リクエスト項目の数と、統計的に得ることが可能な数値との比較により行うことができるので、適正に粒度を判断することができる。
また、API処理機能部21は、APIがグルメ検索機能27bに対して行う送受信中継の実行時間を計測し、1つのグルメ検索機能27bに繋がる複数のAPI28b1〜28b3の個々の実行時間が、予め定められた時間より短ければ、複数のAPIがマッシュアップされていると判断するようにした。
これによって、1つのグルメ検索機能27bに繋がる複数のAPI28b1〜28b3の個々の実行時間が予め定められた例えば極短時間の時間よりも短い場合、各API28b1〜28b3は独立には実行されていないと判断できる。このことから、複数のAPI28b1〜28b3がマッシュアップされているか否かを適正に判断することができる。
その他、具体的な構成について、本発明の主旨を逸脱しない範囲で適宜変更が可能である。