JP2004246434A - Api仮引数検査装置、api仮引数検査方法、api仮引数検査プログラム及びそのプログラムを記録した記録媒体 - Google Patents
Api仮引数検査装置、api仮引数検査方法、api仮引数検査プログラム及びそのプログラムを記録した記録媒体 Download PDFInfo
- Publication number
- JP2004246434A JP2004246434A JP2003033107A JP2003033107A JP2004246434A JP 2004246434 A JP2004246434 A JP 2004246434A JP 2003033107 A JP2003033107 A JP 2003033107A JP 2003033107 A JP2003033107 A JP 2003033107A JP 2004246434 A JP2004246434 A JP 2004246434A
- Authority
- JP
- Japan
- Prior art keywords
- api
- inspection
- program
- dummy argument
- providing program
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
【課題】本発明は、API提供プログラムで行われる仮引数検査を、API利用プログラムの変更なしに行うことができるようにすることを目的とする。
【解決手段】事前のAPI呼び出しにより検査の対象となることでAPI利用プログラムに伝達された1つ又は複数の仮引数検査を、API利用プログラムが記述するコードには出現しないプロキシ内で実施するという構成を採る。そして、プロキシで複数の仮引数検査を同時に行い、API利用プログラムに通知するという構成を採る。この構成に従って、API利用プログラムは、API呼び出しのロジックを変更することなくそのまま実行するだけでよく、API利用プログラムとAPI提供プログラムとの間のプロキシで仮引数の検査が実施されて、一度の呼び出しにより、仮引数の検査異常を全て受け取ることが可能になる。
【選択図】 図1
【解決手段】事前のAPI呼び出しにより検査の対象となることでAPI利用プログラムに伝達された1つ又は複数の仮引数検査を、API利用プログラムが記述するコードには出現しないプロキシ内で実施するという構成を採る。そして、プロキシで複数の仮引数検査を同時に行い、API利用プログラムに通知するという構成を採る。この構成に従って、API利用プログラムは、API呼び出しのロジックを変更することなくそのまま実行するだけでよく、API利用プログラムとAPI提供プログラムとの間のプロキシで仮引数の検査が実施されて、一度の呼び出しにより、仮引数の検査異常を全て受け取ることが可能になる。
【選択図】 図1
Description
【0001】
【発明の属する技術分野】
本発明は、APIを介して協調動作するプログラムを連携・管理する場合に、互換性を維持しながら、API提供プログラムに実装される仮引数の検査をAPI利用プログラムの側で動作させることを可能にするAPI仮引数検査装置及びその方法と、そのAPI仮引数検査方法の実現に用いられるAPI仮引数検査プログラム及びそのプログラムを記録した記録媒体とに関する。
【0002】
より詳細には、本発明は、協調動作するプログラム間で、仮引数の検査を行う位置をAPI提供プログラムからAPI利用プログラムの側に変更したとしても、API利用プログラムに修正を加えることなく、その変更が実施できることを可能にする技術に関する。
【0003】
【従来の技術】
インターネット時代のサービス開発において、開発時間を短縮するための方法として、サービス連携、Webサービスといった技術領域がある。また、EAI(Enterprise Application Integration)技術等も、既存システムを連携させてサービスを構築する方法である。
【0004】
本発明は、必要な機能を新規に作り込むことにより、既にその機能を有するシステムを繋ぐことで速やかにサービスを構築することを目的とし、既存サービスを連携させて高次の応用機能を実現する連携サービス機構の実現(例えば非特許文献1,2参照)に関わるものである。
【0005】
連携サービス機構上では複数のサービスが協調動作する。このような状況において、機能を提供するプログラムとそれを利用するプログラムとの間のインタフェースがAPI(Application Programming Interface)である。
【0006】
API提供プログラムは、ある提供機能を実装してAPIとして公開する。一方、API利用プログラムは、自らのアプリケーションロジックを実装する中で、そのAPIに基づいて、API提供プログラムの提供する機能を呼び出す。
【0007】
一つのAPIに対して、API提供プログラムは一般に複数存在し(例えば、複数の決済事業者が共通のAPIを実装する形式で決済機能をAPI利用プログラムに提供する)、API利用プログラムは、そのうちの一つを選択して呼び出しを行う。
【0008】
通常、API提供プログラムとAPI利用プログラムとの間で、APIを通してやり取りされる情報(仮引数)には、取り得る値の範囲や、仮引数間の関係に応じた制約条件があることが一般的である。また、これらの制約条件は、API提供プログラムの実装によって可変である。
【0009】
プログラムの開発プロセスにおいては、一般に、大小さまざまなレベルで仕様変更が発生する。この仕様変更のうち、仮引数の制約条件の変更は不可避な変更の一つである。
【0010】
API提供プログラムが行う上記の制約条件の検査(以下、仮引数検査と称する)をAPI利用プログラムで実施する場合、従来の技術では、API利用プログラム内に、同一の検査を実施するプログラムを埋め込む方式がとられていた(例えば、特許文献1参照)。
【0011】
このような従来技術に従う場合、API提供プログラムが仮引数検査の内容を変更した場合や、新しくAPI提供プログラムの実装が増えた場合に、対応する仮引数検査を実施するために、API利用プログラムの修正が必須であった。
【0012】
また、従来の仮引数検査の技術では、複数の仮引数検査のうちで一つ異常が見つかれば、異常として、API利用プログラムに返却していることから、複数の仮引数検査で異常となる仮引数については、一度の検査異常の通知では、異常な仮引数を全て修正できないという問題点があった。
【0013】
【非特許文献1】
「プラットフォーム連携によるAP開発手法の提案」,日野隆一,堀川桂太郎,電子情報通信学会,2002年3月22日発行, 電子情報通信学会技術研究報告,KBSE2001−72,pp.57−64
【非特許文献2】
「システム間の連携I/Fとその拡張による影響の考察」,堀川桂太郎,日野隆一,電子情報通信学会,2002年12月12日発行, 電子情報通信学会技術研究報告,Vol.102,No.503,pp.7−12
【特許文献1】
特開平7−281880号公報
【0014】
【発明が解決しようとする課題】
一般に、API利用プログラムとAPI提供プログラムとはネットワークを介して接続されるため、API提供プログラムで仮引数検査を行うことは、検査に不合格する場合において、API利用プログラムでその検査を行うことに比較して、ネットワーク通信の分だけコストがかかることになる。
【0015】
一方、API利用プログラムで、API提供プログラムが行うものと同様の検査を行うことで、API提供プログラムの検査に必ず合格するように作り込んだ場合にあっても、前述の通り、API提供プログラムの仮引数検査の変更があると、API利用プログラムを変更しなければならない。
【0016】
そこで、本発明は、仮引数の検査の新規実装・変更に際し、API利用プログラムにおいてプログラムコードの修正を不要とし、さらに、可能な限り、必要となる全ての仮引数検査をAPI利用プログラムの側で実施できるようにする新たな技術の提供を目的とする。
【0017】
そして、本発明は、複数の仮引数検査を有するAPI提供プログラムが、一度の検査異常の通知で、仮引数検査に関わる全ての検査異常を通知できるようにする新たな技術の提供を目的とする。
【0018】
【課題を解決するための手段】
この目的を達成するために、本発明のAPI仮引数検査装置は、APIを介して協調動作するAPI提供プログラムとAPI利用プログラムとの間に設けられて、API提供プログラムにより実行される仮引数の検査を実行する処理を行うために、▲1▼API提供プログラムを呼び出す際の返却情報に従って、API提供プログラムで仮引数の検査異常となる1つ又は複数の検査機能の情報と対象となる仮引数の位置の情報とを取得する取得手段と、▲2▼その呼び出しの際に指定されるメソッドオブジェクトに対応付ける形で、取得手段の取得した情報を管理する管理手段に対して、取得手段の取得した情報を登録する登録手段と、▲3▼API利用プログラムによりAPI提供プログラムの呼び出しが発行されるときに、その呼び出しで指定されるメソッドオブジェクトが管理手段に登録されている場合には、管理手段の管理情報に従って仮引数の検査を行い、その検査に合格した場合にはAPI提供プログラムを呼び出し、その検査に合格しない場合にはAPI利用プログラムに検査例外を通知する検査手段と、▲4▼API利用プログラムによりAPI提供プログラムの呼び出しが発行されるときに、その呼び出しで指定されるメソッドオブジェクトが管理手段に登録されているのか否かを判断する判断手段とを備えるように構成する。
【0019】
以上の各処理手段が動作することで実現される本発明のAPI仮引数検査方法はコンピュータプログラムで実現できるものであり、このコンピュータプログラムは、半導体メモリなどのような適当な記録媒体に記録して提供したり、ネットワークを介して提供することができる。
【0020】
このように構成される本発明のAPI仮引数検査装置では、API利用プログラムによりAPI提供プログラムの呼び出しが発行されると、判断手段は、その呼び出しで指定されるメソッドオブジェクトが管理手段に登録されているのか否かを判断する。
【0021】
この判断結果を受けて、取得手段は、API提供プログラムの呼び出しで指定されるメソッドオブジェクトが管理手段に登録されていない場合には、API提供プログラムを呼び出してその返却情報を受け取ることで、API提供プログラムで仮引数の検査異常となる1つ又は複数の検査機能の情報と対象となる仮引数の位置の情報とを取得する。
【0022】
この取得手段による取得処理を受けて、登録手段は、管理手段に対して、その呼び出しの際に指定されるメソッドオブジェクトに対応付ける形で、取得手段の取得した情報を登録する。
【0023】
このようにして、管理手段には、API提供プログラムの呼び出しの際に指定されるメソッドオブジェクトに対応付ける形で、API提供プログラムで仮引数の検査異常となる1つ又は複数の検査機能の情報と対象となる仮引数の位置の情報とが管理されることになる。
【0024】
これから、API利用プログラムによりAPI提供プログラムの呼び出しが発行されるときに、その呼び出しで、前回仮引数の検査に失敗したメソッドオブジェクトが指定される場合には、判断手段は、そのメソッドオブジェクトが管理手段に登録されていることを判断することになり、これを受けて、検査手段は、管理手段の管理情報に従って仮引数の検査を行い、その検査に合格した場合にはAPI提供プログラムを呼び出し、その検査に合格しない場合にはAPI利用プログラムに検査例外を通知する。
【0025】
このようにして、本発明のAPI仮引数検査装置によれば、API提供プログラムで行われる仮引数検査を、API利用プログラムの変更なしに、API利用プログラムの側で行うことが可能になるのである。
【0026】
次に、図1を参照しつつ、本発明について更に詳細に説明する。
【0027】
ここで、図中、10はAPI提供プログラム、20はAPI利用プログラム、30は本発明のAPI仮引数検査装置を実現するプロキシである。
【0028】
API提供プログラム10とAPI利用プログラム20とがネットワークで接続される場合には、ネットワーク通信のコストの削減を図るために、プロキシ30は、図2に示すように、API利用プログラム20と同一のコンピュータ上に展開されることが好ましい。
【0029】
本発明では、API提供プログラム10で検査異常となる仮引数の検査機能をAPI利用プログラム20に伝達するという構成を採るものであり、具体的には、事前のAPI呼び出しにより検査の対象となることでAPI利用プログラム20に伝達された1つ又は複数の仮引数検査を、API利用プログラム20が記述するコードには出現しないプロキシ30内で実施するという構成を採る。
【0030】
そして、本発明では、複数の仮引数検査が必要な場合、プロキシ30で複数の仮引数検査を同時に行い、API利用プログラム20に通知するという構成を採る。
【0031】
この構成に従って、本発明によれば、API利用プログラム20は、API呼び出しのロジックを変更することなくそのまま実行するだけでよく、API利用プログラム20とAPI提供プログラム10との間のプロキシ30で仮引数の検査が実施されて、一度の呼び出しにより、仮引数の検査異常を全て受け取ることが可能になる。
【0032】
図1に示すように、本発明を実現すべく用意されるプロキシ30は、事前検査機構300と検査機能管理機構301とを備える。
【0033】
この検査機能管理機構301は、API利用プログラム20の側で仮引数の検査を実施するために、仮引数の検査例外を発生したMethodオブジェクトと、その検査内容を実装した1つ又は複数の検査機能の情報(検査例外を発生した仮引数の位置情報を含む)とを対応付けて管理する。
【0034】
一方、事前検査機構300は、API利用プログラム20とAPI提供プログラム10との間に挿入され、実行時に、API提供プログラム10から受け取った仮引数の検査例外を検知して、検査機能管理機構301に対して、その検査例外に付加される1つ又は複数の検査機能の情報(検査例外を発生した仮引数の位置情報を含む)の登録を依頼する。
【0035】
この依頼を受けて、検査機能管理機構301は、図中に示す検査機能登録部を使って、呼び出されたMethodオブジェクトに対応付けて、その登録依頼を受けた1つ又は複数の検査機能の情報を登録することで、仮引数の検査例外を発生したMethodオブジェクトと、その検査内容を実装した1つ又は複数の検査機能の情報とを対応付けて管理することになる。
【0036】
また、事前検査機構300は、API呼び出し時に、API提供プログラム10に処理実施を依頼する前に、検査機能管理機構301に対して、該当するMethodオブジェクトに対応付けられたメソッドに対する1つ又は複数の検査機能の実行を依頼する。
【0037】
この依頼を受けて、検査機能管理機構301は、図中に示す検査機能実行部を使って、該当するMethodオブジェクトに対応付けられた1つ又は複数の検査機能の各要素に対して、その検査機能の実行を行う。
【0038】
プロキシ30で実行される検査機能は、Interface で規定された特定のメソッドを伴うオブジェクトであり、本メソッドが起動されると、仮引数に対して、検査機能の実装に従って検査を実施する。例えば、Interface で規定された“Checker#check(Object[] checked) ”というメソッドが起動されると、仮引数checked に対して、検査機能の実装に従って検査を実施することになる。
【0039】
検査機能管理機構301は、数学でいう射の実装(具体的な例では、Java API(Java は登録商標)におけるMapインタフェースを実装したクラスであるjava.util.Hashtable)などで実現し、射のドメインとして、API提供プログラム10のMethodオブジェクトの集合をとり、コドメインとして、検査機能と検査の対象となる仮引数位置の情報という二項組の集まり(以下、単に検査機能リストと称する)の集合をとる。Java APIのMapインタフェースにより具体的に説明すると、Methodオブジェクトをキーにして、検査機能リストを管理することになる。
【0040】
検査機能管理機構301は、事前検査機構300からのMethodオブジェクトの仮引数検査の依頼に基づいて、図中に示す検査機能実行部を使って、そのMethodオブジェクトをキーにして検査機能リストを検索し、その結果、キーに対応する値が空(null)である場合、すなわち検査機能リストを検索できない場合には、事前検査機構300へ正常復帰する。一方、検査機能リストを検索できた場合には、その各々に対して、検査対象の仮引数位置として指定された値を仮引数から取得し、検査機能に対して、Check(...)メソッドを実行する。検査の結果が正常の場合には、事前検査機構300へ正常復帰し、異常の場合には、事前検査機構300へ検査例外を送出する。
【0041】
これを受けて、事前検査機構300は、検査機能管理機構301から正常復帰した場合には、API提供プログラム10をそのまま実行して、その結果をAPI利用プログラム20に返し、検査機能管理機構301から検査例外が送出された場合には、その検査例外をAPI利用プログラム20に送出する。
【0042】
API提供プログラム10は、処理を実施する前に、APIの境界条件に基づいて仮引数の検査を行い、その値に異常がある場合には、検査例外としてプロキシ30に返却する。このとき返却する検査例外には、検査異常の対象となった仮引数の位置と、検査に利用した検査機能への参照あるいは実体とが渡される。上述したように、この検査例外で渡された情報が検査機能管理機構301で管理されることになるのである。
【0043】
このように構成されるときにあって、図中に示す検査機能管理機構301の検査機能登録部では、同一のMethodオブジェクトに対して、異なる仮引数検査の管理依頼があるときには、該当するMethodオブジェクトに対応付けられる検査機能リストに、その管理依頼の仮引数検査を追加登録する。
【0044】
また、図中に示す検査機能管理機構301の検査機能削除部では、Methodオブジェクトの仮引数検査の削除依頼に対して、該当するMethodオブジェクトに対応付けられる検査機能リストから、その削除依頼の仮引数検査のみを削除する。
【0045】
また、図中に示す検査機能管理機構301の検査機能永続部では、API利用プログラム20の停止・再起動時間の状況下においても射で管理する情報を保持するために、射を復元可能なデータ形式に出力する機能と、そのデータ形式を射に復元する機能とを有する。
【0046】
【発明の実施の形態】
以下、実施の形態に従って本発明を詳細に説明する。
【0047】
図3及び図4に、API利用プログラム20/事前検査機構300/検査機能管理機構301/API提供プログラム10の間の処理の流れについて記述するタイムチャートの一例を図示する。
【0048】
ここで、このタイムチャートでは、API提供プログラム10のString test(String,String)メソッドにおいて、checker1とchecker2で表される検査機能が実行される場合を想定している。また、以下の説明では、Java 言語を想定して説明を行う。
【0049】
(1)1回目の呼び出し(図3のタイムチャート)
先ず最初に、API利用プログラム20は、ファクトリパターンにおける標準的な手続き(図中に示すcreate())を利用して、API提供プログラム10へアクセスするためのオブジェクトを、API提供プログラム10から取得する。
【0050】
このとき、API提供プログラム10は、API利用プログラム20において事前検査を代行する機能を具備したオブジェクトであるところの事前検査機構300のインスタンスを、事前検査機構300から取得して、API利用プログラム20に返却する。
【0051】
続いて、API利用プログラム20は、取得した事前検査機構300に対して、testメソッド(”test1”,”test2” という2つの仮引数を指定する)の起動を試みる。この手続きがAPI提供プログラム10を直接呼び出す場合と同一の処理になることが、本発明における一つの特徴である。
【0052】
このtestメソッドの起動を受けて、事前検査機構300は、呼び出されたtestメソッドとその仮引数(”test1”,”test2”)とを検査機能管理機構301に引き渡して、仮引数の検査を依頼する。
【0053】
初回の起動においては、検査機能管理機構301にはtestメソッドに対する検査機能の登録がないために、検査機能管理機構301内で行う事前検査はないことで事前検査機構300に対して事前検査正常が返却され、これを受けて、事前検査機構300は、API提供プログラム10を呼び出す。
【0054】
API提供プログラム10は、testメソッドにおいて、checker1とchecker2で表される検査機能により仮引数の検査を行っており、このchecker1では、例えば、testメソッドの1番目の仮引数(配列のインデックス0により参照される)が特定の文字列(本例では”test1” を想定する)の場合、検査異常と判断する。
【0055】
API利用プログラム20から渡された1番目の仮引数は”test1” であることから、checker1により検査異常と判断される。
【0056】
これから、API提供プログラム10は、検査異常と判断された検査内容を表す検査機能(この例ではchecker1)と、検査の対象となったtestメソッドにおける仮引数の位置(この例では配列のインデックス0)との二項組を事前検査機構300へ返却する。
【0057】
この検査例外を受け取ると、事前検査機構300は、検査例外を発生したMethodオブジェクトとAPI提供プログラム10から受け取った検査例外の情報とを指定して、検査機能管理機構301の検査機能登録メソッドadd を呼び出すことで、検査機能管理機構301に対して、そのMethodオブジェクトをキーとする検査例外の情報の登録を依頼する。
【0058】
この登録依頼を受け取ると、検査機能管理機構301は、Mapインタフェースを実装したオブジェクトなど(このオブジェクトを検査機能管理オブジェクトと称する)に、Methodオブジェクトをキーにして、検査機能を保存し、処理を事前検査機構300へ移す。
【0059】
これを受けて、事前検査機構300は、API提供プログラム10から受け取った検査例外をAPI利用プログラム20に返却する。
【0060】
(2)2回目の呼び出し(図4のタイムチャート)
先ず最初に、API利用プログラム20は、ファクトリパターンにおける標準的な手続き(図中に示すcreate())を利用して、API提供プログラム10へアクセスするためのオブジェクトを、API提供プログラム10から取得する。
【0061】
このとき、API提供プログラム10は、API利用プログラム20において事前検査を代行する機能を具備したオブジェクトであるところの事前検査機構300のインスタンスを、事前検査機構300から取得して、API利用プログラム20に返却する。
【0062】
続いて、API利用プログラム20は、取得した事前検査機構300に対して、testメソッド(”test1”,”test2” という2つの仮引数を指定する)の起動を試みる。
【0063】
このtestメソッドの起動を受けて、事前検査機構300は、呼び出されたtestメソッドとその仮引数(”test1”,”test2”)とを検査機能管理機構301に引き渡して、仮引数の検査を依頼する。
【0064】
これを受けて、検査機能管理機構301は、引き渡されたtestメソッドが検査機能管理オブジェクトによって保存されていることを確認し、その値として、検査機能と対応する仮引数位置との二項組データを取り出す。本例では、管理されている検査機能はchecker1で、対象となる仮引数位置は配列のインデックス0(1番目の仮引数)であるので、その二項組データを取り出すことになる。
【0065】
続いて、検査機能管理機構301は、この取得した検査機能を、事前検査機構300から引き渡された仮引数に対して適用する。
【0066】
上述したように、checker1では、testメソッドの1番目の仮引数が特定の文字列(上述したように、本例では”test1” を想定している)の場合、検査異常と判断する。ここでは、API利用プログラム20から渡された1番目の仮引数は”test1” であることから、checker1により検査異常と判断される。
【0067】
これから、検査機能管理機構301は、検査異常と判断した検査内容を表す検査機能(この例ではchecker1)と、検査の対象となったtestメソッドにおける仮引数の位置(この例では配列のインデックス0)との二項組を、検査例外として、事前検査機構300へ返却する。
【0068】
この検査例外を受け取ると、事前検査機構300は、そのまま受け取った例外をAPI利用プログラム20へ返却する。
【0069】
このようにして、本発明によれば、API提供プログラム10で行われる仮引数検査を、API利用プログラム20の変更なしに、API利用プログラム20の側で行うことが可能になり、従来発生していたAPI利用プログラム20とAPI提供プログラム10との間の通信コストの削減が可能になる。
【0070】
そして、本発明によれば、複数の異常を含む仮引数に対して、1回のAPI呼び出しにより、全ての検査異常を通知することが可能になる。
【0071】
【実施例】
次に、Java 言語による具体的なプログラム例について説明する。
【0072】
(イ)API提供プログラム10の一実施例
図5に、API提供プログラム10の一実施例を図示する。
【0073】
ServerインタフェースはAPIを定義するものであり、本APIにおいては、test(String,String) メソッドを持つことを表す。
【0074】
ServerImp1は、前記のServerインタフェースを実装した具象クラスである。testメソッドの実装において、仮引数の検査を後述のCheckImpl1およびCheckImpl2を用いて行った後で、二つの仮引数を合成して返却する機能を実現している。
【0075】
また、本クラスのオブジェクトを生成するための機能をcreateメソッドで実現しており、その中で、後述の事前検査機構300を実装したCheckingProxy オブジェクトによって、ServerImplクラスのオブジェクトがラップされる。これにより、createメソッドを利用してオブジェクトを生成したAPI呼び出し部は、意識することなく、事前検査機構300の利用が可能となる。
【0076】
(ロ)API利用プログラム20の一実施例
図6に、API利用プログラム20の一実施例を図示する。
【0077】
Serverインタフェースを実装したオブジェクトを、ServerImpl#create() メソッドにより取得し、その取得したオブジェクトに対して、2度、testメソッドを、同一の検査で異常を引き起こす仮引数で呼び出している。本例においては、第1番目の仮引数の”test1” が検査異常を引き起こす仮引数である。
【0078】
(ハ)検査機能のインタフェースの一実施例
図7に、検査機能のインタフェースの一実施例を図示する。
【0079】
検査機能は、チェックを行うためのcheck メソッドと、check メソッドが引数するObject配列に代入されるべきオブジェクトのクラスのリストを取得するgetCheckedClassList メソッドとからなる。
【0080】
(ニ)基底クラスの一実施例
図8に、検査機能を実装する上で基底となるクラスの一実施例を図示する。
【0081】
どのような場合であっても必ず実施の必要がある以下の処理を、テンプレートパターンで実装する。
【0082】
すなわち、検査機能のcheck メソッドが呼び出されたときの仮引数の配列に格納されたオブジェクトのクラスが、検査機能が要求するクラスと一致しているかを検査する機能を、staticCheck メソッドにおいて実装する。また、staticCheck メソッドが正しく終了した場合に、本クラスにより抽象定義された後に、本抽象クラスに対する具象クラスがlocalCheckメソッドに、処理を委譲する実装を行う必要がある。
【0083】
(ホ)インタフェース定義の一実施例
図9に、検査異常時に、呼び出し側に対して報告される後述の検査例外に格納されることになる、利用した検査機能と対象となった仮引数位置とを格納する検査内容のインタフェース定義の一実施例と、その検査機能の一実施例とを図示する。
【0084】
具体的には、検査機能は、インスタンス変数checker によって管理され、checker の定義は、内部の匿名クラスとして定義されている。本例においては、第1番目の仮引数(配列の0番目)について、そのString値が「”test1” 」と等しい場合に、検査異常となるように実装されている。
【0085】
(ヘ)検査機能管理機構301の一実施例
図10及び図11に、検査機能管理機構301の一実施例を図示する。
【0086】
▲1▼check メソッドは、仮引数で指定されるMethodオブジェクトに対応付けて管理される検査機能リストに対して、その検査を全て実施し、検査異常を呼び出し元に報告する。
【0087】
▲2▼add メソッドは、検査例外と、その例外の契機となったMethodオブジェクトとを指定して、検査例外の内部に格納される検査機能の群を、Methodオブジェクトに対応付けられる検査機能リストに加える。また、事前に該当するMethodオブジェクトについて検査機能リストが登録がされていない場合は、新規に検査機能リストを作成した上で、登録する。
【0088】
▲3▼apply メソッドは、check メソッドに対するユーティリティとして機能し、その処理内容は以下の通りである。すなわち、検査機能リストと、検査対象であるMethodオブジェクトとを受け取り、検査機能リストの全ての要素(検査機能)に対して、指定される仮引数を利用して、検査機能による検査を実施し、検査異常がある場合においては、その全てを検査例外として報告する。
【0089】
(ト)事前検査機構300の一実施例
図12に、事前検査機構300の一実施例を図示する。
【0090】
Java.lang.reflect.InvocationHandler インタフェースのpublic Object invoke(Object proxy,Method m,Object[] args) を実装したメソッドの中で、事前検査機構300を呼び出し、正常復帰の場合には、API提供プログラム10を呼び出す実装を行う。また、API提供プログラム10からの復帰値が検査例外の場合には、対象となった検査機能の管理を検査機能管理機構301に依頼した上で、検査例外を呼び出し元であるAPI利用プログラム20に返却する。
【0091】
(チ)検査例外の一実施例
図13に、検査例外の一実施例を図示する。
【0092】
API提供プログラム10、あるいは、検査機能管理機構301内において、検査異常が発生した時に、検査に利用した検査機能と、対象となった仮引数の位置との二項組の集まりが格納される。
【0093】
具体的には、
▲1▼linkメソッドは、検査例外インスタンスの内部情報の統合を行う。
▲2▼getItemSize メソッドは、保持している検査機能と仮引数の位置との二項組の数を返却する。
▲3▼getCheckItemは、指定されたインデックスの検査機能と仮引数の位置との二項組を返却する。
【0094】
【発明の効果】
以上説明したように、本発明によれば、API提供プログラムで行われる仮引数検査を、API利用プログラムの変更なしに、API利用プログラムの側で行うことが可能になり、従来発生していたAPI利用プログラムとAPI提供プログラムとの間の通信コストの削減が可能になる。
【0095】
そして、本発明によれば、複数の異常を含む仮引数に対して、1回のAPI呼び出しにより、全ての検査異常を通知することが可能になる。
【図面の簡単な説明】
【図1】本発明のシステム構成を示す図である。
【図2】プロキシの配置形態を示す図である。
【図3】本発明におけるタイムチャートの一例を示す図である。
【図4】本発明におけるタイムチャートの一例を示す図である。
【図5】API提供プログラムの一実施例である。
【図6】API利用プログラムの一実施例である。
【図7】検査機能のインタフェースの一実施例である。
【図8】基底クラスの一実施例である。
【図9】インタフェース定義の一実施例である。
【図10】検査機能管理機構の一実施例である。
【図11】検査機能管理機構の一実施例である。
【図12】事前検査機構の一実施例である。
【図13】検査例外の一実施例である。
【符号の説明】
10 API提供プログラム
20 API利用プログラム
30 プロキシ
300 事前検査機構
301 検査機能管理機構
【発明の属する技術分野】
本発明は、APIを介して協調動作するプログラムを連携・管理する場合に、互換性を維持しながら、API提供プログラムに実装される仮引数の検査をAPI利用プログラムの側で動作させることを可能にするAPI仮引数検査装置及びその方法と、そのAPI仮引数検査方法の実現に用いられるAPI仮引数検査プログラム及びそのプログラムを記録した記録媒体とに関する。
【0002】
より詳細には、本発明は、協調動作するプログラム間で、仮引数の検査を行う位置をAPI提供プログラムからAPI利用プログラムの側に変更したとしても、API利用プログラムに修正を加えることなく、その変更が実施できることを可能にする技術に関する。
【0003】
【従来の技術】
インターネット時代のサービス開発において、開発時間を短縮するための方法として、サービス連携、Webサービスといった技術領域がある。また、EAI(Enterprise Application Integration)技術等も、既存システムを連携させてサービスを構築する方法である。
【0004】
本発明は、必要な機能を新規に作り込むことにより、既にその機能を有するシステムを繋ぐことで速やかにサービスを構築することを目的とし、既存サービスを連携させて高次の応用機能を実現する連携サービス機構の実現(例えば非特許文献1,2参照)に関わるものである。
【0005】
連携サービス機構上では複数のサービスが協調動作する。このような状況において、機能を提供するプログラムとそれを利用するプログラムとの間のインタフェースがAPI(Application Programming Interface)である。
【0006】
API提供プログラムは、ある提供機能を実装してAPIとして公開する。一方、API利用プログラムは、自らのアプリケーションロジックを実装する中で、そのAPIに基づいて、API提供プログラムの提供する機能を呼び出す。
【0007】
一つのAPIに対して、API提供プログラムは一般に複数存在し(例えば、複数の決済事業者が共通のAPIを実装する形式で決済機能をAPI利用プログラムに提供する)、API利用プログラムは、そのうちの一つを選択して呼び出しを行う。
【0008】
通常、API提供プログラムとAPI利用プログラムとの間で、APIを通してやり取りされる情報(仮引数)には、取り得る値の範囲や、仮引数間の関係に応じた制約条件があることが一般的である。また、これらの制約条件は、API提供プログラムの実装によって可変である。
【0009】
プログラムの開発プロセスにおいては、一般に、大小さまざまなレベルで仕様変更が発生する。この仕様変更のうち、仮引数の制約条件の変更は不可避な変更の一つである。
【0010】
API提供プログラムが行う上記の制約条件の検査(以下、仮引数検査と称する)をAPI利用プログラムで実施する場合、従来の技術では、API利用プログラム内に、同一の検査を実施するプログラムを埋め込む方式がとられていた(例えば、特許文献1参照)。
【0011】
このような従来技術に従う場合、API提供プログラムが仮引数検査の内容を変更した場合や、新しくAPI提供プログラムの実装が増えた場合に、対応する仮引数検査を実施するために、API利用プログラムの修正が必須であった。
【0012】
また、従来の仮引数検査の技術では、複数の仮引数検査のうちで一つ異常が見つかれば、異常として、API利用プログラムに返却していることから、複数の仮引数検査で異常となる仮引数については、一度の検査異常の通知では、異常な仮引数を全て修正できないという問題点があった。
【0013】
【非特許文献1】
「プラットフォーム連携によるAP開発手法の提案」,日野隆一,堀川桂太郎,電子情報通信学会,2002年3月22日発行, 電子情報通信学会技術研究報告,KBSE2001−72,pp.57−64
【非特許文献2】
「システム間の連携I/Fとその拡張による影響の考察」,堀川桂太郎,日野隆一,電子情報通信学会,2002年12月12日発行, 電子情報通信学会技術研究報告,Vol.102,No.503,pp.7−12
【特許文献1】
特開平7−281880号公報
【0014】
【発明が解決しようとする課題】
一般に、API利用プログラムとAPI提供プログラムとはネットワークを介して接続されるため、API提供プログラムで仮引数検査を行うことは、検査に不合格する場合において、API利用プログラムでその検査を行うことに比較して、ネットワーク通信の分だけコストがかかることになる。
【0015】
一方、API利用プログラムで、API提供プログラムが行うものと同様の検査を行うことで、API提供プログラムの検査に必ず合格するように作り込んだ場合にあっても、前述の通り、API提供プログラムの仮引数検査の変更があると、API利用プログラムを変更しなければならない。
【0016】
そこで、本発明は、仮引数の検査の新規実装・変更に際し、API利用プログラムにおいてプログラムコードの修正を不要とし、さらに、可能な限り、必要となる全ての仮引数検査をAPI利用プログラムの側で実施できるようにする新たな技術の提供を目的とする。
【0017】
そして、本発明は、複数の仮引数検査を有するAPI提供プログラムが、一度の検査異常の通知で、仮引数検査に関わる全ての検査異常を通知できるようにする新たな技術の提供を目的とする。
【0018】
【課題を解決するための手段】
この目的を達成するために、本発明のAPI仮引数検査装置は、APIを介して協調動作するAPI提供プログラムとAPI利用プログラムとの間に設けられて、API提供プログラムにより実行される仮引数の検査を実行する処理を行うために、▲1▼API提供プログラムを呼び出す際の返却情報に従って、API提供プログラムで仮引数の検査異常となる1つ又は複数の検査機能の情報と対象となる仮引数の位置の情報とを取得する取得手段と、▲2▼その呼び出しの際に指定されるメソッドオブジェクトに対応付ける形で、取得手段の取得した情報を管理する管理手段に対して、取得手段の取得した情報を登録する登録手段と、▲3▼API利用プログラムによりAPI提供プログラムの呼び出しが発行されるときに、その呼び出しで指定されるメソッドオブジェクトが管理手段に登録されている場合には、管理手段の管理情報に従って仮引数の検査を行い、その検査に合格した場合にはAPI提供プログラムを呼び出し、その検査に合格しない場合にはAPI利用プログラムに検査例外を通知する検査手段と、▲4▼API利用プログラムによりAPI提供プログラムの呼び出しが発行されるときに、その呼び出しで指定されるメソッドオブジェクトが管理手段に登録されているのか否かを判断する判断手段とを備えるように構成する。
【0019】
以上の各処理手段が動作することで実現される本発明のAPI仮引数検査方法はコンピュータプログラムで実現できるものであり、このコンピュータプログラムは、半導体メモリなどのような適当な記録媒体に記録して提供したり、ネットワークを介して提供することができる。
【0020】
このように構成される本発明のAPI仮引数検査装置では、API利用プログラムによりAPI提供プログラムの呼び出しが発行されると、判断手段は、その呼び出しで指定されるメソッドオブジェクトが管理手段に登録されているのか否かを判断する。
【0021】
この判断結果を受けて、取得手段は、API提供プログラムの呼び出しで指定されるメソッドオブジェクトが管理手段に登録されていない場合には、API提供プログラムを呼び出してその返却情報を受け取ることで、API提供プログラムで仮引数の検査異常となる1つ又は複数の検査機能の情報と対象となる仮引数の位置の情報とを取得する。
【0022】
この取得手段による取得処理を受けて、登録手段は、管理手段に対して、その呼び出しの際に指定されるメソッドオブジェクトに対応付ける形で、取得手段の取得した情報を登録する。
【0023】
このようにして、管理手段には、API提供プログラムの呼び出しの際に指定されるメソッドオブジェクトに対応付ける形で、API提供プログラムで仮引数の検査異常となる1つ又は複数の検査機能の情報と対象となる仮引数の位置の情報とが管理されることになる。
【0024】
これから、API利用プログラムによりAPI提供プログラムの呼び出しが発行されるときに、その呼び出しで、前回仮引数の検査に失敗したメソッドオブジェクトが指定される場合には、判断手段は、そのメソッドオブジェクトが管理手段に登録されていることを判断することになり、これを受けて、検査手段は、管理手段の管理情報に従って仮引数の検査を行い、その検査に合格した場合にはAPI提供プログラムを呼び出し、その検査に合格しない場合にはAPI利用プログラムに検査例外を通知する。
【0025】
このようにして、本発明のAPI仮引数検査装置によれば、API提供プログラムで行われる仮引数検査を、API利用プログラムの変更なしに、API利用プログラムの側で行うことが可能になるのである。
【0026】
次に、図1を参照しつつ、本発明について更に詳細に説明する。
【0027】
ここで、図中、10はAPI提供プログラム、20はAPI利用プログラム、30は本発明のAPI仮引数検査装置を実現するプロキシである。
【0028】
API提供プログラム10とAPI利用プログラム20とがネットワークで接続される場合には、ネットワーク通信のコストの削減を図るために、プロキシ30は、図2に示すように、API利用プログラム20と同一のコンピュータ上に展開されることが好ましい。
【0029】
本発明では、API提供プログラム10で検査異常となる仮引数の検査機能をAPI利用プログラム20に伝達するという構成を採るものであり、具体的には、事前のAPI呼び出しにより検査の対象となることでAPI利用プログラム20に伝達された1つ又は複数の仮引数検査を、API利用プログラム20が記述するコードには出現しないプロキシ30内で実施するという構成を採る。
【0030】
そして、本発明では、複数の仮引数検査が必要な場合、プロキシ30で複数の仮引数検査を同時に行い、API利用プログラム20に通知するという構成を採る。
【0031】
この構成に従って、本発明によれば、API利用プログラム20は、API呼び出しのロジックを変更することなくそのまま実行するだけでよく、API利用プログラム20とAPI提供プログラム10との間のプロキシ30で仮引数の検査が実施されて、一度の呼び出しにより、仮引数の検査異常を全て受け取ることが可能になる。
【0032】
図1に示すように、本発明を実現すべく用意されるプロキシ30は、事前検査機構300と検査機能管理機構301とを備える。
【0033】
この検査機能管理機構301は、API利用プログラム20の側で仮引数の検査を実施するために、仮引数の検査例外を発生したMethodオブジェクトと、その検査内容を実装した1つ又は複数の検査機能の情報(検査例外を発生した仮引数の位置情報を含む)とを対応付けて管理する。
【0034】
一方、事前検査機構300は、API利用プログラム20とAPI提供プログラム10との間に挿入され、実行時に、API提供プログラム10から受け取った仮引数の検査例外を検知して、検査機能管理機構301に対して、その検査例外に付加される1つ又は複数の検査機能の情報(検査例外を発生した仮引数の位置情報を含む)の登録を依頼する。
【0035】
この依頼を受けて、検査機能管理機構301は、図中に示す検査機能登録部を使って、呼び出されたMethodオブジェクトに対応付けて、その登録依頼を受けた1つ又は複数の検査機能の情報を登録することで、仮引数の検査例外を発生したMethodオブジェクトと、その検査内容を実装した1つ又は複数の検査機能の情報とを対応付けて管理することになる。
【0036】
また、事前検査機構300は、API呼び出し時に、API提供プログラム10に処理実施を依頼する前に、検査機能管理機構301に対して、該当するMethodオブジェクトに対応付けられたメソッドに対する1つ又は複数の検査機能の実行を依頼する。
【0037】
この依頼を受けて、検査機能管理機構301は、図中に示す検査機能実行部を使って、該当するMethodオブジェクトに対応付けられた1つ又は複数の検査機能の各要素に対して、その検査機能の実行を行う。
【0038】
プロキシ30で実行される検査機能は、Interface で規定された特定のメソッドを伴うオブジェクトであり、本メソッドが起動されると、仮引数に対して、検査機能の実装に従って検査を実施する。例えば、Interface で規定された“Checker#check(Object[] checked) ”というメソッドが起動されると、仮引数checked に対して、検査機能の実装に従って検査を実施することになる。
【0039】
検査機能管理機構301は、数学でいう射の実装(具体的な例では、Java API(Java は登録商標)におけるMapインタフェースを実装したクラスであるjava.util.Hashtable)などで実現し、射のドメインとして、API提供プログラム10のMethodオブジェクトの集合をとり、コドメインとして、検査機能と検査の対象となる仮引数位置の情報という二項組の集まり(以下、単に検査機能リストと称する)の集合をとる。Java APIのMapインタフェースにより具体的に説明すると、Methodオブジェクトをキーにして、検査機能リストを管理することになる。
【0040】
検査機能管理機構301は、事前検査機構300からのMethodオブジェクトの仮引数検査の依頼に基づいて、図中に示す検査機能実行部を使って、そのMethodオブジェクトをキーにして検査機能リストを検索し、その結果、キーに対応する値が空(null)である場合、すなわち検査機能リストを検索できない場合には、事前検査機構300へ正常復帰する。一方、検査機能リストを検索できた場合には、その各々に対して、検査対象の仮引数位置として指定された値を仮引数から取得し、検査機能に対して、Check(...)メソッドを実行する。検査の結果が正常の場合には、事前検査機構300へ正常復帰し、異常の場合には、事前検査機構300へ検査例外を送出する。
【0041】
これを受けて、事前検査機構300は、検査機能管理機構301から正常復帰した場合には、API提供プログラム10をそのまま実行して、その結果をAPI利用プログラム20に返し、検査機能管理機構301から検査例外が送出された場合には、その検査例外をAPI利用プログラム20に送出する。
【0042】
API提供プログラム10は、処理を実施する前に、APIの境界条件に基づいて仮引数の検査を行い、その値に異常がある場合には、検査例外としてプロキシ30に返却する。このとき返却する検査例外には、検査異常の対象となった仮引数の位置と、検査に利用した検査機能への参照あるいは実体とが渡される。上述したように、この検査例外で渡された情報が検査機能管理機構301で管理されることになるのである。
【0043】
このように構成されるときにあって、図中に示す検査機能管理機構301の検査機能登録部では、同一のMethodオブジェクトに対して、異なる仮引数検査の管理依頼があるときには、該当するMethodオブジェクトに対応付けられる検査機能リストに、その管理依頼の仮引数検査を追加登録する。
【0044】
また、図中に示す検査機能管理機構301の検査機能削除部では、Methodオブジェクトの仮引数検査の削除依頼に対して、該当するMethodオブジェクトに対応付けられる検査機能リストから、その削除依頼の仮引数検査のみを削除する。
【0045】
また、図中に示す検査機能管理機構301の検査機能永続部では、API利用プログラム20の停止・再起動時間の状況下においても射で管理する情報を保持するために、射を復元可能なデータ形式に出力する機能と、そのデータ形式を射に復元する機能とを有する。
【0046】
【発明の実施の形態】
以下、実施の形態に従って本発明を詳細に説明する。
【0047】
図3及び図4に、API利用プログラム20/事前検査機構300/検査機能管理機構301/API提供プログラム10の間の処理の流れについて記述するタイムチャートの一例を図示する。
【0048】
ここで、このタイムチャートでは、API提供プログラム10のString test(String,String)メソッドにおいて、checker1とchecker2で表される検査機能が実行される場合を想定している。また、以下の説明では、Java 言語を想定して説明を行う。
【0049】
(1)1回目の呼び出し(図3のタイムチャート)
先ず最初に、API利用プログラム20は、ファクトリパターンにおける標準的な手続き(図中に示すcreate())を利用して、API提供プログラム10へアクセスするためのオブジェクトを、API提供プログラム10から取得する。
【0050】
このとき、API提供プログラム10は、API利用プログラム20において事前検査を代行する機能を具備したオブジェクトであるところの事前検査機構300のインスタンスを、事前検査機構300から取得して、API利用プログラム20に返却する。
【0051】
続いて、API利用プログラム20は、取得した事前検査機構300に対して、testメソッド(”test1”,”test2” という2つの仮引数を指定する)の起動を試みる。この手続きがAPI提供プログラム10を直接呼び出す場合と同一の処理になることが、本発明における一つの特徴である。
【0052】
このtestメソッドの起動を受けて、事前検査機構300は、呼び出されたtestメソッドとその仮引数(”test1”,”test2”)とを検査機能管理機構301に引き渡して、仮引数の検査を依頼する。
【0053】
初回の起動においては、検査機能管理機構301にはtestメソッドに対する検査機能の登録がないために、検査機能管理機構301内で行う事前検査はないことで事前検査機構300に対して事前検査正常が返却され、これを受けて、事前検査機構300は、API提供プログラム10を呼び出す。
【0054】
API提供プログラム10は、testメソッドにおいて、checker1とchecker2で表される検査機能により仮引数の検査を行っており、このchecker1では、例えば、testメソッドの1番目の仮引数(配列のインデックス0により参照される)が特定の文字列(本例では”test1” を想定する)の場合、検査異常と判断する。
【0055】
API利用プログラム20から渡された1番目の仮引数は”test1” であることから、checker1により検査異常と判断される。
【0056】
これから、API提供プログラム10は、検査異常と判断された検査内容を表す検査機能(この例ではchecker1)と、検査の対象となったtestメソッドにおける仮引数の位置(この例では配列のインデックス0)との二項組を事前検査機構300へ返却する。
【0057】
この検査例外を受け取ると、事前検査機構300は、検査例外を発生したMethodオブジェクトとAPI提供プログラム10から受け取った検査例外の情報とを指定して、検査機能管理機構301の検査機能登録メソッドadd を呼び出すことで、検査機能管理機構301に対して、そのMethodオブジェクトをキーとする検査例外の情報の登録を依頼する。
【0058】
この登録依頼を受け取ると、検査機能管理機構301は、Mapインタフェースを実装したオブジェクトなど(このオブジェクトを検査機能管理オブジェクトと称する)に、Methodオブジェクトをキーにして、検査機能を保存し、処理を事前検査機構300へ移す。
【0059】
これを受けて、事前検査機構300は、API提供プログラム10から受け取った検査例外をAPI利用プログラム20に返却する。
【0060】
(2)2回目の呼び出し(図4のタイムチャート)
先ず最初に、API利用プログラム20は、ファクトリパターンにおける標準的な手続き(図中に示すcreate())を利用して、API提供プログラム10へアクセスするためのオブジェクトを、API提供プログラム10から取得する。
【0061】
このとき、API提供プログラム10は、API利用プログラム20において事前検査を代行する機能を具備したオブジェクトであるところの事前検査機構300のインスタンスを、事前検査機構300から取得して、API利用プログラム20に返却する。
【0062】
続いて、API利用プログラム20は、取得した事前検査機構300に対して、testメソッド(”test1”,”test2” という2つの仮引数を指定する)の起動を試みる。
【0063】
このtestメソッドの起動を受けて、事前検査機構300は、呼び出されたtestメソッドとその仮引数(”test1”,”test2”)とを検査機能管理機構301に引き渡して、仮引数の検査を依頼する。
【0064】
これを受けて、検査機能管理機構301は、引き渡されたtestメソッドが検査機能管理オブジェクトによって保存されていることを確認し、その値として、検査機能と対応する仮引数位置との二項組データを取り出す。本例では、管理されている検査機能はchecker1で、対象となる仮引数位置は配列のインデックス0(1番目の仮引数)であるので、その二項組データを取り出すことになる。
【0065】
続いて、検査機能管理機構301は、この取得した検査機能を、事前検査機構300から引き渡された仮引数に対して適用する。
【0066】
上述したように、checker1では、testメソッドの1番目の仮引数が特定の文字列(上述したように、本例では”test1” を想定している)の場合、検査異常と判断する。ここでは、API利用プログラム20から渡された1番目の仮引数は”test1” であることから、checker1により検査異常と判断される。
【0067】
これから、検査機能管理機構301は、検査異常と判断した検査内容を表す検査機能(この例ではchecker1)と、検査の対象となったtestメソッドにおける仮引数の位置(この例では配列のインデックス0)との二項組を、検査例外として、事前検査機構300へ返却する。
【0068】
この検査例外を受け取ると、事前検査機構300は、そのまま受け取った例外をAPI利用プログラム20へ返却する。
【0069】
このようにして、本発明によれば、API提供プログラム10で行われる仮引数検査を、API利用プログラム20の変更なしに、API利用プログラム20の側で行うことが可能になり、従来発生していたAPI利用プログラム20とAPI提供プログラム10との間の通信コストの削減が可能になる。
【0070】
そして、本発明によれば、複数の異常を含む仮引数に対して、1回のAPI呼び出しにより、全ての検査異常を通知することが可能になる。
【0071】
【実施例】
次に、Java 言語による具体的なプログラム例について説明する。
【0072】
(イ)API提供プログラム10の一実施例
図5に、API提供プログラム10の一実施例を図示する。
【0073】
ServerインタフェースはAPIを定義するものであり、本APIにおいては、test(String,String) メソッドを持つことを表す。
【0074】
ServerImp1は、前記のServerインタフェースを実装した具象クラスである。testメソッドの実装において、仮引数の検査を後述のCheckImpl1およびCheckImpl2を用いて行った後で、二つの仮引数を合成して返却する機能を実現している。
【0075】
また、本クラスのオブジェクトを生成するための機能をcreateメソッドで実現しており、その中で、後述の事前検査機構300を実装したCheckingProxy オブジェクトによって、ServerImplクラスのオブジェクトがラップされる。これにより、createメソッドを利用してオブジェクトを生成したAPI呼び出し部は、意識することなく、事前検査機構300の利用が可能となる。
【0076】
(ロ)API利用プログラム20の一実施例
図6に、API利用プログラム20の一実施例を図示する。
【0077】
Serverインタフェースを実装したオブジェクトを、ServerImpl#create() メソッドにより取得し、その取得したオブジェクトに対して、2度、testメソッドを、同一の検査で異常を引き起こす仮引数で呼び出している。本例においては、第1番目の仮引数の”test1” が検査異常を引き起こす仮引数である。
【0078】
(ハ)検査機能のインタフェースの一実施例
図7に、検査機能のインタフェースの一実施例を図示する。
【0079】
検査機能は、チェックを行うためのcheck メソッドと、check メソッドが引数するObject配列に代入されるべきオブジェクトのクラスのリストを取得するgetCheckedClassList メソッドとからなる。
【0080】
(ニ)基底クラスの一実施例
図8に、検査機能を実装する上で基底となるクラスの一実施例を図示する。
【0081】
どのような場合であっても必ず実施の必要がある以下の処理を、テンプレートパターンで実装する。
【0082】
すなわち、検査機能のcheck メソッドが呼び出されたときの仮引数の配列に格納されたオブジェクトのクラスが、検査機能が要求するクラスと一致しているかを検査する機能を、staticCheck メソッドにおいて実装する。また、staticCheck メソッドが正しく終了した場合に、本クラスにより抽象定義された後に、本抽象クラスに対する具象クラスがlocalCheckメソッドに、処理を委譲する実装を行う必要がある。
【0083】
(ホ)インタフェース定義の一実施例
図9に、検査異常時に、呼び出し側に対して報告される後述の検査例外に格納されることになる、利用した検査機能と対象となった仮引数位置とを格納する検査内容のインタフェース定義の一実施例と、その検査機能の一実施例とを図示する。
【0084】
具体的には、検査機能は、インスタンス変数checker によって管理され、checker の定義は、内部の匿名クラスとして定義されている。本例においては、第1番目の仮引数(配列の0番目)について、そのString値が「”test1” 」と等しい場合に、検査異常となるように実装されている。
【0085】
(ヘ)検査機能管理機構301の一実施例
図10及び図11に、検査機能管理機構301の一実施例を図示する。
【0086】
▲1▼check メソッドは、仮引数で指定されるMethodオブジェクトに対応付けて管理される検査機能リストに対して、その検査を全て実施し、検査異常を呼び出し元に報告する。
【0087】
▲2▼add メソッドは、検査例外と、その例外の契機となったMethodオブジェクトとを指定して、検査例外の内部に格納される検査機能の群を、Methodオブジェクトに対応付けられる検査機能リストに加える。また、事前に該当するMethodオブジェクトについて検査機能リストが登録がされていない場合は、新規に検査機能リストを作成した上で、登録する。
【0088】
▲3▼apply メソッドは、check メソッドに対するユーティリティとして機能し、その処理内容は以下の通りである。すなわち、検査機能リストと、検査対象であるMethodオブジェクトとを受け取り、検査機能リストの全ての要素(検査機能)に対して、指定される仮引数を利用して、検査機能による検査を実施し、検査異常がある場合においては、その全てを検査例外として報告する。
【0089】
(ト)事前検査機構300の一実施例
図12に、事前検査機構300の一実施例を図示する。
【0090】
Java.lang.reflect.InvocationHandler インタフェースのpublic Object invoke(Object proxy,Method m,Object[] args) を実装したメソッドの中で、事前検査機構300を呼び出し、正常復帰の場合には、API提供プログラム10を呼び出す実装を行う。また、API提供プログラム10からの復帰値が検査例外の場合には、対象となった検査機能の管理を検査機能管理機構301に依頼した上で、検査例外を呼び出し元であるAPI利用プログラム20に返却する。
【0091】
(チ)検査例外の一実施例
図13に、検査例外の一実施例を図示する。
【0092】
API提供プログラム10、あるいは、検査機能管理機構301内において、検査異常が発生した時に、検査に利用した検査機能と、対象となった仮引数の位置との二項組の集まりが格納される。
【0093】
具体的には、
▲1▼linkメソッドは、検査例外インスタンスの内部情報の統合を行う。
▲2▼getItemSize メソッドは、保持している検査機能と仮引数の位置との二項組の数を返却する。
▲3▼getCheckItemは、指定されたインデックスの検査機能と仮引数の位置との二項組を返却する。
【0094】
【発明の効果】
以上説明したように、本発明によれば、API提供プログラムで行われる仮引数検査を、API利用プログラムの変更なしに、API利用プログラムの側で行うことが可能になり、従来発生していたAPI利用プログラムとAPI提供プログラムとの間の通信コストの削減が可能になる。
【0095】
そして、本発明によれば、複数の異常を含む仮引数に対して、1回のAPI呼び出しにより、全ての検査異常を通知することが可能になる。
【図面の簡単な説明】
【図1】本発明のシステム構成を示す図である。
【図2】プロキシの配置形態を示す図である。
【図3】本発明におけるタイムチャートの一例を示す図である。
【図4】本発明におけるタイムチャートの一例を示す図である。
【図5】API提供プログラムの一実施例である。
【図6】API利用プログラムの一実施例である。
【図7】検査機能のインタフェースの一実施例である。
【図8】基底クラスの一実施例である。
【図9】インタフェース定義の一実施例である。
【図10】検査機能管理機構の一実施例である。
【図11】検査機能管理機構の一実施例である。
【図12】事前検査機構の一実施例である。
【図13】検査例外の一実施例である。
【符号の説明】
10 API提供プログラム
20 API利用プログラム
30 プロキシ
300 事前検査機構
301 検査機能管理機構
Claims (6)
- APIを介して協調動作するAPI提供プログラムとAPI利用プログラムとの間に設けられて、API提供プログラムにより実行される仮引数の検査を実行するAPI仮引数検査装置であって、
API提供プログラムを呼び出す際の返却情報に従って、API提供プログラムで仮引数の検査異常となる1つ又は複数の検査機能の情報と対象となる仮引数の位置の情報とを取得する取得手段と、
上記呼び出しの際に指定されるメソッドオブジェクトに対応付ける形で、上記取得した情報を管理する管理手段と、
API利用プログラムによりAPI提供プログラムの呼び出しが発行されるときに、その呼び出しで指定されるメソッドオブジェクトが上記管理手段に登録されている場合には、上記管理手段の管理情報に従って仮引数の検査を行い、その検査に合格した場合にはAPI提供プログラムを呼び出し、合格しない場合にはAPI利用プログラムに検査例外を通知する検査手段とを備えることを、
特徴とするAPI仮引数検査装置。 - 請求項1記載のAPI仮引数検査装置において、
上記取得手段は、API利用プログラムによりAPI提供プログラムの呼び出しが発行されるときに、その呼び出しで指定されるメソッドオブジェクトが上記管理手段に登録されていない場合には、API提供プログラムを呼び出してその返却情報を受け取ることで、API提供プログラムで仮引数の検査異常となる1つ又は複数の検査機能の情報と対象となる仮引数の位置の情報とを取得することを、
特徴とするAPI仮引数検査装置。 - APIを介して協調動作するAPI提供プログラムとAPI利用プログラムとの間に設けられて、API提供プログラムにより実行される仮引数の検査を実行するAPI仮引数検査方法であって、
API提供プログラムを呼び出す際の返却情報に従って、API提供プログラムで仮引数の検査異常となる1つ又は複数の検査機能の情報と対象となる仮引数の位置の情報とを取得する過程と、
上記呼び出しの際に指定されるメソッドオブジェクトに対応付ける形で、上記取得した情報を管理する管理手段に対して、上記取得した情報を登録する過程と、
API利用プログラムによりAPI提供プログラムの呼び出しが発行されるときに、その呼び出しで指定されるメソッドオブジェクトが上記管理手段に登録されている場合には、上記管理手段の管理情報に従って仮引数の検査を行い、その検査に合格した場合にはAPI提供プログラムを呼び出し、合格しない場合にはAPI利用プログラムに検査例外を通知する過程とを備えることを、
特徴とするAPI仮引数検査方法。 - 請求項3記載のAPI仮引数検査方法において、
上記取得する過程では、API利用プログラムによりAPI提供プログラムの呼び出しが発行されるときに、その呼び出しで指定されるメソッドオブジェクトが上記管理手段に登録されていない場合には、API提供プログラムを呼び出してその返却情報を受け取ることで、API提供プログラムで仮引数の検査異常となる1つ又は複数の検査機能の情報と対象となる仮引数の位置の情報とを取得することを、
特徴とするAPI仮引数検査方法。 - 請求項3又は4に記載のAPI仮引数検査方法の実現に用いられる処理をコンピュータに実行させるためのAPI仮引数検査プログラム。
- 請求項3又は4に記載のAPI仮引数検査方法の実現に用いられる処理をコンピュータに実行させるためのAPI仮引数検査プログラムを記録した記録媒体。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003033107A JP2004246434A (ja) | 2003-02-12 | 2003-02-12 | Api仮引数検査装置、api仮引数検査方法、api仮引数検査プログラム及びそのプログラムを記録した記録媒体 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003033107A JP2004246434A (ja) | 2003-02-12 | 2003-02-12 | Api仮引数検査装置、api仮引数検査方法、api仮引数検査プログラム及びそのプログラムを記録した記録媒体 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004246434A true JP2004246434A (ja) | 2004-09-02 |
Family
ID=33019191
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003033107A Pending JP2004246434A (ja) | 2003-02-12 | 2003-02-12 | Api仮引数検査装置、api仮引数検査方法、api仮引数検査プログラム及びそのプログラムを記録した記録媒体 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2004246434A (ja) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2007219857A (ja) * | 2006-02-16 | 2007-08-30 | Fujitsu Broad Solution & Consulting Inc | Apiインタフェース管理プログラム |
JP2008176462A (ja) * | 2007-01-17 | 2008-07-31 | Nippon Telegr & Teleph Corp <Ntt> | マネーサービス提供システム、装置、方法およびプログラム |
WO2016121086A1 (ja) * | 2015-01-30 | 2016-08-04 | 株式会社日立製作所 | ストレージ管理システム、ストレージシステム及び機能拡張方法 |
-
2003
- 2003-02-12 JP JP2003033107A patent/JP2004246434A/ja active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2007219857A (ja) * | 2006-02-16 | 2007-08-30 | Fujitsu Broad Solution & Consulting Inc | Apiインタフェース管理プログラム |
JP2008176462A (ja) * | 2007-01-17 | 2008-07-31 | Nippon Telegr & Teleph Corp <Ntt> | マネーサービス提供システム、装置、方法およびプログラム |
WO2016121086A1 (ja) * | 2015-01-30 | 2016-08-04 | 株式会社日立製作所 | ストレージ管理システム、ストレージシステム及び機能拡張方法 |
JPWO2016121086A1 (ja) * | 2015-01-30 | 2017-08-17 | 株式会社日立製作所 | ストレージ管理システム、ストレージシステム及び機能拡張方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2020029375A1 (zh) | 接口测试方法、系统、计算机设备和存储介质 | |
JP6200472B2 (ja) | クライアント‐サーバ・ブリッジを使用したオブジェクト管理 | |
US7606814B2 (en) | Tracing a web request through a web server | |
US20030055809A1 (en) | Methods, systems, and articles of manufacture for efficient log record access | |
CN110058864B (zh) | 微服务的部署方法及装置 | |
CN107241315B (zh) | 银行网关接口的接入方法、装置及计算机可读存储介质 | |
CN111475376B (zh) | 处理测试数据的方法、装置、计算机设备和存储介质 | |
KR20080111005A (ko) | 서비스를 생성, 수행 및 매핑하는 시스템 및 방법 | |
CN110602043A (zh) | 一种面向移动应用的api网关实现系统及方法 | |
WO2021086523A1 (en) | Support ticket platform for improving network infrastructures | |
Ruth et al. | A safe regression test selection technique for web services | |
US7543041B2 (en) | Pattern based web services using caching | |
CN116257438A (zh) | 接口测试用例的更新方法及相关设备 | |
CN115174542A (zh) | 业务系统的全链路采集方法、采集装置和采集系统 | |
CN111400162B (zh) | 一种测试方法及测试系统 | |
US7289989B2 (en) | Pattern based web services | |
US20080072178A1 (en) | Graphical user interface (GUI) for displaying software component availability as determined by a messaging infrastructure | |
US7734763B2 (en) | Application for testing the availability of software components | |
US9374437B2 (en) | Schema validation proxy | |
WO2023125755A1 (zh) | 基于大规模集群的服务请求处理方法、装置、设备及介质 | |
JP2004246434A (ja) | Api仮引数検査装置、api仮引数検査方法、api仮引数検査プログラム及びそのプログラムを記録した記録媒体 | |
CN111159033A (zh) | 一种软件测试方法及装置 | |
US20220398188A1 (en) | Testing automation for open standard cloud services applications | |
US7562084B2 (en) | System and method for mapping between instrumentation and information model | |
US8949403B1 (en) | Infrastructure for maintaining cognizance of available and unavailable software components |