JP6473442B2 - アプリケーション・プログラミング・インターフェースへのランタイム・アクセスの制御 - Google Patents

アプリケーション・プログラミング・インターフェースへのランタイム・アクセスの制御 Download PDF

Info

Publication number
JP6473442B2
JP6473442B2 JP2016510711A JP2016510711A JP6473442B2 JP 6473442 B2 JP6473442 B2 JP 6473442B2 JP 2016510711 A JP2016510711 A JP 2016510711A JP 2016510711 A JP2016510711 A JP 2016510711A JP 6473442 B2 JP6473442 B2 JP 6473442B2
Authority
JP
Japan
Prior art keywords
api
programming interface
application programming
visibility
application
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.)
Active
Application number
JP2016510711A
Other languages
English (en)
Other versions
JP2016517120A5 (ja
JP2016517120A (ja
Inventor
トロフィン,ミルチャ
デュスド,パトリック
マーティン,ルディ
ハンビー,ジョン・ローレンス
ストレホフスキー,ミカル
ライトン,デーヴィッド・チャールズ
カナモリ,アツシ
ハンナ,ファディ・エム
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2016517120A publication Critical patent/JP2016517120A/ja
Publication of JP2016517120A5 publication Critical patent/JP2016517120A5/ja
Application granted granted Critical
Publication of JP6473442B2 publication Critical patent/JP6473442B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/541Interprogram communication via adapters, e.g. between incompatible applications
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/449Object-oriented method invocation or resolution

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Stored Programmes (AREA)
  • User Interface Of Digital Computer (AREA)

Description

コンピュータ・システムおよび関係する技術は、多くの社会の側面に影響を及ぼす。実際、コンピュータ・システムの情報を処理する能力は、我々が生活し仕事する有様を一変させた。現在、コンピュータ・システムは、コンピュータ・システムの出現以前には手作業で行われていたタスク(例えば、文書処理、計画策定、会計等)のホストを実行するのが極普通である。更に近年になって、コンピュータ・システムが相互に結合され、また他の電子デバイスに結合され、有線およびワイヤレス・コンピュータ・ネットワーク双方を形成し、これを通じてコンピュータ・システムおよび他の電子デバイスが電子データを転送できるようにした。したがって、多くの計算タスクの実行は、多数の異なるコンピュータ・システムおよび/または多数の異なるコンピューティング環境にわたって分散される。
コード開発の段階では、ソフトウェア開発者は、多くの場合、ソフトウェア・コンポーネント間の通信を容易にするために、アプリケーション・プログラミング・インターフェース(API)を使用する。APIは、当該APIに関連付けられたルーチン、データ構造、オブジェクト・クラス、および変数についての仕様を含む。したがって、1人の開発者は、API仕様を使用することができ、その結果、他の開発者によって書かれたAPIをどのようにコールするか決定することができる。
多くの場合、1人のソフトウェア開発者(ライブラリ開発者)は、関係する多数のAPIを有するコードを開発し、指定された機能を提供するライブラリにこれらAPIをグループ化する。ソフトウェア開発者は、ライブラリ内部における対応するAPIをパブリックAPIとして公開する(expose)ことによって、この機能の一部を他のプログラムに利用可能にすることができる。このように、他の開発者(アプリケーション開発者)は、彼らのコード内部から、パブリックAPIに対するコールによって、利用可能な機能の部分にアクセスすることができる。また、ソフトウェア開発者は、機能の他の部分をプライベートのものとして維持することもできる。プライベート機能は、ライブラリ内部においてAPI間で内部的に、または他のライブラリにおける他のプライベートAPIにアクセスするために使用することができる。プライベート機能を提供するAPIは、他のプログラムに直接公開されることはない。
しかしながら、多くのランタイム環境は、コードがサード・パーティのライブラリにおける任意のAPIを動的にコールすることを許可する(例えば、メタデータにアクセスするためにリフレクション(reflection)を使用する)。したがって、アプリケーション・プログラムまたはライブラリは、他のライブラリにおけるプライベートAPIを識別およびコールすることができる。ソフトウェア開発者がAPIをプライベートに維持するとき、ソフトウェア開発者は、そのAPIが外部からコールされることを予期しない。生憎、例えば、プライベート・メソッドの名称変更または除去というような、このようなライブラリの内部実装の詳細に対する提供サービス(servicing)変更またはバージョン(versioning)変更が、これらのライブラリを使用するアプリケーションにおいて変更点を生ずる潜在性を有する。
加えて、動的コールに対するランタイム・サポートは、サイズおよびワーキング・セットのオーバーヘッド(例えば、メタデータ)を伴う(carry)。APIが実際に動的にコールされるか否かには関係なく、サイズおよびワーキング・セット・オーバーヘッドは、API(プライベートまたはパブリック)のために維持される。コールされないAPIのためにサイズおよびワーキング・セット・オーバーヘッドを維持すると、不必要にコンピューティング・リソースを消費ことになる。
本発明は、アプリケーション・プログラミング・インターフェースへのランタイム・アクセスを制御するための方法、システム、およびコンピュータ・プログラム製品に関するものである。本発明の実施形態は、アプリケーション・プログラミング・インターフェース(API)に対してランタイム・アクセスを制御することを含む。ランタイム環境は、動的アクセス要求に(例えば、リフレクションまたは他の動的コール技法によって)、APIタイプに基づいて、APIに対するデフォルト可視性(default visibility)を供給する。例えば、非パブリックAPIに対するデフォルト可視性は、動的アクセスを禁止することができる。
ライブラリにおいて組み合わされた一組のAPIがアクセスされる。この一組のAPIは、1つ以上のパブリックAPIおよび1つ以上の非パブリックAPIを含む。動的アクセス要求に対して提供されたデフォルト可視性が変更されることになるAPIが、一組のAPIの中から識別される。
APIに対するデフォルト可視性は、APIに属性を適用することによって変更される。属性は、APIに対する変更された可視性が動的アクセス要求に提供されることになることを、ランタイム時においてランタイム環境に示す。可視性の変更は、デフォルトでは動的アクセスが許可されない非パブリックAPIへの動的アクセスを許可することを含むことができる。
他の実施形態は、アクセス可能なAPIに対するデフォルト可視性を低減させることを含む。アプリケーションのアプリケーション・コードがアクセスされる。このアプリケーション・コードは、ライブラリにおいて組み合わされた1つ以上のアクセス可能なAPIを参照する。アプリケーション・コード内部において参照されるアクセス可能なAPIが識別される。アクセス可能なAPIは、1つ以上のアクセス可能なAPIの中から選択される。
アクセス可能なAPIが、ランタイムにおいて動的にアクセスされることにはならないと判断する。アクセス可能なAPIに対するデフォルト可視性を低減させるために、アクセス可能なAPIに属性が適用される。この属性は、アクセス可能なAPIに対する低減可視性が動的アクセス要求に提供されることになることを、ランタイム時においてランタイム環境に示す(例えば、リフレクションまたは他の動的コール技法によって)。APIに対する可視性を低減させることにより、対応して、メタデータの生成を減らすことができる。実施形態の中には、APIに対する可視性を低減させることは、このAPIに対する動的アクセスを禁止することを含むものもある。
更に他の実施形態は、コンシューマに、APIに対する指定可視性を提供することを含む。ランタイム環境において、実行可能コードが実行される。実行可能コードは、アプリケーション・コードから導出される。実行可能コードの実行中に、コンシューマから、この実行可能コードの一部を実行するための動的コールを受ける。この実行可能コードの一部は、ライブラリ内部においてAPIを参照するアプリケーション・コードの一部から導出される。このAPIに対するランタイム・デフォルト可視性は、APIのタイプに基づいてアクセスされる。
APIに適用される任意の属性がアクセスされる。APIに適用される属性は、APIに対するランタイム・デフォルト可視性を変更するというAPIの作者による希望を示すことができる。アプリケーション・コードの一部に適用される任意の属性がアクセスされる。アプリケーション・コードの一部に適用される属性は、APIに適用される任意の属性によって変更され、ランタイム・デフォルト可視性によって示されるのよりも少ない可視性をAPIに対して提供するという、アプリケーション・コードの作者による希望を示すことができる。
APIに対する算出可視性(calculated visibility)は、APIに対するランタイム・デフォルト可視性、APIに適用される任意の属性、およびAPIを参照するアプリケーション・コードの一部に適用される任意の属性の内1つ以上に基づいて決定される。動的コールには、このAPIに対する算出可視性が提供される。
この摘要は、詳細な説明において以下で更に説明する概念から選択したものを、簡略化した形態で記載するために設ける。この摘要は、特許請求する主題の主要な特徴や必須の特徴を特定することを意図するのではなく、特許請求する主題の範囲を判断するときに補助として用いられることを意図するのでもない。
本発明の更に他の特徴および利点について、以下に続く説明において明記するが、これらは部分的にこの説明から明らかになり、または本発明の実施によって習得することができる。本発明の特徴および利点は、添付された特許請求の範囲において特定的に指摘される手段(instrument)および組み合わせによって実現し取得することができる。本発明のこれらおよびその他の特徴は、以下の説明および添付された特許請求の範囲から一層完全に明白となり、あるいは以下に明記するように本発明の実施によって習得することができる。
本発明の以上で列挙したおよび他の利点ならびに特徴を得ることができる様態について説明するために、添付図面に示される具体的な実施形態を参照して、以上で端的に説明した本発明について、更に特定した説明を行う。これらの図面は本発明の典型的な実施形態を描画するに過ぎず、したがってその範囲の限定であると見なしてはならないことを理解の上で、添付図面の使用を通じて、更に具体性をもってそして詳細に、本発明について説明する。
図1は、アプリケーション・プログラミング・インターフェースに対するランタイム・アクセス制御を容易にする一例のコンピュータ・アーキテクチャを示す。 図2は、アプリケーション・プログラミング・インターフェースに対するランタイム・アクセスを制御する一例の方法のフロー・チャートを示す。 図3は、アクセス可能なアプリケーション・プログラミング・インターフェースに対するデフォルト可視性を低減させるのを容易にするコンピュータ・アーキテクチャの一例を示す。 図4は、アクセス可能なアプリケーション・プログラミング・インターフェースに対するデフォルト可視性を低減させる一例の方法のフロー・チャートを示す。 図5は、アプリケーション・プログラミング・インターフェースに対する指定可視性をコンシューマに提供するのを容易にする一例のコンピュータ・アーキテクチャを示す。 図6は、アプリケーション・プログラミング・インターフェースに対する指定可視性をコンシューマに提供する方法の一例のフロー・チャートを示す。
本発明は、アプリケーション・プログラミング・インターフェースに対するランタイム・アクセスを制御するための方法、システム、およびコンピュータ・プログラム製品にまで及ぶ。本発明の実施形態は、アプリケーション・プログラミング・インターフェース(API)に対してランタイム・アクセスを制御することを含む。ランタイム環境は、動的アクセス要求に(例えば、リフレクションまたは他の動的コール技法によって)、APIタイプに基づいて、APIに対するデフォルト可視性(default visibility)を提供する。例えば、非パブリックAPIに対するデフォルト可視性は、動的アクセスを禁止することができる。
ライブラリにおいて組み合わせられた一組のAPIがアクセスされる。この一組のAPIは、1つ以上のパブリックAPIおよび1つ以上の非パブリックAPIを含む。動的アクセス要求に対して提供されたデフォルト可視性が変更されるべきAPIが、一組のAPIの中から識別される。
属性をAPIに適用することによって、APIに対するデフォルト可視性が変更される。属性は、APIに対する変更可視性が動的アクセス要求に提供されることになることを、ランタイム時においてランタイム環境に示す。可視性の変更は、デフォルトでは動的アクセスが許可されない非パブリックAPIに対する動的アクセスを許可することを含むことができる。
他の実施形態は、アクセス可能なAPIに対するデフォルト可視性を低減させることを含む。アプリケーションのアプリケーション・コードがアクセスされる。このアプリケーション・コードは、ライブラリにおいて組み合わされた1つ以上のアクセス可能なAPIを参照する。アプリケーション・コード内部において参照されるアクセス可能なAPIが識別される。アクセス可能なAPIは、1つ以上のアクセス可能なAPIの中から選択される。
アクセス可能なAPIが、ランタイムにおいて動的にアクセスされることにはならないと判断する。アクセス可能なAPIに対するデフォルト可視性を低減させるために、アクセス可能なAPIに属性が適用される。この属性は、アクセス可能なAPIに対する低減可視性が動的アクセス要求に提供されることになることを、ランタイム時においてランタイム環境に示す(例えば、リフレクションまたは他の動的コール技法によって)。APIに対する可視性を低減させることにより、対応して、メタデータの生成を減らすことができる。実施形態の中には、APIに対する可視性を低減させることは、このAPIに対する動的アクセスを禁止することを含むものもある。
更に他の実施形態は、コンシューマに、APIに対する指定可視性を提供することを含む。ランタイム環境において、実行可能コードが実行される。実行可能コードは、アプリケーション・コードから導出される。実行可能コードの実行中に、コンシューマから、この実行可能コードの一部を実行するための動的コールを受ける。この実行可能コードの一部は、ライブラリ内部においてAPIを参照するアプリケーション・コードの一部から導出される。このAPIに対するランタイム・デフォルト可視性は、APIのタイプに基づいてアクセスされる。
APIに適用される任意の属性がアクセスされる。APIに適用される属性は、APIに対するランタイム・デフォルト可視性を変更するという、APIの作者による希望を示すことができる。アプリケーション・コードの一部に適用される任意の属性がアクセスされる。アプリケーション・コードの一部に適用される属性は、APIに適用される任意の属性によって変更されて、ランタイム・デフォルト可視性によって示されるよりのも少ない可視性をAPIに対して提供するという、アプリケーション・コードの作者による希望を示すことができる。
APIに対する算出可視性は、APIに対するランタイム・デフォルト可視性、APIに適用される任意の属性、およびAPIを参照するアプリケーション・コードの一部に適用される任意の属性の内1つ以上に基づいて決定される。動的コールには、このAPIに対する算出可視性が提供される。
本発明の実施形態は、以下で更に詳細に論ずるように、例えば、1つ以上のプロセッサおよびシステム・メモリというような、コンピュータ・ハードウェアを含む特定用途または汎用コンピュータを含むこと、または利用することができる。また、本発明の範囲内における実施形態は、コンピュータ実行可能命令および/またはデータ構造を搬送あるいは格納するための物理的およびその他のコンピュータ読み取り可能媒体も含む。このような、コンピュータ読み取り可能媒体は、汎用または特殊目的コンピュータ・システムによってアクセスすることができる任意の入手可能な媒体とすることができる。コンピュータ実行可能命令を格納するコンピュータ読み取り可能媒体は、コンピュータ記憶媒体(デバイス)である。コンピュータ実行可能命令を搬送するコンピュータ読み取り可能媒体は、送信媒体である。つまり、一例として、そして限定ではなく、本発明の実施形態は、少なくとも2つの全く異なる種類のコンピュータ読み取り可能媒体、即ち、コンピュータ記憶媒体(デバイス)および送信媒体を含むことができる。
コンピュータ記憶媒体(デバイス)は、RAM、ROM、EEPROM、CD−ROM、ソリッド・ステート・ドライブ(「SSD」)(例えば、RAMに基づく)、フラッシュ・メモリ、位相変更メモリ(「PCM: phase-change memory」)、他のタイプのメモリ、他の光ディスク・ストレージ、磁気ディスク・ストレージまたは他の磁気記憶デバイス、あるいは、所望のプログラム・コード手段をコンピュータ実行可能命令の形態で格納するため、またはデータ構造を格納するために使用することができ、汎用または特定用途のコンピュータによってアクセスすることができる任意の他の媒体を含む。
「ネットワーク」とは、コンピュータ・システムおよび/またはモジュールおよび/または他の電子デバイス間における電子データの輸送を可能にする1つ以上のデータ・リンクとして定義される。情報がネットワークまたは他の通信接続を通じてコンピュータに転送されるとき(ハードワイヤ、ワイヤレス、あるいはハードワイヤまたはワイヤレスの組み合わせのいずれか)、コンピュータがこの接続を送信媒体として見なすのは適正である。送信媒体は、所望のプログラム・コード手段をコンピュータ実行可能命令の形態で、またはデータ構造を搬送するために使用することができ、汎用または特定用途コンピュータによってアクセスすることができるネットワークおよび/またはデータ・リンクを含むことができる。以上の組み合わせも、コンピュータ読み取り可能媒体の範囲に含まれてしかるべきである。
更に、種々のコンピュータ・システムのコンポーネントに到達すると、コンピュータ実行可能命令の形態であるプログラム・コード手段、またはデータ構造を自動的にコンピュータ記憶媒体(デバイス)に(またはその逆に)自動的に転送することができる。例えば、ネットワークまたはデータ・リンクを通じて受信されたコンピュータ実行可能命令またはデータ構造を、ネットワーク・インターフェース・モジュール(例えば、「NIC」)内にあるRAMにバッファし、次いで最終的にコンピュータ・システムのRAMおよび/またはコンピュータ・システムにおいてより揮発性が少ないコンピュータ記憶媒体(デバイス)に転送することができる。このため、コンピュータ記憶媒体(デバイス)を、送信媒体も利用する(または主に利用するのでもよい)コンピュータ・システム・コンポーネントに含むことができる。
コンピュータ実行可能命令は、例えば、命令およびデータを含み、プロセッサにおいて実行されると、汎用コンピュータ、特定用途コンピュータ、または特定用途処理デバイスに、ある種の機能または一群の機能を実行させる。コンピュータ実行可能命令は、例えば、アセンブリ言語のような2進、中間フォーマット命令、またはソース・コードであってもよい。構造的特徴および/または方法論的アクトに特定的な文言で本主題について説明したが、添付する特許請求の範囲において定められる主題は、必ずしも、以上で説明した特徴や行為に限定されないことは理解されてしかるべきである。逆に、説明した特徴および行為は、特許請求の範囲を実現する形態例として開示されるまでである。
本発明は、パーソナル・コンピュータ、デスクトップ・コンピュータ、ラップトップ・コンピュータ、メッセージ・プロセッサ、ハンドヘルド・デバイス、マルチプロセッサ・システム、マイクロプロセッサ・ベースのまたはプログラマブル・コンシューマ用電子機器、ネットワークPC、ミニコンピュータ、メインフレーム・コンピュータ、移動体電話機、PDA、タブレット、ページャー、ルーター、スイッチ等を含む、多くのタイプのコンピュータ・システム構成を有するネットワーク・コンピューティング環境において実施することができる。また、本発明は、分散型システム環境においても実施することができる。分散型システム環境では、ネットワークを通じてリンクされた(ハードワイヤ・データ・リンク、ワイヤレス・データ・リンク、またはハードワイヤおよびワイヤレス・データ・リンクの組み合わせのいずれかによって)ローカルおよびリモート・コンピュータ・システムの双方がタスクを実行する。分散型システム環境では、プログラム・モジュールは、ローカルおよびリモート・メモリ記憶デバイスの双方に配置されてもよい。
また、本発明の実施形態は、クラウド・コンピューティング環境において実現することもできる。この説明およびそれに続く特許請求の範囲において、「クラウド・コンピューティング」とは、構成可能なコンピューティング・リソースの共有プールに対する、要求に応じたネットワーク・アクセスを可能にするモデルとして定義される。例えば、クラウド・コンピューティングは、構成可能なコンピューティング・リソースの共有プールに対して、要求に応じた遍在的で便利なアクセスを提供するために、マーケットプレースにおいて採用することができる。構成可能なコンピューティング・リソースの共有プールは、仮想化によって素早くプロビジョニングし、少ない管理の手間またはサービス・プロバイダの介在で解放し、次いでしかるべくスケーリングすることができる。
クラウド・コンピューティング・モデルは、例えば、要求に応じたセルフ・サービス、ブロード・ネットワーク・アクセス、リソース・プーリング、即時性(rapid elasticity)、計測可能であること(measured service)等というような、種々の特性で構成することができる。また、クラウド・コンピューティング・モデルは、例えば、サービスとしてのソフトウェア(「SaaS」)、サービスとしてのプラットフォーム(「PaaS」)、およびサービスとしてのインフラストラクチャー(「IaaS」)というような、種々のサービス・モデルを公開することもできる。また、クラウド・コンピューティング・モデルは、プライベート・クラウド、コミュニティ・クラウド、パブリック・クラウド、ハイブリッド・クラウド等というような、異なる配備モデルを使用してデプロイすることもできる。この説明および特許請求の範囲では、「クラウド・コンピューティング環境」とは、クラウド・コンピューティングが採用された環境である。
本発明の実施形態は、ライブラリ開発者が、彼らのライブラリのAPIの内どれを動的にコールできるかについて、更に正確にそして容易に制御することを可能にする。つまり、彼らのサービス提供およびバージョン変更の手間を一層適切に制御することができる。更に、アプリケーション開発者は、ランタイム・サポートのオーバーヘッドを最小化するために、動的コールのシナリオから、このようなAPIの内どれを更に除外するかを制御することができる。
図1は、アプリケーション・プログラミング・インターフェース(API)へのアクセス制御を容易にする一例のコンピュータ・アーキテクチャ100を示す。図1を参照すると、コンピュータ・アーキテクチャ100は、開発環境101およびランタイム環境102を含む。開発環境101およびランタイム環境102は、例えば、システム・バス、ローカル・エリア・ネットワーク(「LAN」)、ワイド・エリア・ネットワーク(「WAN」)、および更にはインターネットというようなネットワークを通じて互いに接続することができる(またはその一部であることができる)。したがって、開発環境101およびランタイム環境102、ならびに任意の他の接続されたコンピュータ・システムおよびそのコンポーネントは、メッセージ関係データを作成し、メッセージ関係データ(例えば、インターネット・プロトコル(「IP」)データグラム、および送信制御プロトコル(「TCP」)、ハイパーテキスト転送プロトコル(「HTTP」)、シンプル・メール転送プロトコル(「SMTP」)等というような、IPデータグラムを利用する、あるいは他の非データグラム・プロトコルを使用する、他の上位層のプロトコル)を、ネットワークを通じて交換することができる。
開発環境101は、ソフトウェア開発のための設備を提供するソフトウェア・アプリケーションであることが可能であり、ソース・コード・エディタ、ビルド・オートメーション(build automation)、デバッガ、バージョン制御システム、クラス・ブラウザ、オブジェクト・インスペクタ、クラス階層図等を含むがこれらに限定されるのではない。実施形態の中には、開発環境101は、統合開発環境(IDE)を含む、またはこれに含まれるものもある。ライブラリ開発者は、開発環境101を使用して、動的アクセス要求に対するAPIの可視性を変更するためにAPIに属性を適用することができる。
ランタイム環境102は、ソフトウェア実行のための設備を提供するソフトウェア・アプリケーションであることが可能である。ランタイム環境102は、コンパイラ(例えば、ジャストインタイム(JIT)コンパイラ)、および/またはソフトウェア開発環境101において開発されたコードを実行するインタープリタを含むことができる。実施形態の中には、ランタイム環境102は、統合開発環境(IDE)を含む、またはこれに含まれるものもある。ランタイム環境102は、APIに対するアクセスを動的に要求するメカニズム(例えば、リフレクション)を含むことができる。
開発環境101および実行環境102は、同じ環境に統合することができ、または別個の環境に存在することができる。
ランタイム環境102は、可視性計算モジュール109を含む。可視性計算モジュールは、APIのタイプ(例えば、内部、プライベート、パブリック等)および適用される属性に基づいて、APIに対する可視性を計算するように構成される。デフォルトの可視性規則108が、APIタイプ毎にデフォルトの可視性を定義することができる(例えば、動的アクセスを許可する、または動的アクセスを除去する)。適用される属性は、デフォルトの可視性を変更するまたは無効にするために使用することができる。したがって、適用される属性は、ライブラリ開発者に、どのように個々のAPIを動的にアクセスできるかについて、更に正確な制御を行わせる。
実施形態の中には、デフォルト可視性規則108は、プライベートまたは内部として示されるAPIに対して、動的アクセスを除去することを定めるものもある。ライブラリ開発者は、開発環境101を使用してプライベートAPIまたは内部APIに属性を適用することができる。適用される属性は、動的アクセスがプライベートAPIまたは内部APIに対して許可されることになることを示すことができる。プライベートAPIまたは内部APIに対する動的コールを受けると、可視性計算モジュール109は、適用される属性が、プライベートまたは内部APIに対する(除去された動的アクセスの)デフォルトの可視性を無効にすると判断することができる。したがって、この動的コールは、プライベートAPIまたは内部APIに対するアクセスが許可される。
図2は、アプリケーション・プログラミング・インターフェース(API)に対するアクセスを制御する一例の方法200のフロー・チャートを示す。方法200については、コンピュータ・アーキテクチャ100のコンポーネントおよびデータに関して説明する。
方法200は、ライブラリに組み合わせられた一組のアプリケーション・プログラミング・インターフェース(API)にアクセスするステップ(201)を含む。この一組のアプリケーション・プログラミング・インターフェース(API)は、1つ以上のパブリック・アプリケーション・プログラミング・インターフェース(API)、および1つ以上の非パブリック・アプリケーション・プログラミング・インターフェース(API)を含む。例えば、開発環境101は、ライブラリ103にアクセスすることができる。ライブラリ103は、パブリックAPI104を含む1つ以上のパブリックAPIを含む。ライブラリ103は、非パブリックAPI106を含む1つ以上の非パブリック(例えば、プライベートまたは内部)APIを含む。
方法200は、一組のアプリケーション・プログラミング・インターフェース(API)から、動的アクセス要求に提供されたデフォルト可視性を変更されることになるアプリケーション・プログラミング・インターフェース(API)を識別するステップ(202)を含む。例えば、開発環境101は(可能性としては、作者の入力に応答して)、動的アクセス要求(例えば、リフレクションまたは他の動的コール技法を使用する)に対する、非パブリックAPI106に対するデフォルト可視性が変更されることになることを識別することができる。
方法200は、アプリケーション・プログラミング・インターフェース(API)に属性を適用することによって、アプリケーション・プログラミング・インターフェース(API)に対するデフォルトの可視性を、変更可視性(altered visibility)に変更するステップ(203)を含む。この属性は、アプリケーション・プログラミング・インターフェース(API)に対する変更可視性が、動的アクセス要求に提供されることになることを、ランタイム時においてランタイム環境に示す。例えば、作者113が開発環境101において可視性入力112を入力することができる。可視性の入力112に応答して、開発環境101は、属性107を非パブリックAPI106に適用することができる。属性107は、デフォルトの可視性規則108において定められた非パブリックAPIに対するデフォルト可視性が、非パブリックAPI106に対して変更されることになることを、ランタイム環境102に示すことができる。
その後、ライブラリ103を他のソース・コードと共に編集して実行可能コード111にすることができる。実行可能コード111の実行中、可視性計算モジュール109は、デフォルト可視性規則108と、非パブリックAPI106に対する可視性を計算したときの属性107との双方を考慮することができる。実施形態の中には、属性107は、デフォルト可視性規則108が、非パブリックAPIに対する動的アクセスは禁止されることを示したとしても、非パブリックAPI106に対する動的アクセスが許可されることを示すものもある。
図3は、アクセス可能なアプリケーション・プログラミング・インターフェース(API)に対するデフォルト可視性を低減させるのを容易にするコンピュータ・アーキテクチャの一例100を示す。図3を参照すると、コンピュータ・アーキテクチャ300は、開発環境301およびランタイム環境302を含む。開発環境301およびランタイム環境302は、例えば、システム・バス、ローカル・エリア・ネットワーク(「LAN」)、ワイド・エリア・ネットワーク(「WAN」)、更にはインターネットというような、ネットワークを通じて互いに接続する(またはその一部である)ことができる。したがって、開発環境301およびランタイム環境302、更には任意の他の接続されるコンピュータ・システムおよびそれらのコンポーネントは、メッセージ関係データを作成し、ネットワークを通じてネットワーク関係データ(例えば、インターネット・プロトコル(「IP」)データグラム、および送信制御プロトコル(「TCP」)、ハイパーテキスト転送プロトコル(「HTTP」)、シンプル・メール転送プロトコル(「TCP」)等というようなIPデータグラムを利用する、あるいは他の非データグラム・プロトコルを使用する、他の上位層のプロトコル)を交換することができる。
開発環境301は、ソフトウェア開発のための設備を提供するソフトウェア・アプリケーションであることが可能であり、ソース・コード・エディタ、ビルド・オートメーション(build automation)、デバッガ、バージョン制御システム、クラス・ブラウザ、オブジェクト・インスペクタ、クラス階層図等を含むがこれらに限定されるのではない。実施形態の中には、開発環境101は、統合開発環境(IDE)を含む、またはこれに含まれるものもある。アプリケーション開発者は、開発環境301を使用して、アクセス可能なAPI(例えば、サード・パーティ・ライブラリに含まれる)を参照するコードに属性を適用することができる。アクセス可能なAPIを参照するコードに適用される属性は、このアクセス可能なAPIに対するデフォルト可視性を低減させるために使用することができる。
ランタイム環境302は、ソフトウェア実行のための設備を提供するソフトウェア・アプリケーションであることが可能である。ランタイム環境は、コンパイラ(例えば、ジャストインタイム(JIT)コンパイラ)、および/またはソフトウェア開発環境301において開発されたコードを実行するインタープリタを含むことができる。実施形態の中には、ランタイム環境302は、統合開発環境(IDE)を含む、またはこれに含まれるものもある。ランタイム環境302は、APIに対するアクセスを動的に要求するメカニズム(例えば、リフレクション)を含むことができる。
開発環境301および実行環境302は、同じ環境に統合することができ、または別個の環境に存在することができる。
ランタイム環境302は、可視性計算モジュール309を含む。可視性計算モジュール309は、アクセス可能なAPI(例えば、動的アクセスを許可するように属性が設定されたパブリックAPIまたは非パブリックAPI)を参照するコードに適用される属性に基づいて、APIに対する可視性を計算するように構成される。デフォルト可視性規則308は、アクセス可能なAPIに対する動的アクセスを許可することができる。したがって、適用される属性は、アプリケーション開発者に、この属性が適用されなければアクセス可能なAPI(例えば、サード・パーティ・ライブラリに含まれる)を動的アクセスから除外するメカニズムを与える。この属性が適用されなければアクセス可能なAPIを、動的アクセスから除外することにより、ランタイム・サポート・オーバーヘッド(例えば、メタデータの生成)を最小化し、これによってリソースを保存する。
図4は、アクセス可能なアプリケーション・プログラミング・インターフェース(API)に対するデフォルト可視性を低減させる一例の方法400のフロー・チャートを示す。方法400については、コンピュータ・アーキテクチャ300のコンポーネントおよびデータを関して説明する。
方法400は、アプリケーションのアプリケーション・コードにアクセスするステップ(401)を含み、アプリケーション・コードは、ライブラリに組み合わされた1つ以上のアクセス可能なアプリケーション・プログラミング・インターフェース(API)を参照する。例えば、開発環境301は、アプリケーション・コード314にアクセスすることができる。また、開発環境310はライブラリ30にもアクセスすることができる。アプリケーション・コード314は、例えば、ライブラリ303に含まれるAPI304および306のような、1つ以上のAPIを参照することができる。
方法400は、アプリケーション・コード内部において参照されるアクセス可能なアプリケーション・プログラミング・インターフェース(API)を識別するステップ(402)を含む。アクセス可能なアプリケーション・プログラミング・インターフェース(API)は、1つ以上のアクセス可能なアプリケーション・プログラミング・インターフェース(API)の中から選択される。例えば、開発環境301は、API参照316によって参照されるAPI306を識別することができる。
方法400は、アクセス可能なアプリケーション・プログラミング・インターフェース(API)がランタイムにおいて動的にアクセスされることにはならないと判断するステップ(403)を含む。例えば、開発環境301が(可能性としては、作者の入力に応答して)、API306に対する動的アクセスが禁止されることになることを決定することができる。
方法400は、アクセス可能なアプリケーション・プログラミング・インターフェース(API)を参照するアプリケーション・コードの部分に属性を適用することによって、アクセス可能なアプリケーション・プログラミング・インターフェース(API)に対するデフォルト可視性を、低減可視性に低減させるステップ(404)を含む。この属性は、アクセス可能なアプリケーション・プログラミング・インターフェース(API)に対する低減可視性が、動的アクセス要求に提供されることになることを、ランタイム時においてランタイム環境に示す。例えば、作者313は、開発環境301において可視性入力312を入力することができる。可視性入力312に応答して、開発環境301は、属性317をAPI参照316(API306に対する参照)に適用することができる。属性317は、API306に対するデフォルト可視性が狭められるべきことを、ランタイム環境302に示すことができる。
その後、アプリケーション・コード314およびライブラリ303を、(恐らく、他のソース・コードと共に)コンパイルして、実行可能コード311にすることができる。実行可能コード311の実行中、可視性計算モジュール309は、デフォルト可視性規則308と、API306に対する可視性を計算したときの属性317との双方を考慮することができる。実施形態の中には、デフォルト可視性規則308がアクセス可能なAPIに対する動的アクセスが許可されることを示しても、属性317はAPI306に対する動的アクセスが禁止されることを示すものある。
APIに対する限定可視性は、APIについてのメタデータを生成しないことを含むことができる。例えば、コンピュータ・アーキテクチャ300において示すように、メタデータはAPI306には生成されない。一方で、API304(アプリケーション・コード314から参照される他のアクセス可能なAPI)には、メタデータ319を生成することができる。
図5は、コンシューマに、アプリケーション・プログラミング・インターフェース(API)に対する指定可視性を提供するのを容易にするランタイム環境の一例500を示す。図5を参照すると、ランタイム環境500は、可視性計算モジュール501およびコンシューマ531を含む。可視性計算モジュール501およびコンシューマ503は、例えば、システム・バス、ローカル・エリア・ネットワーク(「LAN」)、ワイド・エリア・ネットワーク(「WAN」)、更にはインターネットというような、ネットワークを通じて互いに接続することができる。したがって、可視性計算モジュール501およびコンシューマ531、更には任意の他の接続されるコンピュータ・システムおよびそれらのコンポーネントは、メッセージ関係データを作成し、ネットワークを通じてメッセージ関係データ(例えば、インターネット・プロトコル(「IP」)データグラム、および送信制御プロトコル(「TCP」)、ハイパーテキスト転送プロトコル(「HTTP」)、シンプル・メール転送プロトコル(「TCP」)等というようなIPデータグラムを利用する、あるいは他の非データグラム・プロトコルを使用する、他の更に上位層のプロトコル)を交換することができる。
ランタイム環境500は、ソフトウェア実行のための設備を提供するソフトウェア・アプリケーションであることが可能である。ランタイム環境は、コンパイラ(例えば、ジャストインタイム(JIT)コンパイラ)、および/またはソフトウェア開発環境500において開発されたコードを実行するインタープリタを含むことができる。実施形態の中には、ランタイム環境500は、統合開発環境(IDE)を含む、またはこれに含まれるものもある。ランタイム環境500は、APIに対するアクセスを動的に要求するメカニズム(例えば、リフレクション(reflection))を含むことができる。
ランタイム環境500は、可視性計算モジュール501を含む。可視性計算モジュール501は、ライブラリ内に一緒にグループ化された複数のAPIの各々に対する可視性を計算するように構成される。可視性は、APIのタイプ(例えば、内部、プライベート、パブリック)、APIに適用される属性(例えば、ライブラリ作者)、およびAPIを参照するアプリケーションに適用される属性に基づいて、API毎に計算することができる。適用された属性は、デフォルトの可視性を変更する、無効にする、低減させる等のために使用することができる。
実施形態の中には、デフォルト可視性規則502が、非パブリック(例えば、プライベートまたは内部)APIに対して動的アクセスが除去されること、およびパブリックAPIに対して動的アクセスが許可されることを定めるものもある。しかしながら、非パブリックAPIの作者(例えば、ライブラリの作者)が、デフォルト可視性を無効にし、非パブリックAPIに対する動的アクセスを許可するために、属性を非パブリックAPIに適用することができる。同様に、パブリックAPIの作者(例えば、ライブラリの作者)がデフォルト可視性を無効にし、パブリックAPIに対する動的アクセスを拒否するために、属性をパブリックAPIに適用することもできる。他のデフォルト可視性規則も可能である。
いずれの動的にアクセス可能なAPI(デフォルトで動的にアクセス可能であっても、適用された属性によって動的にアクセス可能になったのでもよい)に対しても、サード・パーティ作者(例えば、アプリケーションの作者)は、APIから動的アクセスを除去するために、動的にアクセス可能なAPIを参照するコードに属性を適用することができる。このため、アプリケーションの作者は、ランタイム・サポート・オーバーヘッド(例えば、メタデータの生成)を最小化することができ、これによってリソースを保存する。
図6は、アプリケーション・プログラミング・インターフェース(API)に対する指定可視性をコンシューマに提供する一例の方法600のフロー・チャートを示す。方法600については、ランタイム環境500のコンポーネントおよびデータに関して説明する。
方法600は、ランタイム環境において実行可能コードを実行するステップ(601)を含み、実行可能コードは、アプリケーション・コードから導出される。例えば、実行可能コードは、ランタイム環境500において実行することができる。実行可能コード503は、ライブラリに収容されたAPIに対する参照を含むアプリケーション・コードから導出することができる。例えば、API参照511および517は、ライブラリに収容されたAPIを参照することができる。ライブラリに収容されたAPIは、API513および518を含むことができる。
方法600は、実行可能コードの実行中に、実行可能コードの一部を実行するためにコンシューマから動的コールを受けるステップ(602)を含む。この実行可能コードの一部は、ライブラリ内部においてアプリケーション・プログラミング・インターフェース(API)を参照するアプリケーション・コードの一部から導出される。例えば、動的コール521は、コンシューマ531から受けることができる。動的コール521は、実行可能コード503の一部を実行するためのコールであることが可能である。
一実施形態では、動的コール521は、API参照511を含む実行可能コードを実行するためのコールである。API参照511は、API513またはAPI518のいずれかを参照することができる。他の実施形態では、動的コール521は、API参照517を含む実行可能コードを実行するためのコールである。API参照517は、API513またはAPI518のいずれかを参照することができる。
方法600は、アプリケーション・プログラミング・インターフェース(API)のタイプに基づいて、アプリケーション・プログラミング・インターフェース(API)に対するランタイム・デフォルト可視性にアクセスするステップ(603)を含む。タイプ514によって示されるように、API513は非パブリックAPIである。つまり、API参照がAPI513を参照するとき、非パブリックAPIに対するランタイム・デフォルト可視性(例えば、動的アクセスを禁止する)に、デフォルト可視性規則502(API513に対する)からアクセスすることができる。タイプ519によって示されるように、API518はパブリックAPIである。つまり、API参照がAPI518を参照するとき、パブリックAPIに対するランタイム・デフォルト可視性(例えば、動的アクセスを許可する)に、(API518についての)デフォルト可視性規則502からアクセスすることができる。
方法600は、アプリケーション・プログラミング・インターフェース(API)に適用される任意の属性にアクセスするステップ(604)を含む。アプリケーション・プログラミング・インターフェース(API)に適用される属性は、アプリケーション・プログラミング・インターフェース(API)に対するランタイム・デフォルト可視性を変更するという、アプリケーション・プログラミング・インターフェース(API)の作者による希望を示す。例えば、API参照がAPI513を参照するとき、属性516にアクセスすることができる。属性516は、API513に対するランタイム・デフォルト可視性(デフォルト可視性規則502において定められる)を変更するという、ライブラリ作者による希望を示すことができる。例えば、デフォルトでは、非パブリックAPIに対する動的アクセスを禁止することができる。しかしながら、属性513は、API513に対する動的アクセスが許可されることになることを示すことができる。
方法600は、アプリケーション・プログラミング・インターフェース(API)を参照するアプリケーション・コードの一部に適用される任意の属性にアクセスするステップ(605)を含む。アプリケーション・コードの一部に適用される属性は、アプリケーション・プログラミング・インターフェース(API)に対する可視性が、アプリケーション・プログラミング・インターフェース(API)に適用される任意の属性によって変更され、ランタイム・デフォルト可視性によって示されるよりも少ない程度で提供されるという、アプリケーション・コードの作者による希望を示す。例えば、動的コール521が、API参照511を含む実行可能コードを実行するためのコールであるとき、属性512にアクセスすることができる。属性512は、参照API(例えば、API513またはAPI518)に対する可視性を低減させるという、アプリケーション作者による希望を示すことができる。例えば、属性512は、参照API(例えば、API513またはAPI518)に対する動的アクセスが禁止されることを示すことができる。したがって、ライブラリの作者が他の方法でAPIに対する動的アクセスを許可しても、アプリケーション開発者は、属性512を適用して、APIに対する動的アクセスを禁止することができる。
方法600は、以下の内1つ以上に基づいて、アプリケーション・プログラミング・インターフェース(API)に対する算出可視性(calculated visibility)を決定するステップ(606)を含む。アプリケーション・プログラミング・インターフェース(API)に対するランタイム・デフォルト可視性、アプリケーション・プログラミング・インターフェース(API)に適用される任意の属性、およびアプリケーション・プログラミング・インターフェース(API)を参照するアプリケーション・コードの一部に適用される任意の属性。このように、可視性計算モジュール501は、(デフォルト可視性規則502において定められる)APIのタイプ、APIに適用される任意の属性、およびAPIを参照するAPI参照に適用される任意の属性に基づいて、APIに対する算出可視性522を決定することができる。
方法600は、算出可視性にしたがって、アプリケーション・プログラミング・インターフェース(API)に対する可視性を、動的コールに提供するステップ(607)を含む。例えば、コンシューマ531に、実行可能コード503において動的にコールされるAPIに対する可視性522を提供することができる。また、動的コール521の結果524をコンシューマ531に戻すこともできる。結果524は、動的にコールされたAPIに動的アクセスが許可されないことを示すこともあり得る。
実行可能コード503内部において、参照元(referring)コードおよびAPIの種々の異なる組み合わせが可能である。一実施形態では、動的コール521がAPI参照511を使用してAPI513をコールする。この実施形態では、可視性522は、APIタイプ514に対するデフォルト可視性(例えば、デフォルト可視性規則502において定められる)、属性512、および属性516から決定される。他の実施形態では、動的コール521はAPI参照511を使用してAPI518をコールする。この実施形態では、可視性522は、APIタイプ519に対するデフォルト可視性(例えば、デフォルト可視性規則502において定められる)、および属性512から決定される。
更に他の実施形態では、動的コール521はAPI参照517を使用してAPI513をコールする。この更に他の実施形態では、可視性522は、APIタイプ514に対するデフォルト可視性(例えば、デフォルト可視性規則502において定められる)および属性516から決定される。追加の実施形態では、動的コール521はAPI参照517を使用してAPI518をコールする。この更に他の実施形態では、可視性522は、APIタイプ519に対するデフォルト可視性(例えば、デフォルト可視性規則502において定められる)から決定される。
本発明は、その主旨や本質的な特性から逸脱することなく、他の特定形態で具体化されてもよい。説明した実施形態は、あらゆる観点において、限定ではなく例示に過ぎないと見なすものとする。したがって、本発明の範囲は、以上の説明ではなく、添付した特許請求の範囲によって示される。特許請求の範囲の均等の意味および範囲に該当する全ての変更は、その範囲内に包含されるものとする。

Claims (20)

  1. アプリケーション・プログラミング・インターフェース(API)のランタイムの可視性を変更する方法であって、
    アプリケーション・プログラミング・インターフェース(API)を含む実行可能コードを開発するための開発環境を含むコンピュータ・システムにおいて、前記実行可能コードが、前記アプリケーション・プログラミング・インターフェース(API)へのアクセスを動的に要求することができるランタイム環境において起動し、前記ランタイム環境が、アプリケーション・プログラミング・インターフェース(API)タイプに基づいて、アプリケーション・プログラミング・インターフェース(API)に対するデフォルト可視性を動的アクセス要求に提供し、当該方法が、
    ライブラリにおいて組み合わされた一組のアプリケーション・プログラミング・インターフェース(API)にアクセスするステップであって、記アプリケーション・プログラミング・インターフェース(API)のアプリケーション・プログラミング・インターフェース(API)タイプ、パブリック・アプリケーション・プログラミング・インターフェース(API)、および非パブリック・アプリケーション・プログラミング・インターフェース(API)を含む、ステップと、
    前記一組のアプリケーション・プログラミング・インターフェース(API)の中から、動的アクセス要求に提供された前記デフォルト可視性が変更されることになるアプリケーション・プログラミング・インターフェース(API)を識別するステップであって、前記アプリケーション・プログラミング・インターフェース(API)に対するデフォルト可視性が、前記アプリケーション・プログラミング・インターフェース(API)のアプリケーション・プログラミング・インターフェース(API)タイプによって定義され、前記デフォルト可視性は、他のどのソフトウェア・コンポーネントがランタイム時に前記アプリケーション・プログラミング・インターフェース(API)にアクセスすることができるかを定義する、ステップと、
    前記アプリケーション・プログラミング・インターフェース(API)に追加の属性をアタッチすることによって、前記アプリケーション・プログラミング・インターフェース(API)に対する前記デフォルト可視性を無効にするステップであって、前記追加の属性は、前記アプリケーション・プログラミング・インターフェース(API)にアクセスするランタイムの動的アクセス要求が前記アプリケーション・プログラミング・インターフェース(API)にアタッチされる前記追加の属性を用いて評価されることになることを、ランタイムの可視性計算モジュールに示す、ステップと、
    を含む、方法。
  2. 請求項1記載の方法において、アプリケーション・プログラミング・インターフェース(API)を識別するステップが、前記アプリケーション・プログラミング・インターフェース(API)を該アプリケーション・プログラミング・インターフェース(API)の作者に公開するステップを含む、方法。
  3. 請求項2記載の方法において、前記アプリケーション・プログラミング・インターフェース(API)に対する前記デフォルト可視性を無効にするステップが、前記アプリケーション・プログラミング・インターフェース(API)の作者が、前記アプリケーション・プログラミング・インターフェースの前記デフォルト可視性を変更するステップを含む、方法。
  4. 請求項1記載の方法において、アプリケーション・プログラミング・インターフェース(API)を識別するステップが、非パブリック・アプリケーション・プログラミング・インターフェース(API)を識別するステップを含み、前記非パブリック・アプリケーション・プログラミング・インターフェース(API)についての前記デフォルト可視性が、前記非パブリック・アプリケーション・プログラミング・インターフェース(API)への動的アクセス要求を禁止する、方法。
  5. 請求項4記載の方法において、前記アプリケーション・プログラミング・インターフェースの前記デフォルト可視性を無効にするステップが、前記非パブリック・アプリケーション・プログラミング・インターフェース(API)に属性をアタッチするステップを含み、前記属性が、前記非パブリック・アプリケーション・プログラミング・インターフェース(API)への動的アクセス要求を許可するように、前記非パブリック・アプリケーション・プログラミング・インターフェース(API)に対する前記デフォルト可視性を無効にする、方法。
  6. 請求項1記載の方法において、アプリケーション・プログラミング・インターフェース(API)を識別するステップが、パブリック・アプリケーション・プログラミング・インターフェース(API)を識別するステップを含み、前記パブリック・アプリケーション・プログラミング・インターフェース(API)についての前記デフォルト可視性が、前記パブリック・アプリケーション・プログラミング・インターフェース(API)への動的アクセス要求を許可する、方法。
  7. 請求項6記載の方法において、前記アプリケーション・プログラミング・インターフェース(API)の前記デフォルト可視性を無効にするステップが、前記パブリック・アプリケーション・プログラミング・インターフェース(API)に属性をアタッチするステップを含み、前記属性が、前記パブリック・アプリケーション・プログラミング・インターフェース(API)への動的アクセス要求を禁止するように、前記パブリック・アプリケーション・プログラミング・インターフェース(API)についての前記デフォルト可視性を無効にする、方法。
  8. 動的アクセス要求がリフレクションを使用する、請求項1記載の方法。
  9. アプリケーション・プログラミング・インターフェース(API)に対するデフォルト可視性を低減させる方法であって、
    アプリケーション・プログラミング・インターフェース(API)を含む実行可能コードを開発するための開発環境を含むコンピュータ・システムにおいて、前記実行可能コードが、アプリケーション・プログラミング・インターフェース(API)へのアクセスを動的に要求することができるランタイム環境において起動し、前記ランタイム環境が、アクセス可能なアプリケーション・プログラミング・インターフェース(API)に対するデフォルト可視性を有し、当該方法が、
    アプリケーションのアプリケーション・コードにアクセスするステップであって、前記アプリケーション・コードが、ライブラリにおいて組み合わされた1つ以上のアクセス可能なアプリケーション・プログラミング・インターフェース(API)を参照する、ステップと、
    前記アプリケーション・コード内において参照されるアクセス可能なアプリケーション・プログラミング・インターフェース(API)を識別するステップであって、前記アクセス可能なアプリケーション・プログラミング・インターフェース(API)が、前記1つ以上のアクセス可能なアプリケーション・プログラミング・インターフェース(API)の中から選択され、前記アプリケーション・プログラミング・インターフェース(API)に対するデフォルト可視性が、前記アプリケーション・プログラミング・インターフェース(API)のアプリケーション・プログラミング・インターフェース(API)タイプによって定義され、前記デフォルト可視性は、他のどのソフトウェア・コンポーネントがランタイム時に前記アプリケーション・プログラミング・インターフェース(API)にアクセスすることができるかを定義する、ステップと、
    前記アプリケーション・プログラミング・インターフェース(API)が、前記アプリケーション・プログラミング・インターフェース(API)タイプに基づいてランタイム時に複数のソフトウェア・コンポーネントにアクセス可能であるかを判定するステップと、
    前記アクセス可能なアプリケーション・プログラミング・インターフェース(API)を参照する前記アプリケーション・コードの一部に追加の属性をアタッチすることによって、前記アクセス可能なアプリケーション・プログラミング・インターフェース(API)に対する前記デフォルト可視性を無効にするステップであって、前記追加の属性が、前記アプリケーション・プログラミング・インターフェース(API)に対するランタイムの動的アクセス要求が前記複数のソフトウェア・コンポーネントの内の少なくとも1つについて禁止されることになることを、ランタイムの可視性計算モジュールに示す、ステップと、
    を含む、方法。
  10. 請求項9記載の方法において、前記アプリケーション・コード内において参照されるアクセス可能なアプリケーション・プログラミング・インターフェース(API)を識別するステップが、前記アプリケーション・コードの作者に参照される前記アクセス可能なアプリケーション・プログラミング・インターフェース(API)を識別するステップを含む、方法。
  11. 請求項10記載の方法において、前記アプリケーション・コードの一部に追加の属性をアタッチするステップは、前記アプリケーション・コードの作者が、前記アプリケーション・コードの一部に前記追加の属性をアタッチするステップを含む、方法。
  12. 請求項9記載の方法において、前記アプリケーション・コードの一部に追加の属性をアタッチするステップが、パブリックAPIを参照する前記アプリケーション・コードの一部に追加の属性をアタッチするステップを含む、方法。
  13. 請求項9記載の方法において、前記アプリケーション・コードの一部に追加の属性をアタッチするステップが、非パブリックAPIを参照する前記アプリケーション・コードの一部に追加の属性をアタッチするステップを含み、前記非パブリックAPIは、該非パブリックAPIへの動的アクセスが許可されることを示す別の属性を有する、方法。
  14. 請求項9記載の方法において、前記アプリケーション・プログラミング・インターフェース(API)に対する前記デフォルト可視性を無効にするステップが、前記アプリケーション・プログラミング・インターフェース(API)を参照する前記アプリケーション・コードの一部に追加の属性をアタッチして、前記アプリケーション・プログラミング・インターフェース(API)についてのメタデータがランタイム時に生成されないことを前記可視性計算モジュールに示すステップを含む、方法。
  15. 動的アクセス要求がリフレクションを使用する、請求項9記載の方法。
  16. アプリケーション・プログラミング・インターフェース(API)に対する指定可視性をコンシューマに提供する方法であって、
    アプリケーション・プログラミング・インターフェース(API)への動的アクセスを要求することができるランタイム環境を含むコンピュータ・システムにおいて、前記ランタイム環境が、アプリケーション・プログラミング・インターフェース(API)タイプに基づいて、動的アクセス要求に、アプリケーション・プログラミング・インターフェース(API)に対するデフォルト可視性を提供し、当該方法が、
    前記ランタイム環境において実行可能コードを実行するステップであって、前記実行可能コードがアプリケーション・コードから導出される、ステップと、
    前記実行可能コードの実行中において、
    コンシューマから、前記実行可能コードの一部を実行するための動的コールを受けるステップであって、前記実行可能コードの一部が、ライブラリ内のアプリケーション・プログラミング・インターフェース(API)を参照する前記アプリケーション・コードの一部から導出される、ステップと、
    前記アプリケーション・プログラミング・インターフェース(API)のタイプに基づいて、前記アプリケーション・プログラミング・インターフェース(API)に対するランタイム・デフォルト可視性にアクセスするステップであって、前記デフォルト可視性は、他のどのソフトウェア・コンポーネントがランタイム時に前記アプリケーション・プログラミング・インターフェース(API)にアクセスすることができるかを定義する、ステップと、
    前記アプリケーション・プログラミング・インターフェース(API)にアタッチされる任意の追加の属性にアクセスするステップであって、アタッチされる追加の属性が、前記アプリケーション・プログラミング・インターフェース(API)に対する前記ランタイム・デフォルト可視性を無効にするという、アプリケーション・プログラミング・インターフェース(API)の作者による希望を示す、ステップと、
    前記アプリケーション・プログラミング・インターフェース(API)を参照する前記アプリケーション・コードの前記一部にアタッチされる任意の別の属性にアクセスするステップであって、前記アプリケーション・コードの前記一部にアタッチされる別の属性が、前記アプリケーション・プログラミング・インターフェース(API)へのランタイム・アクセスを、前記無効にされるデフォルト可視性がさもなければ許可することになるのよりも大きく制限される可視性にセットするという、前記アプリケーション・コードの作者による希望を示す、ステップと、
    前記アプリケーション・プログラミング・インターフェース(API)に対する前記ランタイム・デフォルト可視性、前記アプリケーション・プログラミング・インターフェース(API)にアタッチされる任意の追加の属性、および前記アプリケーション・コードの前記一部にアタッチされる任意の他の属性の内の1つ以上に基づいて、前記アプリケーション・プログラミング・インターフェース(API)に対する算出可視性を決定するステップと、
    前記アプリケーション・プログラミング・インターフェース(API)に対する算出可視性を前記動的コールに提供するステップと、
    を含む、方法。
  17. 請求項16記載の方法において、前記アプリケーション・プログラミング・インターフェース(API)に対する算出可視性を決定するステップが、APIタイプ、前記APIにアタッチされる属性、および前記APIを参照するコードにアタッチされる属性に基づいて、前記APIについての算出可視性を決定するステップを含む、方法。
  18. 請求項16記載の方法において、前記アプリケーション・プログラミング・インターフェース(API)に対する算出可視性を決定するステップが、APIタイプおよび前記APIにアタッチされる属性に基づいて、前記APIについての算出可視性を決定するステップを含む、方法。
  19. 請求項16記載の方法において、前記アプリケーション・プログラミング・インターフェース(API)に対する算出可視性を決定するステップが、APIタイプおよびコードの部分にアタッチされる属性に基づいて、APIについての算出可視性を決定するステップを含む、方法。
  20. 請求項16記載の方法において、前記アプリケーション・プログラミング・インターフェース(API)に対する算出可視性を決定するステップが、APIタイプのみに基づいてAPIについての算出可視性を決定するステップを含む、方法。
JP2016510711A 2013-04-22 2014-04-21 アプリケーション・プログラミング・インターフェースへのランタイム・アクセスの制御 Active JP6473442B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/867,143 US8990839B2 (en) 2013-04-22 2013-04-22 Controlling runtime access to application programming interfaces
US13/867,143 2013-04-22
PCT/US2014/034739 WO2014176137A1 (en) 2013-04-22 2014-04-21 Controlling runtime access to application programming interfaces

Publications (3)

Publication Number Publication Date
JP2016517120A JP2016517120A (ja) 2016-06-09
JP2016517120A5 JP2016517120A5 (ja) 2017-06-15
JP6473442B2 true JP6473442B2 (ja) 2019-02-20

Family

ID=50771633

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016510711A Active JP6473442B2 (ja) 2013-04-22 2014-04-21 アプリケーション・プログラミング・インターフェースへのランタイム・アクセスの制御

Country Status (11)

Country Link
US (3) US8990839B2 (ja)
EP (2) EP3982257A1 (ja)
JP (1) JP6473442B2 (ja)
KR (1) KR102183185B1 (ja)
CN (1) CN105229603B (ja)
AU (2) AU2014257298B2 (ja)
BR (1) BR112015026327B1 (ja)
CA (1) CA2907904A1 (ja)
MX (1) MX357050B (ja)
RU (1) RU2658190C2 (ja)
WO (1) WO2014176137A1 (ja)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9195440B2 (en) * 2013-11-26 2015-11-24 International Business Machines Corporation Intelligent data source selection in application development
US9430200B1 (en) 2015-06-04 2016-08-30 Microsoft Technology Licensing Llc Cross-library framework architecture feature sets
US10104090B2 (en) * 2015-08-25 2018-10-16 Oracle International Corporation Restrictive access control for modular reflection
US10360008B2 (en) 2016-09-16 2019-07-23 Oracle International Corporation Metadata application constraints within a module system based on modular encapsulation
US10352717B2 (en) * 2017-02-28 2019-07-16 Google Llc Navigation application programming interface
US10664943B2 (en) * 2017-06-02 2020-05-26 Apple Inc. Compound shader object and use thereof
US10572275B2 (en) * 2017-06-15 2020-02-25 Microsoft Technology Licensing, Llc Compatible dictionary layout
EP3428793A1 (de) * 2017-07-10 2019-01-16 Siemens Aktiengesellschaft Verfahren zur unterstützung eines anwenders bei einer erstellung einer software-applikation und computerprogramm mit einer implementation des verfahrens sowie im rahmen eines solchen verfahrens verwendbare programmierschnittstelle
US10817280B1 (en) * 2018-05-21 2020-10-27 Amazon Technologies, Inc. Overriding shared service interfaces
CN108897533A (zh) * 2018-06-06 2018-11-27 北京奇虎科技有限公司 一种函数调用的方法、装置及终端
US11275624B2 (en) * 2018-06-14 2022-03-15 Qliktech International Ab Methods and systems for application program interface management
US10467062B1 (en) 2019-03-11 2019-11-05 Coupang, Corp. Systems and methods for managing application programming interface information
CN112612508A (zh) * 2020-12-24 2021-04-06 新华三云计算技术有限公司 Api网关中的api版本控制方法、装置及存储介质

Family Cites Families (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6199117B1 (en) 1992-03-30 2001-03-06 International Business Machines Corporation Generalized control for starting of tasks (processes and threads)
WO1998038587A1 (en) * 1997-02-26 1998-09-03 Siebel Systems, Inc. Method of using a cache to determine the visibility to a remote database client of a plurality of database transactions
FR2801118B1 (fr) * 1999-11-17 2001-12-21 Bull Cp8 Procede de chargement d'applications dans un systeme embarque multi-application, systeme embarque correspondant, et procede d'execution d'une application du systeme embarque
US20050091576A1 (en) * 2003-10-24 2005-04-28 Microsoft Corporation Programming interface for a computer platform
US20030018694A1 (en) 2000-09-01 2003-01-23 Shuang Chen System, method, uses, products, program products, and business methods for distributed internet and distributed network services over multi-tiered networks
US7028305B2 (en) 2001-05-16 2006-04-11 Softricity, Inc. Operating system abstraction and protection layer
US6964033B2 (en) * 2001-06-20 2005-11-08 Sun Microsystems, Inc. Object band customization of Java runtime environments
US20030188183A1 (en) * 2001-08-27 2003-10-02 Lee Lane W. Unlocking method and system for data on media
AU2002332710A1 (en) * 2001-08-29 2003-03-18 Globespanvirata Incorporated Secure access to software functionalities
US7162721B2 (en) * 2001-12-03 2007-01-09 Sun Microsystems, Inc. Application-independent API for distributed component collaboration
US7305469B2 (en) * 2001-12-18 2007-12-04 Ebay Inc. Prioritization of third party access to an online commerce site
US20050050057A1 (en) * 2003-08-25 2005-03-03 Microsoft Corporation System and method for integrating management of resources between application services and applications
US7409676B2 (en) * 2003-10-20 2008-08-05 International Business Machines Corporation Systems, methods and computer programs for determining dependencies between logical components in a data processing system or network
US20060031681A1 (en) * 2004-08-05 2006-02-09 Motorola, Inc. Method and system for controlling access to a wireless client device
WO2006095335A2 (en) * 2005-03-07 2006-09-14 Noam Camiel System and method for a dynamic policies enforced file system for a data storage device
US7657871B2 (en) * 2005-07-22 2010-02-02 Sbc Knowledge Ventures, L.P. Method and system of managing configuration profiles of a plurality of deployed network elements
CN100498697C (zh) * 2005-09-29 2009-06-10 腾讯科技(深圳)有限公司 一种应用编程接口控制方法和控制功能模块
US20070074033A1 (en) * 2005-09-29 2007-03-29 Research In Motion Limited Account management in a system and method for providing code signing services
US7730539B2 (en) * 2005-10-21 2010-06-01 Microsoft Corporation Authenticating third party products via a secure extensibility model
US8074231B2 (en) * 2005-10-26 2011-12-06 Microsoft Corporation Configuration of isolated extensions and device drivers
US7716246B2 (en) * 2005-11-30 2010-05-11 Microsoft Corporation Dynamic mechanism for providing metadata
US7680866B2 (en) * 2006-01-31 2010-03-16 Siemens Corporation System and method for managing relational numerical data for monitoring systems
WO2008094540A1 (en) 2007-01-29 2008-08-07 Mashery, Inc. Methods for analyzing limiting, and enhancing access to an internet api, web service, and data
US20090007068A1 (en) * 2007-06-27 2009-01-01 Microsoft Corporation Accessing Non-Public Code
US8209675B2 (en) 2007-07-25 2012-06-26 Sap Ag Method and system for customizing a software application
US8312425B2 (en) * 2008-03-31 2012-11-13 International Business Machines Corporation Dynamic template instantiation
US8239340B2 (en) 2008-04-11 2012-08-07 Trevor Hanson Message conduit systems with algorithmic data stream control and methods for processing thereof
US8397290B2 (en) * 2008-06-27 2013-03-12 Microsoft Corporation Granting least privilege access for computing processes
US20110055744A1 (en) * 2009-08-28 2011-03-03 Ryan Christopher N Visual Linking of Elements to Model Attributes
US8438294B2 (en) * 2010-04-07 2013-05-07 Apple Inc. Application programming interface, system, and method for collaborative online applications
JP5318830B2 (ja) * 2010-08-25 2013-10-16 株式会社日立ソリューションズ WebAPIサーバプログラム、WebAPI公開方法
US8681630B1 (en) * 2010-09-21 2014-03-25 Google Inc. Configurable rate limiting using static token buckets, and applications thereof
US8863156B1 (en) * 2011-01-04 2014-10-14 AppCentric Solutions, LLC API wizard
US20120260233A1 (en) 2011-04-07 2012-10-11 Infosys Technologies Limited Method and system for automating development and customization of business applications
US8997069B2 (en) 2011-04-13 2015-03-31 Microsoft Technology Licensing, Llc API descriptions
US20120290560A1 (en) * 2011-05-13 2012-11-15 Kushal Das Mechanism for efficiently querying application binary interface/application programming interface-related information

Also Published As

Publication number Publication date
KR102183185B1 (ko) 2020-11-25
EP3982257A1 (en) 2022-04-13
WO2014176137A1 (en) 2014-10-30
MX357050B (es) 2018-06-25
CN105229603B (zh) 2019-03-22
AU2014257298B2 (en) 2019-06-13
RU2658190C2 (ru) 2018-06-19
US9785483B2 (en) 2017-10-10
BR112015026327A2 (pt) 2017-07-25
AU2019229450A1 (en) 2019-10-03
US11003511B2 (en) 2021-05-11
KR20160003023A (ko) 2016-01-08
US20190095256A1 (en) 2019-03-28
RU2015145292A3 (ja) 2018-03-27
JP2016517120A (ja) 2016-06-09
US8990839B2 (en) 2015-03-24
US20150169387A1 (en) 2015-06-18
CN105229603A (zh) 2016-01-06
CA2907904A1 (en) 2014-10-30
MX2015014870A (es) 2016-03-09
RU2015145292A (ru) 2017-04-26
EP2989539B1 (en) 2022-08-17
BR112015026327A8 (pt) 2019-12-24
US20140317641A1 (en) 2014-10-23
AU2019229450B2 (en) 2020-12-10
BR112015026327B1 (pt) 2022-05-17
EP2989539A1 (en) 2016-03-02
AU2014257298A1 (en) 2015-10-15

Similar Documents

Publication Publication Date Title
JP6473442B2 (ja) アプリケーション・プログラミング・インターフェースへのランタイム・アクセスの制御
CN109961151B (zh) 用于机器学习的计算服务的系统及用于机器学习的方法
US9225604B2 (en) Mapping requirements to a system topology in a networked computing environment
US8434070B2 (en) Generating specifications of client-server applications for static analysis
US8751620B2 (en) Validating deployment patterns in a networked computing environment
US20240020582A1 (en) Parameter data sharing for multi-learner training of machine learning applications
US20120102474A1 (en) Static analysis of client-server applications using framework independent specifications
US20180081653A1 (en) Accelerating software builds
US10838702B2 (en) Analyzing and optimizing container images in cloud computing
US8938712B2 (en) Cross-platform virtual machine and method
US10268461B2 (en) Global data flow optimization for machine learning programs
US10782940B2 (en) Code library version management
JP6385471B2 (ja) 移行および遠隔ランタイム統合
CN109196484B (zh) 在具有多个存储器的系统中灵活的优化数据处理
US10409762B2 (en) Remote direct memory access-based on static analysis of asynchronous blocks
US10025564B2 (en) Intuitive frames of task appropriate frames of reference for multiple dimensions of context for related sets of objects within an IDE
US11567796B2 (en) Configuring hardware multithreading in containers
US11880762B2 (en) Choosing execution mode of a neural network based on total memory usage

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170421

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170421

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180531

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180606

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180717

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20181227

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190125

R150 Certificate of patent or registration of utility model

Ref document number: 6473442

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250