(57)【要約】【課題】ＡＰＩマッシュアップを効率的に検索することユーザに可能にする方法等を提供する。【解決手段】方法は、アプリケーションプログラミングインターフェイス（ＡＰＩ）リポジトリから複数のコンピュータ可読ソースコードを収集することを含んでよい。方法は、コンピュータ可読ソースコードに対してＡＰＩ呼び出しコードスライシングを実行することを更に含んでもよい。方法は、ＡＰＩ呼び出しコードスライシングで識別されたＡＰＩ呼び出しコードの夫々についてＡＰＩホスト及びエンドポイントを取り出すことを更に含んでもよい。方法は、取り出されたＡＰＩホスト及びエンドポイントに基づきＡＰＩマッシュアップデータベースをコンパイルすることを更に含んでもよい。更には、方法は、ユーザインターフェイスでＡＰＩマッシュアップデータベースのリコメンドされるＡＰＩマッシュアップを提供することも含んでよい。【選択図】図２
2020126641.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションプログラミングインターフェイス（ＡＰＩ）リポジトリから複数のコンピュータ可読ソースコードを収集することと、
前記コンピュータ可読ソースコードに対してＡＰＩ呼び出しコードスライシングを実行することと、
前記ＡＰＩ呼び出しコードスライシングで識別されたＡＰＩ呼び出しコードの夫々についてＡＰＩホスト及びエンドポイントを取り出すことと、
前記取り出されたＡＰＩホスト及びエンドポイントに基づきＡＰＩマッシュアップデータベースをコンパイルすることと、
ユーザインターフェイスで前記ＡＰＩマッシュアップデータベースのリコメンドされるＡＰＩマッシュアップを提供することと
を有する方法。
【請求項２】
前記ＡＰＩリポジトリは、ＧｉｔＨｕｂを有する、
請求項１に記載の方法。
【請求項３】
前記複数のコンピュータ可読ソースコードを収集することは、
プログラミング言語の複数のＡＰＩ呼び出しメソッドを識別することと、
前記プログラミング言語の前記識別されたＡＰＩ呼び出しメソッドを用いて前記ＡＰＩリポジトリに対してコード検索動作を実行することと、
２つ以上のＡＰＩ呼び出しを含むコード検索を識別するように前記コード検索動作の結果にフィルタをかけることと
を有する、
請求項１に記載の方法。
【請求項４】
前記複数のコンピュータ可読ソースコードを収集することは、
前記コード検索動作の結果内で、２つ以上のＡＰＩ呼び出しを含む単一のコードファイルを識別することと、
前記コード検索動作の結果内で、複数のＡＰＩ呼び出しを含む単一のプロジェクトについての複数のコードファイルを識別することと
を更に有する、
請求項３に記載の方法。
【請求項５】
前記ＡＰＩ呼び出しコードスライシングは、
２つ以上のＡＰＩ呼び出しを含むと識別子された単一のコードファイルについて、
前記単一のコードファイルにおいてＡＰＩ呼び出しメソッドコードを見つけるように前記単一のコードファイルの抽象構文木をトラバースすることと、
前記ＡＰＩ呼び出しメソッドコードに無関係である前記単一のコードファイル内のコードステートメントを除くことと
を有する、
請求項４に記載の方法。
【請求項６】
前記ＡＰＩ呼び出しコードスライシングは、
複数のＡＰＩ呼び出しを含む単一のプロジェクトについての複数のコードファイルについて、
前記複数のコードファイルにおいて複数のユニフォームリソースロケータ（ＵＲＬ）を収集することと、
複数のホストＵＲＬを識別するように前記複数のＵＲＬにフィルタをかけることと、
前記複数のホストＵＲＬを含み且つ２つ以上のＵＲＬを含むコードファイルを識別するように前記複数のコードファイルにフィルタをかけることと
を有する、
請求項５に記載の方法。
【請求項７】
リコメンドされるＡＰＩマッシュアップに対するユーザ定義の検索パラメータをユーザから受け取ることを更に有し、
前記リコメンドされるＡＰＩマッシュアップは、前記ユーザ定義の検索パラメータに基づき識別される、
請求項１に記載の方法。
【請求項８】
前記ユーザ定義の検索パラメータは、ホストＵＲＬ、エンドポイント、ＡＰＩキーワード、及びＡＰＩリポジトリを含むグループから選択される、
請求項７に記載の方法。
【請求項９】
命令を含む１以上の非一時的なコンピュータ可読媒体であって、
前記命令は、１以上のプロセッサによって実行される場合に、システムに、
アプリケーションプログラミングインターフェイス（ＡＰＩ）リポジトリから複数のコンピュータ可読ソースコードを収集することと、
前記コンピュータ可読ソースコードに対してＡＰＩ呼び出しコードスライシングを実行することと、
前記ＡＰＩ呼び出しコードスライシングで識別されたＡＰＩ呼び出しコードの夫々についてＡＰＩホスト及びエンドポイントを取り出すことと、
前記取り出されたＡＰＩホスト及びエンドポイントに基づきＡＰＩマッシュアップデータベースをコンパイルすることと、
ユーザインターフェイスで前記ＡＰＩマッシュアップデータベースのリコメンドされるＡＰＩマッシュアップを提供することと
を含む動作を実行させる、前記コンピュータ可読媒体。
【請求項１０】
前記ＡＰＩリポジトリは、ＧｉｔＨｕｂを有する、
請求項９に記載のコンピュータ可読媒体。
【請求項１１】
前記複数のコンピュータ可読ソースコードを収集することは、
プログラミング言語の複数のＡＰＩ呼び出しメソッドを識別することと、
前記プログラミング言語の前記識別されたＡＰＩ呼び出しメソッドを用いて前記ＡＰＩリポジトリに対してコード検索動作を実行することと、
２つ以上のＡＰＩ呼び出しを含むコード検索を識別するように前記コード検索動作の結果にフィルタをかけることと
を有する、
請求項９に記載のコンピュータ可読媒体。
【請求項１２】
前記複数のコンピュータ可読ソースコードを収集することは、
前記コード検索動作の結果内で、２つ以上のＡＰＩ呼び出しを含む単一のコードファイルを識別することと、
前記コード検索動作の結果内で、複数のＡＰＩ呼び出しを含む単一のプロジェクトについての複数のコードファイルを識別することと
を更に有する、
請求項１１に記載のコンピュータ可読媒体。
【請求項１３】
前記ＡＰＩ呼び出しコードスライシングは、
２つ以上のＡＰＩ呼び出しを含むと識別子された単一のコードファイルについて、
前記単一のコードファイルにおいてＡＰＩ呼び出しメソッドコードを見つけるように前記単一のコードファイルの抽象構文木をトラバースすることと、
前記ＡＰＩ呼び出しメソッドコードに無関係である前記単一のコードファイル内のコードステートメントを除くことと
を有する、
請求項１２に記載のコンピュータ可読媒体。
【請求項１４】
前記ＡＰＩ呼び出しコードスライシングは、
複数のＡＰＩ呼び出しを含む単一のプロジェクトについての複数のコードファイルについて、
前記複数のコードファイルにおいて複数のユニフォームリソースロケータ（ＵＲＬ）を収集することと、
複数のホストＵＲＬを識別するように前記複数のＵＲＬにフィルタをかけることと、
前記複数のホストＵＲＬを含み且つ２つ以上のＵＲＬを含むコードファイルを識別するように前記複数のコードファイルにフィルタをかけることと
を有する、
請求項１３に記載のコンピュータ可読媒体。
【請求項１５】
前記動作は、リコメンドされるＡＰＩマッシュアップに対するユーザ定義の検索パラメータをユーザから受け取ることを更に有し、
前記リコメンドされるＡＰＩマッシュアップは、前記ユーザ定義の検索パラメータに基づき識別される、
請求項９に記載のコンピュータ可読媒体。
【請求項１６】
前記ユーザ定義の検索パラメータは、ホストＵＲＬ、エンドポイント、ＡＰＩキーワード、及びＡＰＩリポジトリを含むグループから選択される、
請求項１５に記載のコンピュータ可読媒体。
【請求項１７】
１以上のプロセッサと、
命令を含む１以上の非一時的なコンピュータ可読媒体と
を有し、
前記命令は、１以上のプロセッサによって実行される場合に、システムに、
アプリケーションプログラミングインターフェイス（ＡＰＩ）リポジトリから複数のコンピュータ可読ソースコードを収集することと、
前記コンピュータ可読ソースコードに対してＡＰＩ呼び出しコードスライシングを実行することと、
前記ＡＰＩ呼び出しコードスライシングで識別されたＡＰＩ呼び出しコードの夫々についてＡＰＩホスト及びエンドポイントを取り出すことと、
前記取り出されたＡＰＩホスト及びエンドポイントに基づきＡＰＩマッシュアップデータベースをコンパイルすることと、
ユーザインターフェイスで前記ＡＰＩマッシュアップデータベースのリコメンドされるＡＰＩマッシュアップを提供することと
を含む動作を実行させる、
システム。
【請求項１８】
前記複数のコンピュータ可読ソースコードを収集することは、
プログラミング言語の複数のＡＰＩ呼び出しメソッドを識別することと、
前記プログラミング言語の前記識別されたＡＰＩ呼び出しメソッドを用いて前記ＡＰＩリポジトリに対してコード検索動作を実行することと、
２つ以上のＡＰＩ呼び出しを含むコード検索を識別するように前記コード検索動作の結果にフィルタをかけることと
を有する、
請求項１７に記載のシステム。
【請求項１９】
前記複数のコンピュータ可読ソースコードを収集することは、
前記コード検索動作の結果内で、２つ以上のＡＰＩ呼び出しを含む単一のコードファイルを識別することと、
前記コード検索動作の結果内で、複数のＡＰＩ呼び出しを含む単一のプロジェクトについての複数のコードファイルを識別することと
を更に有する、
請求項１８に記載のシステム。
【請求項２０】
前記動作は、リコメンドされるＡＰＩマッシュアップに対するユーザ定義の検索パラメータをユーザから受け取ることを更に有し、
前記リコメンドされるＡＰＩマッシュアップは、前記ユーザ定義の検索パラメータに基づき識別される、
請求項１７に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示で説明される実施形態は、アプリケーションプログラミングインターフェイス（ＡＰＩ）マッシュアップを探索し、特に、特定のＡＰＩマッシュアップをリコメンドするシステム及び方法に関係がある。
【背景技術】
【０００２】
ＡＰＩは、アプリケーションソフトウェアを作成するプロトコル、コマンド、定義、及びツールの組である。ＡＰＩは、どのようにソフトウェアコンポーネントが相互作用すべきか、及びグラフィカルユーザインターフェイス（ＧＵＩ）コンポーネントをプログラムする場合又はサービス若しくは機能を実装する場合にどのようにＡＰＩが使用されるかを規定し得る。プログラミング言語ＡＰＩ、データベースＡＰＩ、等のような、全ての異なるタイプのＡＰＩの中で、我々は主として、ウェブＡＰＩを、本発明で記載される方法を説明するための例として使用する。ウェブＡＰＩは、サードパーティソフトウェアによってリソースがアクセスされ得る場所を特定する１以上の公に露わにされたエンドポイントを備えたプログラマチックインターフェースである。ウェブＡＰＩは、最も一般的にはＨＴＴＰベースのウェブサーバを用いて、ウェブを介して公開される。ウェブＡＰＩのために定義される要求−応答メッセージシステムは、通常はJavaScript  Object  Notation（ＪＳＯＮ）又はExtensible  Markup  Language（ＸＭＬ）で表現される。いくつかの場合に、新しい又は付加価値のあるサービスを提供するために一緒に機能する複数のＡＰＩとしてＡＰＩマッシュアップが使用される。
【０００３】
ＡＰＩ及びＡＰＩマッシュアップは、全種類のビジネスで使用され、一般的には、企業によって、様々なソフトウェアを彼らの製品に効率的に且つ安価に組み込むために使用される。しかし、１つの問題は、利用可能である膨大なＡＰＩ及びＡＰＩマッシュアップにより、ソフトウェア開発者が何らかの与えられたプロジェクトについて彼らの特定のニーズを最も良く満足するＡＰＩマッシュアップを見つけることは、しばしば困難である点である。これは、開発者が、新しいＡＰＩマッシュアップを開発したり又は既存の機能的ＡＰＩマッシュアップを探したりすることに貴重な時間を費やすよう強いられることがあるということで、無駄な時間及びエネルギを生じさせる可能性がある。
【０００４】
本願で請求される対象は、上記のような環境でしか動作しない実施形態又は上記の如何なる欠点も解決する実施形態に限られない。むしろ、この背景は、本願で記載されるいくつかの実施形態が実施され得る技術分野の一例を説明するためにのみ与えられている。
【発明の概要】
【０００５】
本開示の１以上の実施形態は、アプリケーションプログラミングインターフェイス（ＡＰＩ）リポジトリから複数のコンピュータ可読ソースコードを収集することを含み得る方法を含んでよい。方法は、前記コンピュータ可読ソースコードに対してＡＰＩ呼び出しコードスライシングを実行することを更に含んでよい。方法は、前記ＡＰＩ呼び出しコードスライシングで識別されたＡＰＩ呼び出しコードの夫々についてＡＰＩホスト及びエンドポイントを取り出すことを更に含んでよい。方法は、前記取り出されたＡＰＩホスト及びエンドポイントに基づきＡＰＩマッシュアップデータベースをコンパイルすることを更に含んでよい。更に、方法は、ユーザインターフェイスで前記ＡＰＩマッシュアップデータベースのリコメンドされるＡＰＩマッシュアップを提供することも含んでよい。
【０００６】
実施形態の目的及び利点は、少なくとも、特許請求の範囲で特に示されている要素、特徴、及び組み合わせによって、実現及び達成されるだろう。
【０００７】
上記の概要及び下記の詳細な説明は両方とも、単に例及び説明であり、請求される発明の制限でない点が理解されるべきである。
【０００８】
例となる実施形態は、添付の図面の使用を通じて更なる特定及び詳細をもって記載及び説明されることになる。
【図面の簡単な説明】
【０００９】
【図１】ＡＰＩマッシュアップをリコメンドすること及びＡＰＩマッシュアップデータベースを探索することに関係があるシステムの例を表す。
【図２】ＡＰＩマッシュアップのリコメンデーションを生成する方法の例のフローチャートを表す。
【図３】リポジトリから複数のＡＰＩコードを収集する方法の他の例のフローチャートを表す。
【図４Ａ】第１実施形態に従ってＡＰＩ呼び出しコードスライシングを実行するフローチャートを表す。
【図４Ｂ】第２実施形態に従ってＡＰＩ呼び出しコードスライシングを実行するフローチャートを表す。
【図５】例となる方法に従ってＡＰＩデータベースの構築を実行するフローチャートを表す。
【図６】リコメンドされるＡＰＩマッシュアップを識別するようＡＰＩデータベースをナビゲートするために使用され得るユーザインターフェイスの例を表す。
【図７】リコメンドされるＡＰＩマッシュアップを識別するようＡＰＩデータベースをナビゲートするために使用され得るユーザインターフェイスの例を表す。
【図８】リコメンドされるＡＰＩマッシュアップを識別するようＡＰＩデータベースをナビゲートするために使用され得るユーザインターフェイスの例を表す。
【図９】リコメンドされるＡＰＩマッシュアップを識別するようＡＰＩデータベースをナビゲートするために使用され得るユーザインターフェイスの例を表す。
【図１０】リコメンドされるＡＰＩマッシュアップを識別するようＡＰＩデータベースをナビゲートするために使用され得るユーザインターフェイスの例を表す。
【図１１】例となるコンピューティングシステムを表す。
【発明を実施するための形態】
【００１０】
本開示は、とりわけ、ユーザがＡＰＩマッシュアップを効率的に検索し、いくつかの場合では、特定のＡＰＩマッシュアップのリコメンデーションを受け取ることを可能にするように、ソフトウェアプロジェクト内でＡＰＩマッシュアップを利用する様々なソフトウェアプロジェクトを解析し、既存のＡＰＩマッシュアップを識別し、ＡＰＩマッシュアップの信頼できるリポジトリを生成するためのコンピューティングデバイスの使用に関係がある。例えば、ＡＰＩマッシュアップリコメンデーションシステムは、ＡＰＩマッシュアップのリポジトリをパース又はマイニングして、収集されたコードサンプルからＡＰＩ利用データを取り出し、ユーザがＡＰＩマッシュアップを探索することを可能にするユーザインターフェイスを提供し得る。このユーザインターフェイスは、開発者が、現実世界のオープンソースプロジェクト記述のキーワード、ＡＰＩ記述のキーワード、又は様々なプロジェクトにおけるＡＰＩマッシュアップの人気に基づき、ＡＰＩマッシュアップを見つけることを可能にする。そのようなものとして、本明細書で記載されるシステム及び方法は、ソフトウェア開発者のようなユーザが、彼らが望むニーズに合うＡＰＩマッシュアップを効率的且つ効果的に見つけることを可能にするよう設計される。更に、いくつかの実施形態で、システムは、ＡＰＩマッシュアップを積極的にリコメンドするために使用されてよい。
【００１１】
ＡＰＩマッシュアップデータベースを確かに且つ効率的に閲覧する能力は、コンピュータ自体の動作に対する多数の恩恵と、関連するコンピュータプログラミング分野に対する改善とをもたらし得る。コンピュータ自体に関して、信頼できるリポジトリからの適切なＡＰＩマッシュアップの探索及びリコメンデーションは、以前には存在していなかった新しい機能を呼び覚ますこと及び／又は実装することと、そのような機能を自動で生成することとをコンピュータに可能にすることによって、改善された機能をコンピュータに提供し得る。例えば、本開示は、開発者が適切なＡＰＩマッシュアップを様々なソフトウェアアプリケーションに実装することを可能にするために、相異なる機能及び用途を夫々有しているＡＰＩマッシュアップを識別することによってコンピュータソフトウェアの生成を促し得る。このようにして、本開示の実施形態は、コンピュータ自体の性能を改善し得る。
【００１２】
コンピュータプログラミングを改善することに関して、本開示は、ソフトウェア開発のための強化された機能を提供し得る。例えば、本開示は、ソフトウェア開発者が彼らのクライアントに対してより効率的に且つ確かにソフトウェアソリューションを提供することを可能にするために、有効なＡＰＩマッシュアップのより効率的な且つ信頼できるリポジトリを提供する方法でコンピュータソースコードの識別を促し得る。このようにして、本開示の実施形態は、コンピュータプログラミングを改善し得る。
【００１３】
より具体的に、多くの場合に、ソフトウェアアプリケーションのための適切なＡＰＩマッシュアップを見つけることは、膨大な数の既存のウェブＡＰＩによりフラストレーションを引き起こし且つ時間がかかる。そして、この数は急速に増大している。検索は、特定のアプリケーションに適した信頼できるＡＰＩマッシュアップを識別しようとして、大量のＡＰＩドキュメンテーションを読むこと及びオンラインのウェブサイトを検索することを含むことがある。この特定の問題は、既存のＡＰＩの多くが、ソフトウェア開発者を導くために使用され得る詳細なドキュメンテーションを欠いている点である。もう１つの問題は、ＡＰＩマッシュアップを含むソースコードの大規模リポジトリをホストするオープンソースウェブサイトでさえ、現実世界の用途、キーワード、等に従って容易には検索可能でない点である。
【００１４】
本開示の実施形態が、添付の図面を参照して説明される。
【００１５】
図１は、本開示の１以上の実施形態に従って、ＡＰＩマッシュアップ探索及びリコメンデーションを促すことに関連したシステム１００を例示する。システム１００は、ＡＰＩマッシュアップデータベース１１５を含むＡＰＩマッシュアップリコメンデーションシステム１１０を含んでよい。ＡＰＩマッシュアップリコメンデーションシステム１１０は、１以上のソフトウェアプロジェクト１２２（例えば、ソフトウェアプロジェクト１２２ａ、１２２ｂ、・・・、１２２ｎ）に関する情報を取得するよう構成される。いくつかの実施形態で、ソフトウェアプロジェクト１２２ａ、１２２ｂ、及び１２２ｎは、夫々、プロジェクトサーバ１２０ａ、１２０ｂ、及び１２０ｎのような、プロジェクトサーバ１２０に記憶され得る。ソフトウェアプロジェクトは、公に、又は許可されたユーザ及びアプリケーションに個人的に、利用可能であってよい。ソフトウェアプロジェクト１２２は、コンピュータソースコードによって実装される機能の組を提供し得る。これら及び他の実施形態で、ソフトウェアプロジェクト１２２は、ソフトウェアプロジェクト１２２の説明書１２４、ソフトウェアプロジェクト１２２で使用されるコードスニペット１２６、及びソフトウェアプロジェクト１２２を実装するための実際のコンピュータソースコード１２８のいずれかを含んでよい。ソフトウェアプロジェクト１２２ａ、１２２ｂ、・・・、１２２ｎを解析することによって、ＡＰＩマッシュアップリコメンデーションシステム１１０は、様々な現実世界のアプリケーションで成功裏に使用されているＡＰＩマッシュアップを識別し得る。本明細書で使用されるように、「ＡＰＩマッシュアップ」との語は、２以上のＡＰＩへのＡＰＩ呼び出しを含むコンピュータソースコードの組を指し得る。多種多様な種類のＡＰＩマッシュアップが存在し、例えば、ＡＰＩマッシュアップの一種は、１以上のＡＰＩの出力が他のＡＰＩのための入力として使用されるように使用される。いくつかの実施形態で、他のＡＰＩのための入力として使用される前に、ＡＰＩマッシュアップ１３０内の１つのＡＰＩの出力に対して処理が行われる。別の種類のＡＰＩマッシュアップは、「if  this  then  that」タイプのマッシュアップであってよく、１以上のＡＰＩはトリガであり、もう１つのＡＰＩはアクションである。特定の条件が満足されると、アクションが然るべく実行されることになる。
【００１６】
ＡＰＩマッシュアップリコメンデーションシステム１１０は、１以上のソフトウェアプロジェクト１２２に関する情報を取り出し、ソフトウェアプロジェクト１２２の１以上のＡＰＩの間の相関を決定し、ＡＰＩマッシュアップデータベース１１５を生成し、どれがユーザデバイスのユーザインターフェイス１３５で開発者に提示されているかに基づき少なくとも１つの適切なＡＰＩマッシュアップ１３０を識別するよう構成されたシステム、デバイス、コンポーネント、又はそれらの組み合わせであってよい。ＡＰＩマッシュアップリコメンデーションシステムは、図１１のコンピューティングデバイス１１００のようなコンピューティングデバイス、そのようなコンピューティングデバイスで作動する１以上のソフトウェアプロセス、等として実装されてよい。例えば、検出された相関に基づいて、ＡＰＩマッシュアップリコメンデーションシステム１１０は、様々な現実世界のアプリケーション内の識別及び検証されたＡＰＩマッシュアップのリストを含むコンピュータソースコードを含み得るＡＰＩマッシュアップデータベース１１５を生成してよい。夫々のＡＰＩマッシュアップは、第１ＡＰＩ呼び出し、任意に、第１ＡＰＩの出力に対する何らかの処理、及び第１ＡＰＩの出力（又は処理された出力）に対する第２ＡＰＩ呼び出しを含む。
【００１７】
いくつかの実施形態で、ＡＰＩマッシュアップリコメンデーションシステム１１０は、ソフトウェアプロジェクト１２２ａに関する情報を取得するよう構成されてよい。例えば、ＡＰＩマッシュアップ生成部は、プロジェクトサーバ１２０ａに記憶されているソフトウェアプロジェクト１２２ａをダウンロードし、クローリングし、又は別なふうにそれにアクセスしてよい。これら及び他の実施形態で、ＡＰＩマッシュアップ生成部は、ソフトウェアプロジェクト１２２ａの１以上のウェブサイトから情報を取り出してよい。例えば、ＡＰＩマッシュアップリコメンデーションシステム１１０は、説明書１２４ａを含むページ、スニペット１２６ａを含み得るページ、及び／又はコード１２８ａを含み得るページを取り出してよい。
【００１８】
いくつかの実施形態で、ＡＰＩマッシュアップリコメンデーションシステム１１０は、ソフトウェアプロジェクト１２２ａ内のＡＰＩ呼び出しを識別するように、取り出された情報を解析してよい。例えば、ＡＰＩマッシュアップ生成部１１０は、「ＡＰＩ」（API）や「ＡＰＩマッシュアップ」（API  Mashup）との語、ＡＰＩタイトル、又は同義語（例えば、「アプリケーションプログラミングインターフェイス」（Application  Programming  Interface）、「サードパーティファンクション」（Third  Party  Functions）、「サードパーティリソース」（Third  Party  Resources）、「サードパーティアプリケーション呼び出し」（Third  Party  Application  Call）、等）を探しながら説明書１２４ａをパースしてよい。追加的に、又は代替的に、そのような語は、スニペット１２６ａ及び／又はコード１２８ａに関連して識別されてもよい。いくつかの実施形態で、スニペット１２６ａ及び／又はコード１２８ａは、ユニフォームリソースロケータ（ＵＲＬ）又はユニフォームリソース識別子（ＵＲＩ）の近くで所与のハイパーテキスト・トランスファー・プロトコル（ＨＴＴＰ）についてパースされるか又は別なふうに検索されてよい。例えば、ＡＰＩマッシュアップリコメンデーションシステム１１０は、ＵＲＬ又はＵＲＩの近くにあるＰＵＳＨ、ＰＯＳＴ、ＤＥＬＥＴＥ、ＰＵＴ等のＨＴＴＰコマンドを探してよく、組み合わせをＡＰＩ呼び出しとして識別してよい。
【００１９】
いくつかの実施形態で、ＡＰＩマッシュアップリコメンデーションシステム１１０は、ソフトウェアプロジェクト１２２で識別されたＡＰＩ呼び出しが新しいＡＰＩの導入又は前から存在するＡＰＩの使用に関連するかどうかを判定するよう構成されてよい。例えば、ＡＰＩマッシュアップリコメンデーションシステム１１０は、ＡＰＩ呼び出しを既知のＡＰＩのリストと比較してよく、あるいは、ＡＰＩの機能を示す語を説明書１２４ａ又はコード１２８ａから探してよい。
【００２０】
いくつかの実施形態で、ＡＰＩマッシュアップリコメンデーションシステム１１０は、識別されたＡＰＩ呼び出しに関するデータを取り出してよい。例えば、ＡＰＩマッシュアップリコメンデーションシステム１１０は、説明書１２４ａから、ＡＰＩタイトル、ＡＰＩ  ＵＲＬ／ＵＲＩ、ＡＰＩホスト、エンドポイント、メタデータ、ＡＰＩの使用の何らかの例、ＡＰＩのインストール指示、ＡＰＩの何らかの従属関係（例えば、ＡＰＩマッシュアップが依存する他の関数／ＡＰＩ、等）を取り出してよい。これら及び他の実施形態で、識別されたマッシュアップＡＰＩに関連した情報は、ＡＰＩマッシュアップ生成部１１０によって、ＡＰＩマッシュアップデータベース１１５を生成するために使用されてよい。ＡＰＩマッシュアップデータベース１１５は、次いで、開発者によって、彼らの特定のプロジェクトにとって最も人気があるか又は最も良く適し得る特定のＡＰＩマッシュアップ１３０を検索及び識別するために使用されてよい。
【００２１】
いくつかの実施形態で、ＡＰＩマッシュアップリコメンデーションシステム１１０は、ＡＰＩマッシュアップの可能性あるアプリケーションを決定するために、且つ、ＡＰＩマッシュアップを検証するために、ＡＰＩ呼び出しに関連したソフトウェアプロジェクト１２２のコード１２８ａを解析してよい。コード１２８ａを解析することにおいて、ＡＰＩマッシュアップリコメンデーションシステム１１０は、識別されたＡＰＩ呼び出しで使用されているプログラミング言語を決定してよい。例えば、ＡＰＩマッシュアップ生成部１１０は、ＡＰＩがＪａｖａｓｃｒｉｐｔ（登録商標）、Ｐｈｙｔｈｏｎ、Ｃ＃、Ｃ＋＋等であることを識別してよい。これら及び他の実施形態で、ＡＰＩマッシュアップリコメンデーションシステム１１０は、１つの言語又は他に関連するとしてコードの特定の構文を識別してよい。追加的に、又は代替的に、ＡＰＩマッシュアップリコメンデーションシステム１１０は、複数のＡＰＩ呼び出しを含む単一のコードファイルにおいて複数のＡＰＩ呼び出しを識別するよう、且つ、１つのコードファイルからＡＰＩ呼び出しスライシングを実行するよう構成されてよい。他の例では、ＡＰＩマッシュアップリコメンデーションシステム１１０は、所与の表現を使用するコード及び関連するＵＲＬの全行を識別するように、複数のコードファイル１２８ａ及び１２８ｂからＡＰＩ呼び出しスライシングを実行してもよい。
【００２２】
いくつかの実施形態で、コード１２８ａを解析することにおいて、ＡＰＩマッシュアップリコメンデーションシステム１１０は、コード１２８ａから変数を取り出してよい。ＡＰＩマッシュアップ生成部１１０は、変数のタイプ（例えば、string、float、Unicode、等）及び変数どうしの関係（例えば、‘a=b’は、変数‘b’の値が変数‘a’に変換されるという意味で、‘a’と‘b’との間の関係を含むコード）を識別するよう構成されてよい。これら及び他の実施形態で、異なる変数タイプ及び異なる関係は、コード１２８ａを生成するために使用されているプログラミング言語に依存してよい。関係は、例えば、統一モデリング言語（ＵＭＬ）を使用して、変数どうしの関係を識別するように視覚的に表現されてよい。
【００２３】
ＡＰＩマッシュアップリコメンデーションシステム１１０によってコード１２８ａを解析することは、コード１２８ａで使用されている変数のタイプ及び関係に基づき、コード１２８ａにおけるＡＰＩ呼び出しの使用を識別することを更に含んでよい。例えば、ＡＰＩマッシュアップリコメンデーションシステム１１０は、ＡＰＩを呼び出すためにどのようなコードが使用されているか、及び／又は、ＡＯＩの入力及び／又は出力としてどのような変数が使用されているかを決定してよい。ＡＰＩマッシュアップリコメンデーションシステム１１０は、追加的に、又は代替的に、ＡＰＩの入力及び／又は出力に存在する処理を識別してよい。これら及び他の実施形態で、コード１２８ａについて、ＡＰＩマッシュアップリコメンデーションシステム１１０は、コード１２８ａ内のＡＰＩへの直接的な入力及び／又は出力として使用される２以上の変数があるかどうかを判定してよい。コード解析の例は、図３、図４Ａ、図４Ｂ、及び図５を参照して、より詳細に記載され得る。
【００２４】
本開示の範囲から外れることなしに、システム１００に対して変更、追加、又は削除が行われてよい。例えば、システム１００は、任意数のプロジェクトサーバに記憶されている任意数のソフトウェアプロジェクトを含んでよい。いくつかの実施形態で、よりずっと多い数のソフトウェアプロジェクトが含まれてもよい。
【００２５】
図２〜５に示される方法の夫々について、方法は、如何なる適切なシステム、装置、又はデバイスによっても実行されてよい。例えば、図１のＡＰＩマッシュアップリコメンデーションシステム１１０、又は他のシステム若しくはデバイスが、方法に関連した動作の１以上を実行してよい。たとえ別個のブロックとして表されているとしても、方法のブロックの１以上に関連したステップ及び動作は、所望の実施に応じて、更なるブロックに分けられても、より少ないブロックへとまとめられても、又は削除されてもよい。
【００２６】
更に、図２〜５に示される方法の夫々について、本開示の範囲から外れることなしに、方法に対して変更、追加、又は削除が行われてよい。例えば、方法の動作は、別の順序で実施されてもよい。追加的に、又は代替的に、２以上の動作が同時に実行されてもよい。更に、説明されている動作及びアクションは例として与えられており、動作及びアクションの一部は、開示される実施形態の本質から外れることなしに、任意であっても、より少ない動作及びアクションへとまとめられても、あるいは、追加の動作及びアクションに拡張されてもよい。
【００２７】
図２は、本開示の１以上の実施形態に従って、ＡＰＩマッシュアップの探索及びリコメンデーションをユーザに提供する、例となる方法２００のフローチャートを表す。
【００２８】
ブロック２１０で、１以上のＡＰＩ使用リポジトリ又はソフトウェアリポジトリは、ソフトウェアプロジェクトで利用可能であって一般的に使用される複数のＡＰＩ及びマッシュアップＡＰＩに関する情報を識別し、そのローカルコピーをダウンロードし、あるいは、別なふうに取り出すように検索又はクローリングされる。取り出された情報は、様々なソフトウェアプロジェクトのプレーンテキスト記述（例えば、ソフトウェアプロジェクトの機能性、ソフトウェアプロジェクトの入出力、等）、プロジェクトのコードスニペット（例えば、コードスニペットの関数の記述を伴って記述内で潜在的に入れ子にされている。）、及びソフトウェアプロジェクトを実装するためのコードのいずれかを含んでよい。いくつかの実施形態で、ブロック２１０は、複数のソフトウェアプロジェクトにわたって複数回繰り返されてよい。
【００２９】
呼び出され得るリポジトリの一例は、ＧｉｔＨｕｂ（登録商標）である。なお、他のオープンソースのソフトウェアリポジトリ又はウェブサイトが使用されてもよい。ソフトウェアリポジトリはまた、インターネット接続のようなネットワーク接続を経由してＡＰＩマッシュアップリコメンデーションシステム１１０と通信するウェブサイトであってもよい。ブロック２１０を実行する方法の一例は、図３において、より十分に記載され得る。
【００３０】
ブロック２２０で、取り出された情報内のＡＰＩ呼び出しが識別されてよく、ＡＰＩ呼び出しコードスライシングが実行されてよい。例えば、ＡＰＩマッシュアップリコメンデーションシステム１１０は、ＡＰＩ呼び出しを識別するように、取り出された情報をパースしてよい。例えば、ＡＰＩマッシュアップリコメンデーションシステム１１０は、「ＡＰＩ」との語、又はＡＰＩタイトル、又は同義語を記述又はコードスニペットで探してよい。追加的に、又は代替的に、ＡＰＩマッシュアップリコメンデーションシステム１１０は、所与のプログラミング言語でＡＰＩ呼び出しを実装することが知られているコードの行をコードから探してよい（例えば、ＵＲＬ又はＵＲＩの近くの特定のＨＴＴＰコマンド）。いくつかの実施形態で、ＡＰＩ呼び出しが文書又はコードスニペットにおいて識別される場合に、ＡＰＩマッシュアップリコメンデーションシステム１１０は、識別されたＡＰＩ呼び出しをコード内で見つけ得る。ＡＰＩ呼び出しコードスライシングの一例は、図４Ａ及び図４Ｂに関して更に記載される。
【００３１】
ブロック２３０で、ＡＰＩマッシュアップリコメンデーションシステム１１０は、ＡＰＩマッシュアップデータベース１１５を生成する。より具体的には、マッシュアップＡＰＩの入力及び出力を識別及び検証するように、且つ、コードの現実世界の使用を識別するように、コードは解析される。一実施形態で、ＡＰＩマッシュアップデータベース１１５を生成する方法の例は、図５に関して記載される。
【００３２】
より十分に以下で記載されるように、ＡＰＩマッシュアップデータベース１１５は、次いで、ソフトウェア開発者のようなユーザによって、特定のソフトウェアアプリケーションに最も適しているＡＰＩマッシュアップを識別することを目的として、複数の利用可能なＡＰＩマッシュアップを探索又はナビゲートするために使用されてよい。いくつかの例で、これはブロック２４０を呼び出してよい。ブロック２４０で、適切なＡＰＩマッシュアップに対するユーザ要求が受け取られてよい。一実施形態に従って、この要求は、キーワード、プログラミング言語、特定のコードリポジトリ、ホストＵＲＬ、エンドポイント、等のような、ユーザによって望まれる特定の基準を含んでよい。検索基準に基づいて、ブロック２５０で、リコメンドされるＡＰＩマッシュアップ１３０が、ユーザデバイス１４０のユーザインターフェイス１３５を介してユーザへ送られる。
【００３３】
他の実施形態では、ＡＰＩマッシュアップリコメンデーションシステム１１０は、前に選択されたキーワード、言語、エンドポイント、等のような文脈的情報に基づき、ＡＰＩマッシュアップ１３０又は適切なＡＰＩマッシュアップのリストをリコメンドしてよい。この文脈中、受動的探索はユーザによって実行されず、むしろ、ユーザのニーズに関する文脈的情報が、ユーザインターフェイス１３５で実行されているソフトウェア開発に照らして推測される点が理解されるべきである。
【００３４】
図３、図４Ａ、図４Ｂ、及び図５は、ユーザの特定のニーズにとって適切であるか又は最も良く適しているＡＰＩマッシュアップを識別することを目的として、様々なＡＰＩマッシュアップが様々な現実世界のアプリケーションで使用されている場合に、それらのＡＰＩマッシュアップを発見し、探索し、検索するためにユーザによって利用され得る検索可能なマッシュアップＡＰＩデータベース１１５を生成するように、ソフトウェアリポジトリからＡＰＩを収集し、ＡＰＩコードスライシングを実行し、読み出されたＡＰＩコードを解析する方法の様々な例を表し得る。図３、図４Ａ、図４Ｂ、及び図５の方法の夫々は、コンピュータソースコードを生成してよく、それにより、コンピューティングデバイスは、ＡＰＩマッシュアップを識別し、検証し、ナビゲートするように、図３、図４Ａ、図４Ｂ、及び図５の方法で生成されたコンピュータソースコードを実行し得る。
【００３５】
図３は、１以上のＡＰＩ使用リポジトリにおいてＡＰＩ及びＡＰＩマッシュアップコードを収集する、例となる方法３００のフローチャートを表す。
【００３６】
ブロック３１０で、所与のプログラミング言語について、ＡＰＩ呼び出しメソッドが集約される。例えば、Ｊａｖａｓｃｒｉｐｔでの、既知のＡＰＩ呼び出しメソッドの例は、$.ajax、$.getJSON、$.post、及びXMLHttpRequestを含むが、他が使用されてもよく、他のプログラミング言語の他のＡＰＩ呼び出しメソッドも使用されてよい。
【００３７】
集約されたＡＰＩ呼び出しメソッドに基づき、ブロック３２０で、ソフトウェアリポジトリ、例えばＧｉｔＨｕｂに対して、シード検索文字列（seed  search  string）が実行される。シード検索が使用され得る方法の一例は、その全文を参照により本願に援用される、「API  LEARNING」と題された米国特許出願第１５／３７４７９８号で記載されている。一例において、シード検索は、ＡＰＩホストＵＲＬ、ＡＰＩタイトル、ＡＰＩのエンドポイント、及びＡＰＩ記述を含み得るデータセットを有してよい。検索結果は、ＡＰＩ呼び出しを有しているソフトウェアプロジェクト／コードを含む。
【００３８】
ブロック３３０で、次いで、ＡＰＩマッシュアップを識別するために、検索の結果が、様々な基準に従ってフィルタリングされる。一例において、ＡＰＩマッシュアップは少なくとも２つのＡＰＩ呼び出しを必要とするので、基準は、結果が少なくとも２つのＡＰＩ呼び出しメソッドを含むように結果にフィルタをかけることを含む。いくつかの例で、ブロック３３０で満足されるべきもう１つの基準は、シード検索文字列で使用されるシードＡＰＩデータセットにＡＰＩ呼び出しが含まれることである。
【００３９】
ブロック３４０で、フィルタ処理された結果は、次いで、単一のコードファイルで使用される複数のＡＰＩ呼び出しメソッドが存在するかどうか、又は単一のＡＰＩリポジトリ内の複数のコードファイルで使用される複数のＡＰＩ呼び出しメソッドが存在するかどうかに基づき、２つのカテゴリに分けられる。この決定に応じて、対応するＡＰＩ呼び出しコードスライシング処理が実行される。例えば、図４Ａは、複数のＡＰＩ呼び出しが１つのコードファイルで使用される場合に実行され得るＡＰＩ呼び出しコードスライシング処理４００の例を表し、一方、図４Ｂは、複数のＡＰＩ呼び出しを有している単一のリポジトリ内の複数のコードファイルから実行され得るＡＰＩ呼び出しコードスライシング処理４５０の例を表す。
【００４０】
ブロック３５０で、収集されフィルタ処理されたＡＰＩ呼び出しを含むプロジェクト記述が、リポジトリから読み出される。
【００４１】
図４Ａ及び図４Ｂは、本開示の１以上の実施形態に従って、上述されたように読み出されてフィルタ処理されたＡＰＩ呼び出しコードに対して実行され得るＡＰＩ呼び出しコードスライシングの方法４００及び４５０を例示するフローチャートである。
【００４２】
複数のＡＰＩ呼び出しを含む単一のコードファイルを有するＡＰＩ呼び出しコードの場合に、ブロック４２０で、ＡＰＩ呼び出しコードは、ＡＰＩ呼び出しメソッド及びコード部分を見つけるようにトラバースされる。これは、コードファイルの抽象構文木をトラバースすることを含んでよい。ブロック４３０で、文字列照合メソッド（string  match  method）が、関心があるＡＰＩ呼び出しと無関係であるコードステートメントを除くようＡＰＩ呼び出しメソッド内でコードを見つけるために使用される。ブロック４４０で、ソフトウェアプロジェクトからのコード内の変数が取り出され、変数が収集されたＡＰＩ呼び出しコードに含まれる場合には置換されてよい。
【００４３】
単一のリポジトリ内で複数のＡＰＩ呼び出しを含む複数のコードファイルを有するＡＰＩ呼び出しコードの場合に、ブロック４６０で、リポジトリ内の全てのＵＲＬが、正規表現を用いて収集される。収集されたＵＲＬは、次いでブロック４７０で、シードＡＰＩデータセット内の全てのホストＵＲＬを用いてフィルタリングされる。マッシュアップが少なくとも２つのＡＰＩ呼び出しを有しているということで、次いでブロック４８０で、リポジトリは、マッシュアップを収集するよう２以上のＵＲＬを含むＡＰＩ呼び出しを識別するようにフィルタリングされる。
【００４４】
図５は、上記のＡＰＩ収集及びＡＰＩ呼び出しコードスライシングの結果に基づきＡＰＩマッシュアップデータベース１１５を構築する方法５００を例示するフローチャートである。一実施形態で、ＡＰＩマッシュアップデータベースは、有効なＡＰＩマッシュアップのみを格納してよい。これは、１つのコードファイル、又は複数のコードファイルだが同じプロジェクトで、ソフトウェアリポジトリ内に少なくとも２つの有効なＡＰＩ呼び出しが存在することを意味する。ＡＰＩ呼び出しは、このＡＰＩのホストＵＲＬ及び少なくとも１つのエンドポイントが両方ともソフトウェアコードで識別される場合に有効である。ＡＰＩマッシュアップデータベース１１５内の各ＡＰＩマッシュアップは、ＡＰＩホストＵＲＬ及び関連するエンドポイントに関する情報とともに、収集されるリポジトリ内のマッシュアップ共起頻度を含む。ブロック５１０で、ＡＰＩ呼び出しコードスライシングにおいて収集された全てのＵＲＬが集められる。ブロック５２０で、各ＵＲＬについて、ＡＰＩリポジトリ内で１つのエントリにホストＵＲＬが存在するかどうかが判定される。ＡＰＩリポジトリ内で１つのエントリにホストＵＲＬが存在すると決定される場合には、次いでブロック５３０で、ＡＰＩリポジトリ内の識別されたエントリの各パスについて、正規表現（regex）が生成され、regexがＵＲＬ及び対応するエンドポイントと一致するかどうかが判定される。regexがＵＲＬと一致する場合には、次いでブロック５５０で、ＡＰＩマッシュアップがＡＰＩマッシュアップデータベース１１５にセーブされる。ブロック５３０で、regexがＵＲＬと一致しないと決定される場合には、次いでブロック５６０で、ＡＰＩリポジトリにエンドポイントは存在しないと決定される。
【００４５】
ブロック５２０に戻ると、ＡＰＩリポジトリ内で１つのエントリにホストＵＲＬが存在しないと決定される場合には、次いでブロック５４０で、ＡＰＩリポジトリにホストＵＲＬは存在しないと決定される。
【００４６】
ブロック５５０に戻ると、いくつかの例で、ＡＰＩマッシュアップデータベース１１５は、様々なＡＰＩマッシュアップのリストを有し、夫々のＡＰＩマッシュアップは、２つの異なるＡＰＩホストＵＲＬを含む。一実施形態で、ＡＰＩマッシュアップデータベース１１５の生成は、特定のＡＰＩ及びエンドポイントが様々なリポジトリで使用される頻度を記録することを更に含んでよい。そのようなものとして、ＡＰＩマッシュアップデータベース１１５は、様々な“現実世界の”アプリケーションで使用される多種多様なＡＰＩマッシュアップを含むだけでなく、ＡＰＩマッシュアップデータベース１１５は、リポジトリにおけるＡＰＩマッシュアップの共起及びＡＰＩマッシュアップの様々な組み合わせも記録し得る。
【００４７】
方法５００のいくつかの態様を実装するために用いられ得るソフトウェアアルゴリズムの一例が、以下に示される：
{
“api_info”:[
{
“endpoint”:“/media/{media-id}”,
“host”:“api.instagram.com”
},
{
“endpoint”:“/users/{USER_ID}/chekins”,
“host”:“api.foursquare.com”
}
],
“count”:3
},
【００４８】
図６は、上記のＡＰＩマッシュアップリコメンデーションシステム１１０に関連して使用される場合に、ＡＰＩマッシュアップ探索のために使用され得るユーザインターフェイス６００の例である。
【００４９】
図６に示されるユーザインターフェイス６００において、開発者は、エントリボックス６１０を使用してＡＰＩホストＵＲＬを選択する。図６に示される実施形態で、ユーザインターフェイス６００は、予測ＡＰＩホストＵＲＬオプションのリスト６４０を生成するために、オートコンプリート（auto-complete）機能を含む。ユーザインターフェイス６００において、エントリボックス６５０は、ユーザが「api.foursquare.com」を選択したことを示す。ユーザインターフェイス６００は、ユーザがエンドポイントリンクを選択することを可能にするエントリボックス６６０を更に含む。これ（６６０に示される。）はまた、所与のＡＰＩホストＵＲＬについての可能性があるエンドポイントリンクのリスト６７０を提供するために、予測オートコンプリーションを使用してもよい。ユーザインターフェイス６００は、検索を開始する検索ボタン６３０を更に含んでよい。
【００５０】
検索ボタン６３０をクリックすると、ユーザインターフェイスは、例えば、図７に示されるインターフェイス７００に変化してよい。インターフェイス７００は、ユーザ定義のＡＰＩホストＵＲＬ７１０及びエンドポイント７２０を与えられて、マッシュアップを形成するための利用可能なＡＰＩオプションのリスト７５０を含む。更に、所与のリポジトリ（ＧｉｔＨｕｂ７３０として示される。）について、選択されたＡＰＩホストＵＲＬ及びエンドポイントはまた、名詞句抽出アルゴリズム（NLTK又はSpacyのような、多数のオープンソース自然言語処理ツールキットにより利用可能である。）によって計算されるような、所与のリポジトリの収集されたプロジェクト記述からの様々なプロジェクトキーワードのキーワードクラウド７４０として、集約されてもよい。ワードクラウド（word  cloud）においてフォントが大きいほど、そのようなキーワードはリポジトリ内でより多く見られることを意味する。図７に示される例では、利用可能なＡＰＩマッシュアップのリスト７５０は、ＡＰＩマッシュアップデータセットにおける使用の頻度に従って提示されてよい。
【００５１】
図８は、提供される他のユーザインターフェイス８００の例である。ユーザインターフェイス８００は、７１０内の選択されたＡＰＩとマッシュアップとして組み合わせるために使用され得る他のＡＰＩの記述に対応するＡＰＩキーワードのワードクラウド８２０へユーザが切り替えるボタン８１０を提供する。
【００５２】
図９は、他のユーザインターフェイス９００の例であり、ユーザは、マッシュアップＡＰＩのリスト９３０に含まれるマッシュアップＡＰＩタイトルをクリックすることができ、これは、前に入力されたＡＰＩ及びエンドポイントによるＡＰＩマッシュアップの選択を引き起こす。他の実施形態では、ユーザは、記述キーワード９１０を選択することができ、これは、選択されたキーワードを含むリポジトリ内で入力されたＡＰＩホストＵＲＬ及びエンドポイントと共起するマッシュアップＡＰＩオプションの選択を引き起こす。同様に、キーワードクラウド９２０からＡＰＩ記述をクリックすることは、マッシュアップＡＰＩオプションの選択を引き起こし、選択されたキーワードは記述テキストに含まれる。
【００５３】
次いで、ユーザは、特定のマッシュアップＡＰＩを識別するために、フィルタ処理されたＡＰＩタイトル（この例では、ＡＰＩマッシュアップの人気によって順位付けされる。）、リポジトリキーワード、又はＡＰＩ記述キーワードを選択することができる。次いで、図１０に示されるように、インターフェイス１０００は、現実世界のオープンソースリポジトリタイトルとともに、指定されたマッシュアップＡＰＩの全てのエンドポイントオプション１０１０のリストを示す。ユーザは、次いで、ブラウザでリポジトリリンクを開くためにタイトルをクリックすることができる。
【００５４】
上記のユーザインターフェイスに加えて、他のインターフェイスがＡＰＩマッシュアップデータベース１１５及びＡＰＩマッシュアップリコメンデーションシステム１１０に関連して使用され得る点が理解されるべきである。より具体的に、システムはまた、文脈的情報に基づく能動的なＡＰＩマッシュアップリコメンデーションを支援してもよい。例えば、プロジェクトが１つのＡＰＩエンドポイントを使用中であって、プロジェクトに関係があるキーワードのリストが存在する場合に、キーワードに基づいて、利用可能な（及び一番使われている）ＡＰＩマッシュアップのリストも、ユーザに対して積極的にリコメンドされてよい。
【００５５】
本明細書で記載されるＡＰＩマッシュアップリコメンデーションシステムの１つの利点は、ＡＰＩマッシュアップが「グラウンドトゥルース」（ground-truth）の現実世界のオープンソースプロジェクトに基づきリコメンドされる点である。膨大な数のソフトウェアプロジェクトの解析と、ホストＵＲＬ及びエンドポイントの両方を確認することとにより、システムは、それらのＡＰＩマッシュアップが有効であることを保証することができる。これは、開発者が、様々な他のソフトウェアアプリケーションで使用されるコード例から直接学ぶことを可能にする。更に、収集されたＡＰＩマッシュアップデータベースは、既存のＡＰＩマッシュアップシステムの多様性を改善するために使用され得る。更に、開発者は、ソフトウェアリポジトリ内のキーワード又は人気を用いてデータベース内のＡＰＩマッシュアップを迅速にソートすることができる。いくつかの実施形態はまた、エンドポイントレベルのＡＰＩマッシュアップリコメンデーションも提供するが、一方、ＰｒｏｇｒａｍｍａｂｌｅＷｅｂのような既存のＡＰＩマッシュアップシステムは、ＡＰＩレベルのマッシュアップしか提供しない。更に、本明細書で記載されるユーザインターフェイスは、ユーザがＡＰＩマッシュアップを効率的に探索することを可能にする効率的な階層的検索メカニズムを可能にする。
【００５６】
いくつかの実施形態で、本明細書で記載されるシステム及び方法はまた、ＡＰＩマッシュアップを、現実世界のアプリケーションにおけるそれらの使用の頻度又は人気に基づき提供してもよい。これはまた、ユーザがＡＰＩマッシュアップの使用をより良く理解することを可能にする。
【００５７】
図１１は、本開示で記載される少なくとも１つの実施形態に従って、例となるコンピューティングシステム１１００を表す。システム１１００は、ネットワーク上で通信するよう構成された如何なる適切なシステム、装置、又はデバイスも含んでよい。コンピューティングシステム１１００は、プロセッサ１１１０、メモリ１１２０、データストレージ１１３０、及び通信ユニット１１４０を含んでよく、これらは全て、通信上結合されてよい。データストレージ１１３０は、ソフトウェアプロジェクト、ＡＰＩ文書、コンピュータソースコード、等のような様々なタイプのデータを含んでよい。
【００５８】
一般に、プロセッサ１１１０は、様々なコンピュータハードウェア又はソフトウェアモジュールを含む如何なる適切な特別目的又は汎用のコンピュータ、コンピューティングエンティティ、又は処理デバイスも含んでよく、如何なる適用可能なコンピュータ可読記憶媒体でも記憶される命令を実行するよう構成されてよい。例えば、プロセッサ１１１０は、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、あるいは、プログラム命令を解釈及び／若しくは実行するよう並びに／又はデータを処理するよう構成されたその他のデジタル又はアナログ回路を含んでよい。
【００５９】
図１１では単一のプロセッサとして表されているが、プロセッサ１１１０は、本開示で記載される任意の数の動作を個別的に又は集合的に実行するよう構成される、任意の数のネットワーク又は物理的位置にわたって分配された任意の数のプロセッサを含んでよい。いくつかの実施形態で、プロセッサ１１１０は、メモリ１１２０、データストレージ１１３０、又はメモリ１１２０及びデータストレージ１１３０に記憶されているプログラム命令を解釈及び／若しくは実行し並びに／又はデータを処理してよい。いくつかの実施形態で、プロセッサ１１１０は、データストレージ１１３０からプログラム命令をフェッチし、プログラム命令をメモリ１１２０にロードしてよい。
【００６０】
プログラム命令がメモリ１１２０にロードされた後、プロセッサ１１１０は、図２、図３、図４Ａ、図４Ｂ、及び図５の方法２００、３００、４００、４５０、又は５００を夫々実行するための命令のような、プログラム命令を実行してよい。例えば、プロセッサ１１１０は、様々なソフトウェアプロジェクトから情報を取り出すこと、２つのＡＰＩのマシン読み取り可能なＡＰＩマッシュアップを識別すること、及び適切なＡＰＩマッシュアップをユーザにリコメンドすることに関する命令を取得してよい。
【００６１】
メモリ１１２０及びデータストレージ１１３０は、コンピュータ実行可能命令又はデータ構造を搬送又は記憶するコンピュータ可読記憶媒体又は１以上のコンピュータ可読記憶媒体を含んでよい。そのようなコンピュータ可読記憶媒体は、プロセッサ１１１０のような汎用又は特別目的のコンピュータによってアクセスされ得る如何なる利用可能な媒体であってもよい。いくつかの実施形態で、コンピューティングシステム１１００は、メモリ１１２０及びデータストレージ１１３０のどちらかを含んでも含まなくてもよい。
【００６２】
例として、制限なしに、そのようなコンピュータ可読記憶媒体は、ランダムアクセスメモリ（ＲＡＭ）、リードオンリーメモリ（ＲＯＭ）、電気的消去可能なプログラム可能リードオンリーメモリ（ＥＥＰＲＯＭ）、コンパクトディスク型リードオンリーメモリ（ＣＤ−ＲＯＭ）若しくは他の光学ディスクストレージ、磁気ディスクストレージ若しくは他の磁気記憶デバイス、フラッシュメモリデバイス（例えば、ソリッドステートメモリデバイス）、又はコンピュータ実行可能命令若しくはデータの形で所望のプログラムコードを搬送若しくは記憶するために使用されてよく、汎用若しくは特別目的のコンピュータによってアクセスされ得るその他の記憶媒体を含む非一時的なコンピュータ可読記憶媒体を含んでよい。上記のものの組み合わせも、コンピュータ可読記憶媒体の範囲内に含まれ得る。コンピュータ実行可能命令は、例えば、プロセッサ１１１０に特定の動作又は動作群を実行させるよう構成された命令及びデータを含んでよい。
【００６３】
通信ユニット１１４０は、ネットワーク上で情報を送信又は受信するよう構成される如何なるコンポーネント、デバイス、システム、又はそれらの組み合わせも含んでよい。いくつかの実施形態で、通信ユニット１１４０は、他の場所若しくは同じ場所にある他のデバイス、又は同じシステム内の他のコンポーネントと通信してよい。例えば、通信ユニット１１４０は、モデム、ネットワークカード（有線若しくは無線）、光通信デバイス、赤外線通信デバイス、無線通信デバイス（例えば、アンテナ）、及び／又はチップセット（例えば、Ｂｌｕｅｔｏｏｔｈ（登録商標）デバイス、８０２．６デバイス（例えば、メトロポリタンエリアネットワーク（ＭＡＮ））、ＷｉＦｉデバイス、ＷｉＭａｘデバイス、セルラー通信設備、若しくは他）、等を含んでよい。通信ユニット１１４０は、データが、本開示で記載されるネットワーク及び／又は何らかの他のデバイス若しくはシステムと交換されることを可能にし得る。例えば、通信ユニット１１４０は、システム１１００が、コンピューティングデバイス及び／又は他のネットワークのような、他のシステムと通信することを可能にし得る。
【００６４】
本開示の適用範囲から外れることなしに、システム１１００に対して変更、追加、又は削除が行われてよい。例えば、データストレージ１１３０は、複数の場所に配置されて、ネットワークを通じてプロセッサ１１１０によってアクセスされる多数の異なる記憶媒体であってもよい。
【００６５】
上述されたように、本開示で記載される実施形態は、以下で更に詳細に説明されるように、様々なコンピュータハードウェア又はソフトウェアモジュールを含む特別目的又は汎用のコンピュータ（例えば、図１１のプロセッサ１１１０）の使用を含んでよい。更に、上述されたように、本開示で記載される実施形態は、コンピュータ実行可能命令又はデータ構造を搬送又は記憶するコンピュータ可読媒体（例えば、図１１のメモリ１１２０又はデータストレージ１１３０）を用いて実装されてよい。
【００６６】
本開示で使用されるように、「モジュール」又は「コンポーネント」との語は、モジュール若しくはコンポーネントのアクション、及び／又はコンピューティングシステムの汎用のハードウェア（例えば、コンピュータ可読媒体、処理デバイス、若しくはその他のハードウェア）によって記憶及び／又は実行され得るソフトウェアオブジェクト若しくはソフトウェアルーチンを実行するよう構成された特定のハードウェア実施を指し得る。いくつかの実施形態で、本開示で記載される種々のコンポーネント、モジュール、エンジン、及びサービスは、コンピューティングシステムで（例えば、別個のスレッドとして）実行されるオブジェクト又はプロセスとして実施されてもよい。本開示で記載されるシステム及び方法の一部は、（汎用のハードウェアによって記憶及び／又は実行される）ソフトウェアにおいて実施されるものとして概して記載されているが、特定のハードウェア実施又はソフトウェアと特定のハードウェア実施との組み合わせも可能であり企図される。本明細書中、「コンピューティングエンティティ」は、本開示で先に定義されている任意のコンピューティングシステム、又はコンピューティングシステムで実行される任意のモジュール若しくはモジュールの組み合わせであってよい。
【００６７】
当たり前のこととして、図面に表されている様々な特徴は、実寸通りでないことがある。本開示で提示されている実例は、何らかの特定の装置（例えば、デバイス、システム、等）又は方法の実際の図であるよう意図されず、本開示の様々な実施形態について記載するために用いられる理想的な表現にすぎない。従って、様々な特徴の寸法は、明りょうさのために任意に拡大又は縮小されることがある。更に、図面の一部は、明りょうさのために簡略化されることがある。よって、図面は、所与の装置（例えば、デバイス）の構成要素の全部又は特定の方法の全部の動作を表さないことがある。
【００６８】
本開示で、特に添付の特許請求の範囲（例えば、添付の特許請求の本文）で使用される語は、一般的に、“非限定的な（open）”用語として意図されている（例えば、語「含んでいる（including）」は、“〜を含んでいるが、〜に制限されない”との意に解釈されるべきであり、語「備えている（having）」は、「少なくとも〜を備えている」との意に解釈されるべきであり、語「含む（includes）」は、“〜を含むが、〜に制限されない”との意に解釈されるべきである、等。）。
【００６９】
更に、導入されたクレーム記載（introduced  claim  recitation）において特定の数が意図される場合、そのような意図は当該クレーム中に明確に記載され、そのような記載がない場合は、そのような意図も存在しない。例えば、理解を促すために、後続の添付された特許請求の範囲では、「少なくとも１つの（at  least  one）」及び「１以上の（one  or  more）」といった導入句を使用し、クレーム記載を導入することがある。
【００７０】
更には、導入されたクレーム記載において特定の数が明示されている場合であっても、そのような記載は、通常、少なくとも記載された数を意味するように解釈されるべきであることは、当業者には理解されるであろう（例えば、他に修飾語のない、単なる「２つの記載事項」という記載がある場合、この記載は、少なくとも２つの記載事項、又は２つ以上の記載事項を意味する。）。更に、「Ａ、Ｂ及びＣ等のうち少なくとも１つ」又は「Ａ、Ｂ及びＣ等のうちの１つ以上」に類する表記が使用される場合、一般的に、そのような構造は、Ａのみ、Ｂのみ、Ｃのみ、ＡとＢの両方、ＡとＣの両方、ＢとＣの両方、及び／又はＡとＢとＣの全て、等を含むよう意図される。
【００７１】
更に、２つ以上の選択可能な用語を表す如何なる離接語及び／又は離接句も、明細書、特許請求の範囲、又は図面のいずれであろうと、それら用語のうちの１つ、それらの用語のうちのいずれか、あるいは、それらの用語の両方を含む可能性を意図すると理解されるべきである。例えば、「Ａ又はＢ」という句は、「Ａ又はＢ」、あるいは、「Ａ及びＢ」の可能性を含むことが理解されるべきである。
【００７２】
しかし、このような句を使用するからといって、「a」又は「an」といった不定冠詞によりクレーム記載を導入した場合に、たとえ同一のクレーム内に、「１つ以上の」又は「少なくとも１つの」といった導入句と「a」又は「an」といった不定冠詞との両方が含まれるとしても、当該導入されたクレーム記載を含む特定のクレームが、当該記載事項を１しか含まない例に限定されるということが示唆されると解釈されるべきではない（例えば、「a」及び／又は「an」は、「少なくとも１つの」又は「１つ以上の」を意味すると解釈されるべきである。）。定冠詞を使用してクレーム記載を導入する場合にも同様のことが当てはまる。
【００７３】
加えて、語「第１（first）」、「第２（second）」、「第３（third）」等の使用は、要素の特定の順序又は数を示すために本願で必ずしも使用されているわけではない。一般に、語「第１」、「第２」、「第３」等は、異なる要素どうしを総称的な識別子として区別するために使用される。語「第１」、「第２」、「第３」等が特定の順序を示すとの明示がない限りは、それらの語が特定の順序を示すと理解されるべきではない。更には、語「第１」、「第２」、「第３」等が要素の特定の数を示すとの明示がない限りは、それらの語が要素の特定の数を示すと理解されるべきではない。例えば、第１のウィジェットは、第１の側面を有するものとして記載されることがあり、第２のウィジェットは、第２の側面を有するものとして記載されることがある。第２のウィジェットに対する語「第２の側面」の使用は、第２のウィジェットのその側面を第１のウィジェットの「第１の側面」と区別するためであって、第２のウィジェットが２つの側面を有していることを示すためではない。
【００７４】
ここで挙げられている全ての例及び条件付き言語は、当該技術の促進に本発明者によって寄与される概念及び本発明を読者が理解するのを助ける教育上の目的を意図され、そのような具体的に挙げられている例及び条件に制限されないと解釈されるべきである。本開示の実施形態が詳細に記載されてきたが、様々な変更、置換、及び代替が、本開示の主旨及び適用範囲から逸脱することなしに行われてよい。
【００７５】
上記の実施形態に加えて、以下の付記を開示する。
（付記１）
アプリケーションプログラミングインターフェイス（ＡＰＩ）リポジトリから複数のコンピュータ可読ソースコードを収集することと、
前記コンピュータ可読ソースコードに対してＡＰＩ呼び出しコードスライシングを実行することと、
前記ＡＰＩ呼び出しコードスライシングで識別されたＡＰＩ呼び出しコードの夫々についてＡＰＩホスト及びエンドポイントを取り出すことと、
前記取り出されたＡＰＩホスト及びエンドポイントに基づきＡＰＩマッシュアップデータベースをコンパイルすることと、
ユーザインターフェイスで前記ＡＰＩマッシュアップデータベースのリコメンドされるＡＰＩマッシュアップを提供することと
を有する方法。
（付記２）
前記ＡＰＩリポジトリは、ＧｉｔＨｕｂを有する、
付記１に記載の方法。
（付記３）
前記複数のコンピュータ可読ソースコードを収集することは、
プログラミング言語の複数のＡＰＩ呼び出しメソッドを識別することと、
前記プログラミング言語の前記識別されたＡＰＩ呼び出しメソッドを用いて前記ＡＰＩリポジトリに対してコード検索動作を実行することと、
２つ以上のＡＰＩ呼び出しを含むコード検索を識別するように前記コード検索動作の結果にフィルタをかけることと
を有する、
付記１に記載の方法。
（付記４）
前記複数のコンピュータ可読ソースコードを収集することは、
前記コード検索動作の結果内で、２つ以上のＡＰＩ呼び出しを含む単一のコードファイルを識別することと、
前記コード検索動作の結果内で、複数のＡＰＩ呼び出しを含む単一のプロジェクトについての複数のコードファイルを識別することと
を更に有する、
付記３に記載の方法。
（付記５）
前記ＡＰＩ呼び出しコードスライシングは、
２つ以上のＡＰＩ呼び出しを含むと識別子された単一のコードファイルについて、
前記単一のコードファイルにおいてＡＰＩ呼び出しメソッドコードを見つけるように前記単一のコードファイルの抽象構文木をトラバースすることと、
前記ＡＰＩ呼び出しメソッドコードに無関係である前記単一のコードファイル内のコードステートメントを除くことと
を有する、
付記４に記載の方法。
（付記６）
前記ＡＰＩ呼び出しコードスライシングは、
複数のＡＰＩ呼び出しを含む単一のプロジェクトについての複数のコードファイルについて、
前記複数のコードファイルにおいて複数のユニフォームリソースロケータ（ＵＲＬ）を収集することと、
複数のホストＵＲＬを識別するように前記複数のＵＲＬにフィルタをかけることと、
前記複数のホストＵＲＬを含み且つ２つ以上のＵＲＬを含むコードファイルを識別するように前記複数のコードファイルにフィルタをかけることと
を有する、
付記５に記載の方法。
（付記７）
リコメンドされるＡＰＩマッシュアップに対するユーザ定義の検索パラメータをユーザから受け取ることを更に有し、
前記リコメンドされるＡＰＩマッシュアップは、前記ユーザ定義の検索パラメータに基づき識別される、
付記１に記載の方法。
（付記８）
前記ユーザ定義の検索パラメータは、ホストＵＲＬ、エンドポイント、ＡＰＩキーワード、及びＡＰＩリポジトリを含むグループから選択される、
付記７に記載の方法。
（付記９）
命令を含む１以上の非一時的なコンピュータ可読媒体であって、
前記命令は、１以上のプロセッサによって実行される場合に、システムに、
アプリケーションプログラミングインターフェイス（ＡＰＩ）リポジトリから複数のコンピュータ可読ソースコードを収集することと、
前記コンピュータ可読ソースコードに対してＡＰＩ呼び出しコードスライシングを実行することと、
前記ＡＰＩ呼び出しコードスライシングで識別されたＡＰＩ呼び出しコードの夫々についてＡＰＩホスト及びエンドポイントを取り出すことと、
前記取り出されたＡＰＩホスト及びエンドポイントに基づきＡＰＩマッシュアップデータベースをコンパイルすることと、
ユーザインターフェイスで前記ＡＰＩマッシュアップデータベースのリコメンドされるＡＰＩマッシュアップを提供することと
を含む動作を実行させる、前記コンピュータ可読媒体。
（付記１０）
前記ＡＰＩリポジトリは、ＧｉｔＨｕｂを有する、
付記９に記載のコンピュータ可読媒体。
（付記１１）
前記複数のコンピュータ可読ソースコードを収集することは、
プログラミング言語の複数のＡＰＩ呼び出しメソッドを識別することと、
前記プログラミング言語の前記識別されたＡＰＩ呼び出しメソッドを用いて前記ＡＰＩリポジトリに対してコード検索動作を実行することと、
２つ以上のＡＰＩ呼び出しを含むコード検索を識別するように前記コード検索動作の結果にフィルタをかけることと
を有する、
付記９に記載のコンピュータ可読媒体。
（付記１２）
前記複数のコンピュータ可読ソースコードを収集することは、
前記コード検索動作の結果内で、２つ以上のＡＰＩ呼び出しを含む単一のコードファイルを識別することと、
前記コード検索動作の結果内で、複数のＡＰＩ呼び出しを含む単一のプロジェクトについての複数のコードファイルを識別することと
を更に有する、
付記１１に記載のコンピュータ可読媒体。
（付記１３）
前記ＡＰＩ呼び出しコードスライシングは、
２つ以上のＡＰＩ呼び出しを含むと識別子された単一のコードファイルについて、
前記単一のコードファイルにおいてＡＰＩ呼び出しメソッドコードを見つけるように前記単一のコードファイルの抽象構文木をトラバースすることと、
前記ＡＰＩ呼び出しメソッドコードに無関係である前記単一のコードファイル内のコードステートメントを除くことと
を有する、
付記１２に記載のコンピュータ可読媒体。
（付記１４）
前記ＡＰＩ呼び出しコードスライシングは、
複数のＡＰＩ呼び出しを含む単一のプロジェクトについての複数のコードファイルについて、
前記複数のコードファイルにおいて複数のユニフォームリソースロケータ（ＵＲＬ）を収集することと、
複数のホストＵＲＬを識別するように前記複数のＵＲＬにフィルタをかけることと、
前記複数のホストＵＲＬを含み且つ２つ以上のＵＲＬを含むコードファイルを識別するように前記複数のコードファイルにフィルタをかけることと
を有する、
付記１３に記載のコンピュータ可読媒体。
（付記１５）
前記動作は、リコメンドされるＡＰＩマッシュアップに対するユーザ定義の検索パラメータをユーザから受け取ることを更に有し、
前記リコメンドされるＡＰＩマッシュアップは、前記ユーザ定義の検索パラメータに基づき識別される、
付記９に記載のコンピュータ可読媒体。
（付記１６）
前記ユーザ定義の検索パラメータは、ホストＵＲＬ、エンドポイント、ＡＰＩキーワード、及びＡＰＩリポジトリを含むグループから選択される、
付記１５に記載のコンピュータ可読媒体。
（付記１７）
１以上のプロセッサと、
命令を含む１以上の非一時的なコンピュータ可読媒体と
を有し、
前記命令は、１以上のプロセッサによって実行される場合に、システムに、
アプリケーションプログラミングインターフェイス（ＡＰＩ）リポジトリから複数のコンピュータ可読ソースコードを収集することと、
前記コンピュータ可読ソースコードに対してＡＰＩ呼び出しコードスライシングを実行することと、
前記ＡＰＩ呼び出しコードスライシングで識別されたＡＰＩ呼び出しコードの夫々についてＡＰＩホスト及びエンドポイントを取り出すことと、
前記取り出されたＡＰＩホスト及びエンドポイントに基づきＡＰＩマッシュアップデータベースをコンパイルすることと、
ユーザインターフェイスで前記ＡＰＩマッシュアップデータベースのリコメンドされるＡＰＩマッシュアップを提供することと
を含む動作を実行させる、
システム。
（付記１８）
前記複数のコンピュータ可読ソースコードを収集することは、
プログラミング言語の複数のＡＰＩ呼び出しメソッドを識別することと、
前記プログラミング言語の前記識別されたＡＰＩ呼び出しメソッドを用いて前記ＡＰＩリポジトリに対してコード検索動作を実行することと、
２つ以上のＡＰＩ呼び出しを含むコード検索を識別するように前記コード検索動作の結果にフィルタをかけることと
を有する、
付記１７に記載のシステム。
（付記１９）
前記複数のコンピュータ可読ソースコードを収集することは、
前記コード検索動作の結果内で、２つ以上のＡＰＩ呼び出しを含む単一のコードファイルを識別することと、
前記コード検索動作の結果内で、複数のＡＰＩ呼び出しを含む単一のプロジェクトについての複数のコードファイルを識別することと
を更に有する、
付記１８に記載のシステム。
（付記２０）
前記動作は、リコメンドされるＡＰＩマッシュアップに対するユーザ定義の検索パラメータをユーザから受け取ることを更に有し、
前記リコメンドされるＡＰＩマッシュアップは、前記ユーザ定義の検索パラメータに基づき識別される、
付記１７に記載のシステム。
【符号の説明】
【００７６】
１００    システム
１１０    ＡＰＩマッシュアップリコメンデーションシステム
１１５    ＡＰＩマッシュアップデータベース
１２０    プロジェクトサーバ
１２２    ソフトウェアプロジェクト
１２４    説明書
１２６    コードスニペット
１２８    コンピュータソースコード
１３０    ＡＰＩマッシュアップ
１３５    ユーザインターフェイス
１４０    ユーザデバイス
１１００  コンピューティングデバイス
１１１０  プロセッサ
１１２０  メモリ
１１３０  データストレージ
１１４０  通信ユニット
【図１】
2020126641.tif 000003
【図２】
2020126641.tif 000004
【図３】
2020126641.tif 000005
【図４Ａ】
2020126641.tif 000006
【図４Ｂ】
2020126641.tif 000007
【図５】
2020126641.tif 000008
【図６】
2020126641.tif 000009
【図７】
2020126641.tif 000010
【図８】
2020126641.tif 000011
【図９】
2020126641.tif 000012
【図１０】
2020126641.tif 000013
【図１１】
2020126641.tif 000014