KR102183185B1 - 애플리케이션 프로그래밍 인터페이스들에 대한 런타임 액세스의 제어 - Google Patents

애플리케이션 프로그래밍 인터페이스들에 대한 런타임 액세스의 제어 Download PDF

Info

Publication number
KR102183185B1
KR102183185B1 KR1020157033296A KR20157033296A KR102183185B1 KR 102183185 B1 KR102183185 B1 KR 102183185B1 KR 1020157033296 A KR1020157033296 A KR 1020157033296A KR 20157033296 A KR20157033296 A KR 20157033296A KR 102183185 B1 KR102183185 B1 KR 102183185B1
Authority
KR
South Korea
Prior art keywords
api
application programming
programming interface
visibility
application
Prior art date
Application number
KR1020157033296A
Other languages
English (en)
Other versions
KR20160003023A (ko
Inventor
미르체아 트로핀
패트릭 두수드
루디 마틴
존 로렌스 햄비
미칼 스트레호프스키
데이비트 챨스 라이톤
아츠시 가나모리
파디 엠 한나
Original Assignee
마이크로소프트 테크놀로지 라이센싱, 엘엘씨
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 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 filed Critical 마이크로소프트 테크놀로지 라이센싱, 엘엘씨
Publication of KR20160003023A publication Critical patent/KR20160003023A/ko
Application granted granted Critical
Publication of KR102183185B1 publication Critical patent/KR102183185B1/ko

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)

Abstract

본 발명은 애플리케이션 프로그래밍 인터페이스들에 대한 런타임 액세스를 제어하는 방법들, 시스템들 및 컴퓨터 프로그램 제품들에 관한 것이다. 본 발명의 실시예들은 라이브러리 개발자들이 그들의 라이브러리의 API들 중 어느 것이 동적으로 호출될 수 있는지를 더욱 정밀하고 쉽게 제어하게 한다. 따라서, 개발자들의 서비싱 및 버저닝 부담이 더욱 적절하게 제어될 수 있다. 또한, 애플리케이션 개발자들은 런타임 지원 오버헤드(예를 들어, 메타데이터를 생성을 방지하는)를 최소화하기 위해, 동적 호출 시나리오들로부터 더 배제할 이러한 API들을 제어할 수 있다.

Description

애플리케이션 프로그래밍 인터페이스들에 대한 런타임 액세스의 제어{CONTROLLING RUNTIME ACCESS TO APPLICATION PROGRAMMING INTERFACES}
배경 및 종래 기술
컴퓨터 시스템들 및 관련 기술은 사회의 다수의 양상들에 영향을 미친다. 실제로, 정보를 프로세싱하는 컴퓨터 시스템의 능력은 인간이 생활하고 일하는 방식을 변환시켰다. 컴퓨터 시스템들은 컴퓨터 시스템의 출현 이전에는 수동으로 수행되었던 다수의 작업들(예를 들어, 워드 프로세싱, 스케줄링, 회계 등)을 이제 일반적으로 수행한다. 더욱 최근에는, 컴퓨터 시스템들은, 컴퓨터 시스템들 및 다른 전자 디바이스들이 전자 데이터를 전송할 수 있는 유선 및 무선 컴퓨터 네트워크들 양자를 형성하기 위해 서로에 그리고 다른 전자 디바이스들에 결합되었다. 따라서, 다수의 컴퓨팅 작업들의 성능이 다수의 상이한 컴퓨터 시스템들 및/또는 다수의 상이한 컴퓨팅 환경들에 걸쳐 분포된다.
코드 개발 동안, 소프트웨어 개발자들은 소프트웨어 컴포넌트들 사이의 통신을 용이하게 하기 위해 애플리케이션 프로그래밍 인터페이스(API)들을 종종 사용한다. API는 그 API와 연관된 루틴들, 데이터 구조들, 오브젝트 클래스들, 및 변수들에 대한 사양을 포함할 수 있다. 이와 같이, 한 명의 개발자는 다른 개발자에 의해 기록된 API를 어떻게 호출할지 결정하기 위해 API 사양을 사용할 수 있다.
종종, 한 명의 소프트웨어 개발자(라이브러리 개발자)는 특정한 기능을 제공하는 라이브러리로 그룹화되는 다수의 관련 API들을 갖는 코드를 개발한다. 소프트웨어 개발자는 라이브러리 내의 대응하는 API들을 공개 API들로서 노출시킴으로써 기능의 부분들을 다른 프로그램들에 대해 이용가능하게 만들 수 있다. 따라서, 다른 개발자(애플리케이션 개발자)는 공개 API들에 대한 호출들을 통해 그들의 코드 내부로부터 기능의 이용가능한 부분들에 액세스할 수 있다. 소프트웨어 개발자는 기능의 다른 부분들을 사설(private)로 또한 유지할 수 있다. 사설 기능은 라이브러리내의 API들 사이에서 내부적으로 또는 다른 라이브러리들에서 다른 사설 API들에 액세스하기 위해 사용될 수 있다. 사설 기능을 제공하는 API들은 다른 프로그램들에 직접 노출되지 않는다.
그러나, 다수의 런타임 환경들은 (예를 들어, 메타데이터에 액세스하기 위해 리플렉션(reflection)을 사용하여) 코드가 제 3 자 라이브러리에서의 임의의 API를 동적으로 호출하게 한다. 이와 같이, 애플리케이션 프로그램 또는 라이브러리는 다른 라이브러리내의 사설 API들을 식별하고 호출할 수 있다. 소프트웨어 개발자가 API를 사설로 유지할 때, 소프트웨어 개발자는 API가 외부적으로 호출되는 것으로 예상하지 않는다. 공교롭게도, 예를 들어, 사설 방법들의 이름바꾸기들(renames) 또는 제거들과 같은 이러한 라이브러리들의 내부 구현 상세들에 대한 서비싱(servicing) 또는 버저닝(versioning) 변경들은 이들 라이브러리들을 사용하는 애플리케이션들에서 파괴적인 변경들(breaking changes)을 초래하는 잠재성을 갖는다.
또한, 동적 호출들에 대한 런타임 지원은 사이즈 및 워킹 세트 오버헤드(예를 들어, 메타데이터)를 수반(carry)한다. 사이즈 및 워킹 세트 오버헤드는 API들이 실제로 동적으로 호출되든 안되든 API들(사설 또는 공개)에 대해 유지된다. 호출되지 않은 API들에 대한 사이즈 및 워킹 세트 오버헤드를 유지하는 것은 컴퓨팅 자원들을 불필요하게 소모한다.
본 발명은 애플리케이션 프로그래밍 인터페이스들에 대한 런타임 액세스를 제어하는 방법들, 시스템들 및 컴퓨터 프로그램 제품들에 관한 것이다. 본 발명의 실시예들은 애플리케이션 프로그래밍 인터페이스들(API)에 대한 런타임 액세스를 제어하는 것을 포함한다. 런타임 환경은 (예를 들어, 리플렉션 또는 다른 동적 호출 기법들을 통해) 동적 액세스 요청들에 API 타입에 기초한 API들로의 디폴트 가시성(default visibility)을 제공한다. 예를 들어, 비공개 API들로의 디폴트 가시성은 동적 액세스를 방지할 수 있다.
라이브러리에서 조합된 API들의 세트가 액세스된다. API들의 세트는 하나 이상의 공개 API들 및 하나 이상의 비공개 API들을 포함한다. API는 동적 액세스 요청들에 제공된 디폴트 가시성이 변경될 API들의 세트로부터 식별된다.
API로의 디폴트 가시성은 API에 속성을 적용함으로써 변경된다. 속성은 동적 액세스 요청들이 제공될 런타임에서 런타임 환경에 API로의 변경된 가시성을 나타낸다. 가시성을 변경하는 것은 비공개 API로의 동적 액세스를 허용하는 것을 포함할 수 있고, 이에 의해, 디폴트 동적 액세스가 허용되지 않는다.
다른 실시예들은 액세스가능한 API로의 디폴트 가시성을 감소시키는 것을 포함한다. 애플리케이션에 대한 애플리케이션 코드가 액세스된다. 애플리케이션 코드는 라이브러리에서 조합된 하나 이상의 액세스가능한 API들을 지칭한다. 애플리케이션 코드 내에서 지칭되는 액세스가능한 API가 식별된다. 액세스가능한 API는 하나 이상의 액세스가능한 API들로부터 선택된다.
액세스가능한 API가 런타임에서 동적으로 액세스되지 않는다는 것이 결정된다. 속성이 액세스가능한 API로의 디폴트 가시성을 감소시키기 위해 액세스가능한 API에 적용된다. 속성은 런타임에서 런타임 환경에 액세스가능한 API로의 감소된 가시성이 (예를 들어, 리플렉션 또는 다른 동적 호출 기법들을 통해) 동적 액세스 요청들에 제공된다는 것을 나타낸다. API로의 가시성을 감소시키는 것은 메타데이터 생성을 대응하게 감소시킬 수 있다. 일부 실시예들에서, API로의 가시성을 감소시키는 것은 API에 대한 동적 액세스를 방지하는 것을 포함한다.
다른 실시예들은 소비자에게 API로의 특정한 가시성을 제공하는 것을 포함한다. 실행가능 코드가 런타임 환경에서 실행된다. 실행가능 코드는 애플리케이션 코드로부터 유도된다. 실행가능 코드의 실행 동안, 동적 호출이 실행가능 코드의 일부를 실행하기 위해 소비자로부터 수신된다. 실행가능 코드의 일부는 라이브러리내의 API를 지칭하는 애플리케이션 코드의 일부로부터 유도된다. API로의 런타임 디폴트 가시성이 API의 타입에 기초하여 액세스된다.
API에 적용된 임의의 속성들이 액세스된다. API에 적용된 속성들은 API로의 런타임 디폴트 가시성을 변경하기 위해 API의 작성자에 의한 소망을 나타낼 수 있다. 애플리케이션 코드의 일부에 적용된 임의의 속성들이 액세스된다. 애플리케이션 코드의 일부에 적용된 속성들은 API에 적용된 임의의 속성들에 의해 변경될 때 런타임 디폴트 가시성에 의해 표시된 것보다 적은 API로의 가시성을 제공하기 위해 애플리케이션 코드의 작성자에 의한 소망을 나타낼 수 있다.
API로의 계산된 가시성은 API로의 런타임 디폴트 가시성, API에 적용된 임의의 속성들, 및 API를 지칭하는 애플리케이션 코드의 일부에 적용된 임의의 속성들 중 하나 이상에 기초하여 결정된다. 동적 호출에는 API로의 계산된 가시성이 제공된다.
본 개요는 상세한 설명에서 더 후술하는 단순한 형태의 개념들의 선택을 도입하기 위해 제공된다. 본 개요는 청구물의 중요한 특징들 또는 본질적인 특징들을 식별하려는 것이 아니고 청구물의 범위의 결정을 돕는 것으로 사용되도록 의도되지 않는다.
본 발명의 추가의 특징들 및 이점들이 아래의 설명에서 설명될 것이고, 설명으로부터 부분적으로 명백할 것이거나, 본 발명의 실시에 의해 학습될 수 있다. 본 발명의 특징들 및 이점들은 첨부한 청구항들에서 특정하게 지적된 기구들 및 조합들의 수단에 의해 실현되고 획득될 수 있다. 본 발명의 이들 및 다른 특징들은 아래의 설명 및 첨부한 청구항들로부터 더욱 완전하게 명백해질 것이거나, 이하 설명하는 바와 같은 본 발명의 실시에 의해 학습될 수 있다.
본 발명의 상기 인용되고 다른 이점들 및 특징들이 획득될 수 있는 방식을 설명하기 위해, 간략하게 상술한 본 발명의 더욱 특정한 설명이 첨부한 도면들에 예시되는 본 발명의 특정한 실시예들을 참조하여 설명될 것이다. 이들 도면들이 본 발명의 통상의 실시예들만을 도시하고 따라서 본 발명의 범위를 제한하는 것으로 고려되지 않는다는 것을 이해하면, 본 발명은 첨부한 도면들을 사용하여 추가의 특이성 및 상세로 설명될 것이다.
도 1은 애플리케이션 프로그래밍 인터페이스에 대한 런타임 액세스의 제어를 용이하게 하는 예시적인 컴퓨터 아키텍처를 예시한다.
도 2는 애플리케이션 프로그래밍 인터페이스에 대한 런타임 액세스를 제어하는 예시적인 방법의 흐름도를 예시한다.
도 3은 액세스가능한 애플리케이션 프로그래밍 인터페이스로의 디폴트 가시성의 감소를 용이하게 하는 예시적인 컴퓨터 아키텍처를 예시한다.
도 4는 액세스가능한 애플리케이션 프로그래밍 인터페이스로의 디폴트 가시성을 감소시키는 예시적인 방법의 흐름도를 예시한다.
도 5는 소비자에게 애플리케이션 프로그래밍 인터페이스로의 특정한 가시성의 제공을 용이하게 하는 예시적인 컴퓨터 아키텍처를 예시한다.
도 6은 소비자에게 애플리케이션 프로그래밍 인터페이스로의 특정한 가시성을 제공하는 예시적인 방법의 흐름도를 예시한다.
본 발명은 애플리케이션 프로그래밍 인터페이스들에 대한 런타임 액세스를 제어하는 방법들, 시스템들 및 컴퓨터 프로그램 제품들에 관한 것이다. 본 발명의 실시예들은 애플리케이션 프로그래밍 인터페이스들(API)에 대한 런타임 액세스를 제어하는 것을 포함한다. 런타임 환경은 (예를 들어, 리플렉션 또는 다른 동적 호출 기법들을 통해) 동적 액세스 요청들에 API 타입에 기초한 API들로의 디폴트 가시성을 제공한다. 예를 들어, 비공개 API들로의 디폴트 가시성은 동적 액세스를 방지할 수 있다.
라이브러리에서 조합된 API들의 세트가 액세스된다. API들의 세트는 하나 이상의 공개 API들 및 하나 이상의 비공개 API들을 포함한다. API는 동적 액세스 요청들에 제공된 디폴트 가시성이 변경될 API들의 세트로부터 식별된다.
API로의 디폴트 가시성은 API에 속성을 적용함으로써 변경된다. 속성은 동적 액세스 요청들이 제공될 런타임에서 런타임 환경에 API로의 변경된 가시성을 나타낸다. 가시성을 변경하는 것은 비공개 API로의 동적 액세스를 허용하는 것을 포함할 수 있고, 이에 의해, 디폴트 동적 액세스가 허용되지 않는다.
다른 실시예들은 액세스가능한 API로의 디폴트 가시성을 감소시키는 것을 포함한다. 애플리케이션에 대한 애플리케이션 코드가 액세스된다. 애플리케이션 코드는 라이브러리에서 조합된 하나 이상의 액세스가능한 API들을 지칭한다. 애플리케이션 코드 내에서 지칭되는 액세스가능한 API가 식별된다. 액세스가능한 API는 복수의 액세스가능한 API들로부터 선택된다.
액세스가능한 API가 런타임에서 동적으로 액세스되지 않는다는 것이 결정된다. 속성이 액세스가능한 API로의 디폴트 가시성을 감소시키기 위해 액세스가능한 API에 적용된다. 속성은 런타임에서 런타임 환경에 액세스가능한 API로의 감소된 가시성이 (예를 들어, 리플렉션 또는 다른 동적 호출 기법들을 통해) 동적 액세스 요청들에 제공된다는 것을 나타낸다. API로의 가시성을 감소시키는 것은 메타데이터 생성을 대응하게 감소시킬 수 있다. 일부 실시예들에서, API로의 가시성을 감소시키는 것은 API에 대한 동적 액세스를 방지하는 것을 포함한다.
다른 실시예들은 소비자에게 API로의 특정한 가시성을 제공하는 것을 포함한다. 실행가능 코드가 런타임 환경에서 실행된다. 실행가능 코드는 애플리케이션 코드로부터 유도된다. 실행가능 코드의 실행 동안, 동적 호출이 실행가능 코드의 일부를 실행하기 위해 소비자로부터 수신된다. 실행가능 코드의 일부는 라이브러리내의 API를 지칭하는 애플리케이션 코드의 일부로부터 유도된다. API로의 런타임 디폴트 가시성이 API의 타입에 기초하여 액세스된다.
API에 적용된 임의의 속성들이 액세스된다. API에 적용된 속성들은 API로의 런타임 디폴트 가시성을 변경하기 위해 API의 작성자에 의한 소망을 나타낼 수 있다. 애플리케이션 코드의 일부에 적용된 임의의 속성들이 액세스된다. 애플리케이션 코드의 일부에 적용된 속성들은 API에 적용된 임의의 속성들에 의해 변경될 때 런타임 디폴트 가시성에 의해 표시된 것보다 적은 API로의 가시성을 제공하기 위해 애플리케이션 코드의 작성자에 의한 소망을 나타낼 수 있다.
API로의 계산된 가시성은 API로의 런타임 디폴트 가시성, API에 적용된 임의의 속성들, 및 API를 지칭하는 애플리케이션 코드의 일부에 적용된 임의의 속성들 중 하나 이상에 기초하여 결정된다. 동적 호출에는 API로의 계산된 가시성이 제공된다.
본 발명의 실시예들은 예를 들어, 아래에서 더욱 상세히 논의하는 바와 같은, 하나 이상의 프로세서들 및 시스템 메모리와 같은 컴퓨터 하드웨어를 포함하는 특수용 또는 범용 컴퓨터를 포함하거나 활용할 수 있다. 본 발명의 범위 내의 실시예들은 컴퓨터 실행가능 명령어들 및/또는 데이터 구조들을 반송하거나 저장하는 물리적 및 다른 컴퓨터 판독가능 매체들을 또한 포함한다. 이러한 컴퓨터 판독가능 매체들은 범용 또는 특수용 컴퓨터 시스템에 의해 액세스될 수 있는 임의의 가용 매체일 수 있다. 컴퓨터 실행가능 명령어들을 저장하는 컴퓨터 판독가능 매체들은 컴퓨터 저장 매체들(디바이스들)이다. 컴퓨터 실행가능 명령어들을 반송하는 컴퓨터 판독가능 매체들은 송신 매체들이다. 따라서, 제한하지 않는 예로서, 본 발명의 실시예들은 적어도 2개의 명확하게 상이한 종류의 컴퓨터 판독가능 매체들: 컴퓨터 저장 매체들(디바이스들) 및 송신 매체들을 포함할 수 있다.
컴퓨터 저장 매체들(디바이스들)은 RAM, ROM, EEPROM, CD-ROM, (예를 들어, RAM에 기초한) 고체 상태 드라이브들("SSDs"), 플래시 메모리, 상변화 메모리(PCM"), 다른 타입의 메모리, 다른 광학 디스크 저장 디바이스, 자기 디스크 저장 디바이스 또는 다른 자기 저장 디바이스, 또는 컴퓨터 실행가능 명령어들 또는 데이터 구조들의 형태로 원하는 프로그램 코드 수단을 저장하기 위해 사용될 수 있고 범용 또는 특수용 컴퓨터에 의해 액세스될 수 있는 임의의 다른 매체를 포함한다.
"네트워크"가 컴퓨터 시스템들 및/또는 모듈들 및/또는 다른 전자 디바이스들 사이에서 전자 데이터의 전송을 가능하게 하는 하나 이상의 데이터 링크들로서 정의된다. 정보가 네트워크 또는 다른 통신 연결(배선연결, 무선, 또는 배선연결 또는 무선의 조합)을 통해 컴퓨터에 전송될 때, 컴퓨터는 연결을 송신 매체로서 적절히 간주한다. 송신 매체들은 컴퓨터 실행가능 명령어들 또는 데이터 구조들의 형태로 원하는 프로그램 코드를 반송하기 위해 사용될 수 있고 범용 또는 특수용 컴퓨터에 의해 액세스될 수 있는 네트워크 및/또는 데이터 링크들을 포함할 수 있다. 상기의 조합들이 컴퓨터 판독가능 매체들의 범위 내에 또한 포함되어야 한다.
또한, 다양한 컴퓨터 시스템 컴포넌트들에 도달시에, 컴퓨터 실행가능 명령어들 또는 데이터 구조들의 형태의 프로그램 코드 수단이 송신 매체들로부터 컴퓨터 저장 매체들(디바이스들)로(또는 그 반대의 경우도 가능함) 자동으로 전송될 수 있다. 예를 들어, 네트워크 또는 데이터 링크를 통해 수신된 컴퓨터 실행가능 명령어들 또는 데이터 구조들은 네트워크 인터페이스 모듈(예를 들어, "NIC")내의 RAM에서 버퍼링될 수 있고, 그 후, 컴퓨터 시스템에서 컴퓨터 시스템 RAM 및/또는 난휘발성(less volatile) 컴퓨터 저장 매체들(디바이스들)로 결국 전송될 수 있다. 따라서, 컴퓨터 저장 매체들(디바이스들)은 송신 매체들을 또한(또는 심지어 주로) 활용하는 컴퓨터 시스템 컴포넌트들에 포함될 수 있다는 것을 이해해야 한다.
컴퓨터 실행가능 명령어들은 예를 들어, 프로세서에서 실행될 때, 범용 컴퓨터, 특수용 컴퓨터, 또는 특수용 프로세싱 디바이스로 하여금 특정한 기능 또는 기능들의 그룹을 수행하게 하는 명령어들 및 데이터를 포함한다. 컴퓨터 실행가능 명령어들은 예를 들어, 어셈블리 언어와 같은 이진파일, 중간 포맷 명령어들, 또는 심지어 소스 코드일 수 있다. 주제가 구조적 특징들 및/또는 방법적 작용들에 특정된 언어로 설명되었지만, 첨부한 청구항들에서 정의된 주제가 설명한 특징들 또는 상술한 작용들에 반드시 제한되지 않는다는 것을 이해해야 한다. 오히려, 설명한 특징들 및 작용들은 청구항들을 구현하는 예시적인 형태들로서 개시된다.
통상의 기술자는 본 발명이 개인 컴퓨터들, 데스크탑 컴퓨터들, 랩탑 컴퓨터들, 메시지 프로세서들, 핸드-헬드 디바이스들, 멀티-프로세서 시스템들, 마이크로프로세서 기반 또는 프로그램가능한 소비자 전자제품들, 네트워크 PC들, 미니컴퓨터들, 메인프레임 컴퓨터들, 모바일 전화들, PDA들, 태블릿들, 페이저들, 라우터들, 스위치들 등을 포함하는 다수의 타입들의 컴퓨터 시스템 구성들을 갖는 네트워크 컴퓨팅 환경들에서 실시될 수 있다는 것을 이해할 것이다. 본 발명은 네트워크를 통해 (배선연결 데이터 링크들, 무선 데이터 링크들에 의해, 또는 배선연결 및 무선 데이터 링크들의 조합에 의해) 링크되는 로컬 및 원격 컴퓨터 시스템들이 모두 작업을 수행하는 분산 시스템 환경들에서 또한 실시될 수 있다. 분산 시스템 환경에서, 프로그램 모듈들은 로컬 및 원격 메모리 저장 디바이스들 모두에 위치될 수 있다.
본 발명의 실시예들은 클라우드 컴퓨팅 환경들에서 또한 구현될 수 있다. 이러한 설명 및 아래의 청구항들에서, "클라우드 컴퓨팅"은 구성가능한 컴퓨팅 자원들의 공유된 풀에 대한 온-디맨드 네트워크 액세스를 가능하게 하는 모델로서 정의된다. 예를 들어, 클라우드 컴퓨팅은 구성가능한 컴퓨팅 자원들의 공유된 풀에 대한 유비쿼터스하고 편리한 온-디맨드 액세스를 제공하기 위해 마켓플레이스에서 이용될 수 있다. 구성가능한 컴퓨팅 자원들의 공유된 풀은 가상화를 통해 빠르게 제공될 수 있고 낮은 관리 노력 또는 서비스 제공자 상호작용으로 출시되며, 적절히 크기 조정(scale)될 수 있다.
클라우드 컴퓨팅 모델이 예를 들어, 온-디맨드 셀프-서비스, 브로드 네트워크 액세스, 자원 풀링, 빠른 탄력성(rapid elasticity), 측정된 서비스 등과 같은 다양한 특징들로 구성될 수 있다. 클라우드 컴퓨팅 모델은 예를 들어, "SaaS"(Software as a Service), "PaaS"(Platform as a Service), alc "IaaS"(Infrastructure as a Service)와 같은 다양한 서비스 모델들을 또한 노출시킬 수 있다. 클라우드 컴퓨팅 모델은 사설 클라우드, 커뮤니티 클라우드, 공개 클라우드, 하이브리드 클라우드 등과 같은 상이한 배치 모델들을 사용하여 또한 배치될 수 있다. 이러한 설명 및 청구항들에서, "클라우드 컴퓨팅 환경"은 클라우드 컴퓨팅이 이용되는 환경이다.
본 발명의 실시예들은 라이브러리 개발자들이 그들의 라이브러리의 API들 중 어느 것이 동적으로 호출될 수 있는지를 더욱 정밀하고 쉽게 제어하게 한다. 따라서, 개발자들의 서비싱 및 버저닝 부담이 더욱 적절하게 제어될 수 있다. 또한, 애플리케이션 개발자들은 런타임 지원 오버헤드를 최소화하기 위해, 동적 호출 시나리오들로부터 더 배제할 이러한 API들을 제어할 수 있다.
도 1은 애플리케이션 프로그래밍 인터페이스(API)에 대한 액세스의 제어를 용이하게 하는 예시적인 컴퓨터 아키텍처(100)를 예시한다. 도 1을 참조하면, 컴퓨터 아키텍처(100)는 개발 환경(101) 및 런타임 환경(102)을 포함한다. 개발 환경(101) 및 런타임 환경(102)은 예를 들어, 시스템 버스, 로컬 영역 네트워크("LAN"), 광역 네트워크("WAN"), 및 심지어 인터넷과 같은 네트워크(또는 그것의 일부)를 통해 서로에 연결될 수 있다. 따라서, 개발 환경(101) 및 런타임 환경(102) 뿐만 아니라 임의의 다른 연결된 컴퓨터 시스템들 및 그들의 컴포넌트들은 인터넷을 통해 메시지 관련 데이터 및 교환 메시지 관련 데이터(예를 들어, 인터넷 프로토콜("IP") 데이터그램들 및 "TCP"(Transmission Control Protocol), "HTTP"(Hypertext Transfer Protocol), "SMTP"(Simple Mail Transfer Protocol) 등과 같은 IP 데이터그램들을 활용하거나 다른 넌(non)-데이터그램 프로토콜들을 사용하는 다른 상위층 프로토콜들)를 생성할 수 있다.
개발 환경(101)은 소스 코드 에디터, 빌드 오토메이션, 디버거, 버전 제어 시스템, 클래스 브라우저, 오브젝트 검사기, 클래스 계층 다이어그램 등을 포함하지만 이에 제한되지 않는 소프트웨어 개발을 위한 기능을 제공하는 소프트웨어 애플리케이션일 수 있다. 일부 실시예들에서, 개발 환경(101)은 통합 개발 환경(IDE)을 포함하거나 IDE에 포함된다. 라이브러리 개발자가 속성을 API에 적용하여 API의 가시성을 동적 액세스 요청들로 변화시키기 위해 개발 환경(101)을 사용할 수 있다.
런타임 환경(102)은 소프트웨어 실행을 위한 기능을 제공하는 소프트웨어 애플리케이션일 수 있다. 런타임 환경(102)은 소프트웨어 개발 환경(101)에서 개발된 코드를 실행하는 컴파일러(예를 들어, just-in-time(JIT) 컴파일러) 및/또는 인터프리터를 포함할 수 있다. 일부 실시예들에서, 런타임 환경(102)은 통합 개발 환경(IDE)을 포함하거나 IDE에 포함된다. 런타임 환경(102)은 API에 대한 액세스를 동적으로 요청하는 메커니즘들(예를 들어, 리플렉션)을 포함할 수 있다.
개발 환경(101) 및 실행 환경(102)은 동일한 환경으로 통합될 수 있거나 개별 환경들에 상주할 수 있다.
런타임 환경(102)은 가시성 계산 모듈(109)을 포함한다. 가시성 계산 모듈은 API 타입(예를 들어, 내부, 사설, 공개 등) 및 적용된 속성들에 기초한 API로의 가시성을 계산하도록 구성된다. 디폴트 가시성 규칙들(108)이 각 API 타입에 대한 디폴트 가시성을 정의할 수 있다(예를 들어, 동적 액세스를 허용하거나 동적 액세스를 제거할 수 있다). 적용된 속성들은 디폴트 가시성을 변경하거나 재정의(override)하기 위해 사용될 수 있다. 이와 같이, 적용된 속성들은 라이브러리 개발자에게 개별 API들이 어떻게 동적으로 액세스될 수 있는지를 통해 더욱 정밀한 제어를 제공한다.
일부 실시예들에서, 디폴트 가시성 규칙들(108)은 동적 액세스가 사설 또는 내부로서 표시된 API들에 대해 제거된다는 것을 정의한다. 라이브러리 개발자는 속성을 사설 또는 내부 API에 적용하기 위해 개발 환경(101)을 사용할 수 있다. 적용된 속성은 동적 액세스가 사설 또는 내부 API에 대해 허용된다는 것을 나타낼 수 있다. 비공개 또는 내부 API에 대한 동적 호출을 수신시에, 가시성 계산 모듈(109)은 적용된 속성이 사설 또는 내부 API에 대한 (제거된 동적 액세스의) 디폴트 가시성을 재정의한다는 것을 결정할 수 있다. 이와 같이, 동적 호출은 사설 또는 내부 API에 대한 액세스가 허용된다.
도 2는 애플리케이션 프로그래밍 인터페이스(API)에 대한 액세스를 제어하는 예시적인 방법(200)의 흐름도를 예시한다. 방법(200)은 컴퓨터 아키텍처(100)의 컴포넌트들 및 데이터에 관하여 설명된다.
방법(200)은 라이브러리에서 조합된 애플리케이션 프로그래밍 인터페이스(API)들의 세트에 액세스하는 단계를 포함하고, 애플리케이션 프로그래밍 인터페이스(API)들의 세트는 하나 이상의 공개 애플리케이션 프로그래밍 인터페이스(API)들 및 하나 이상의 비공개 애플리케이션 프로그래밍 인터페이스(API)들을 포함한다(201). 예를 들어, 개발 환경(101)은 라이브러리(103)에 액세스할 수 있다. 라이브러리(103)는 공개 API(104)를 포함하는 하나 이상의 공개 API들을 포함한다. 라이브러리(103)는 비공개 API(106)를 포함하는 하나 이상의 비공개(예를 들어, 사설 또는 내부) API들을 포함한다.
방법(200)은 동적 액세스 요청들에 제공된 디폴트 가시성이 변경되는 애플리케이션 프로그래밍 인터페이스(API)들의 세트로부터 애플리케이션 프로그래밍 인터페이스(API)를 식별하는 단계를 포함한다(202). 예를 들어, (가능하면 작성자 입력에 응답하여) 개발 환경(101)은 비공개 API(106)로의 (예를 들어, 리플렉션 또는 다른 동적 호출 기법들을 사용하는) 동적 액세스 요청들에 대한 디폴트 가시성이 변경된다는 것을 식별할 수 있다.
방법(200)은 속성을 애플리케이션 프로그래밍 인터페이스(API)에 적용함으로써 애플리케이션 프로그래밍 인터페이스(API)로의 디폴트 가시성을 변경된 가시성으로 변경하는 단계를 포함하고, 속성은 동적 액세스 요청들이 제공되는 런타임에서 런타임 환경에 애플리케이션 프로그래밍 인터페이스(API)로의 변경된 가시성을 나타낸다(203). 예를 들어, 작성자(113)는 개발 환경(101)에서 가시성 입력(112)을 입력할 수 있다. 가시성 입력(112)에 응답하여, 개발 환경(101)은 속성(107)을 비공개 API(106)에 적용할 수 있다. 속성(107)은 디폴트 가시성 규칙들(108)에서 정의된 비공개 API들에 대한 디폴트 가시성이 비공개 API(106)에 대해 변경된다는 것을 런타임 환경(102)에 나타낼 수 있다.
이어서, 라이브러리(103)는 실행가능 코드(111)로 다른 소스 코드에 따라 컴파일링될 수 있다. 실행가능 코드(111)의 실행 동안, 가시성 계산 모듈(109)은 비공개 API(106)로의 가시성을 계산할 때 디폴트 가시성 규칙들(108) 및 속성(107) 양자를 고려할 수 있다. 일부 실시예들에서, 속성(107)은 디폴트 가시성 규칙들(108)이 비공개 API들에 대한 동적 액세스가 방지된다는 것을 나타내더라도 비공개 API(106)에 대한 동적 액세스가 허용된다는 것을 나타낸다.
도 3은 액세스가능한 애플리케이션 프로그래밍 인터페이스(API)로의 디폴트 가시성의 감소를 용이하게 하는 예시적인 컴퓨터 아키텍처(100)를 예시한다. 도 3을 참조하면, 컴퓨터 아키텍처(300)는 개발 환경(301) 및 런타임 환경(302)을 포함한다. 개발 환경(301) 및 런타임 환경(302)은 예를 들어, 시스템 버스, 로컬 영역 네트워크("LAN"), 광역 네트워크("WAN"), 및 심지어 인터넷과 같은 네트워크(또는 그것의 일부)를 통해 서로에 연결될 수 있다. 따라서, 개발 환경(301) 및 런타임 환경(302) 뿐만 아니라 임의의 다른 연결된 컴퓨터 시스템들 및 그들의 컴포넌트들은 인터넷을 통해 메시지 관련 데이터 및 교환 메시지 관련 데이터(예를 들어, 인터넷 프로토콜("IP") 데이터그램들 및 "TCP"(Transmission Control Protocol), "HTTP"(Hypertext Transfer Protocol), "SMTP"(Simple Mail Transfer Protocol) 등과 같은 IP 데이터그램들을 활용하거나 다른 넌-데이터그램 프로토콜들을 사용하는 다른 상위층 프로토콜들)를 생성할 수 있다.
개발 환경(301)은 소스 코드 에디터, 빌드 오토메이션, 디버거, 버전 제어 시스템, 클래스 브라우저, 오브젝트 검사기, 클래스 계층 다이어그램 등을 포함하지만 이에 제한되지 않는 소프트웨어 개발을 위한 기능을 제공하는 소프트웨어 애플리케이션일 수 있다. 일부 실시예들에서, 개발 환경(301)은 통합 개발 환경(IDE)을 포함하거나 IDE에 포함된다. 애플리케이션 개발자가 (예를 들어, 제 3 자 라이브러리에 포함된) 액세스가능한 API를 참조하는 코드에 속성을 적용하기 위해 개발 환경(301)을 사용할 수 있다. 액세스가능한 API를 참조하는 코드에 적용된 속성들은 액세스가능한 API로의 디폴트 가시성을 감소시키기 위해 사용될 수 있다.
런타임 환경(302)은 소프트웨어 실행을 위한 기능을 제공하는 소프트웨어 애플리케이션일 수 있다. 런타임 환경은 소프트웨어 개발 환경(301)에서 개발된 코드를 실행하는 컴파일러(예를 들어, just-in-time(JIT) 컴파일러) 및/또는 인터프리터를 포함할 수 있다. 일부 실시예들에서, 런타임 환경(302)은 통합 개발 환경(IDE)을 포함하거나 IDE에 포함된다. 런타임 환경(302)은 API에 대한 액세스를 동적으로 요청하는 메커니즘들(예를 들어, 리플렉션)을 포함할 수 있다.
개발 환경(302) 및 실행 환경(102)은 동일한 환경으로 통합될 수 있거나 개별 환경들에 상주할 수 있다.
런타임 환경(302)은 가시성 계산 모듈(309)을 포함한다. 가시성 계산 모듈(309)은 액세스가능한 API를 참조하는 코드에 적용된 속성들에 기초하여 액세스가능한 API(예를 들어, 동적 액세스를 허용하도록 기인되는 공개 API 또는 비공개 API)로의 가시성을 계산하도록 구성된다. 디폴트 가시성 규칙들(308)은 액세스가능한 API들로의 동적 액세스를 허용할 수 있다. 이와 같이, 적용된 속성들은 동적 액세스로부터 (예를 들어, 제 3 자 라이브러리에 포함된) 기타 액세스가능한 API들을 배제하기 위한 메커니즘을 애플리케이션 개발자에게 제공한다. 동적 액세스로부터 기타 액세스가능한 API를 배제하는 것은 런타임 지원 오버헤드(예를 들어, 메타데이터 생성)를 최소화하여 자원들을 보존한다.
도 4는 액세스가능한 애플리케이션 프로그래밍 인터페이스(API)로의 디폴트 가시성을 감소시키는 예시적인 방법(400)의 흐름도를 예시한다. 방법(400)은 컴퓨터 아키텍처(300)의 컴포넌트들 및 데이터에 관하여 설명된다.
방법(400)은 애플리케이션에 대한 애플리케이션 코드에 액세스하는 단계를 포함하고, 애플리케이션 코드는 라이브러리에서 조합된 하나 이상의 액세스가능한 애플리케이션 프로그래밍 인터페이스(API)들을 지칭한다(401). 예를 들어, 개발 환경(301)은 애플리케이션 코드(314)에 액세스할 수 있다. 개발 환경(301)은 액세스 라이브러리(303)에 또한 액세스할 수 있다. 애플리케이션 코드(314)는 예를 들어, 라이브러리(303)에 포함된 API들(304 및 306)과 같은 하나 이상의 API들을 지칭할 수 있다.
방법(400)은 애플리케이션 코드내에서 지칭되는 액세스가능한 애플리케이션 프로그래밍 인터페이스(API)를 식별하는 단계를 포함하고, 액세스가능한 애플리케이션 프로그래밍 인터페이스(API)는 하나 이상의 액세스가능한 애플리케이션 프로그래밍 인터페이스(API)들로부터 선택된다(402). 예를 들어, 개발 환경(301)은 API 레퍼런스(316)에 의해 지칭되는 API(306)를 식별할 수 있다.
방법(400)은 액세스가능한 애플리케이션 프로그래밍 인터페이스(API)가 런타임에서 동적으로 액세스되지 않는다는 것을 결정하는 단계를 포함한다(403). 예를 들어, (가능하면 작성자 입력에 응답하여) 개발 환경(301)은 API(306)에 대한 동적 액세스가 방지된다는 것을 결정할 수 있다.
방법(400)은 속성을 액세스가능한 애플리케이션 프로그래밍 인터페이스(API)를 지칭하는 애플리케이션 코드의 일부에 적용함으로써 액세스가능한 애플리케이션 프로그래밍 인터페이스(API)로의 디폴트 가시성을 감소된 가시성으로 감소하는 단계를 포함하고, 속성은 동적 액세스 요청들이 제공되는 런타임에서 런타임 환경에 액세스가능한 애플리케이션 프로그래밍 인터페이스(API)로의 감소된 가시성을 나타낸다(404). 예를 들어, 작성자(313)는 개발 환경(301)에서 가시성 입력(112)을 입력할 수 있다. 가시성 입력(312)에 응답하여, 개발 환경(301)은 속성(317)을 API 레퍼런스(316)(API(306)에 대한 레퍼런스)에 적용할 수 있다. 속성(317)은 API(306)에 대한 디폴트 가시성이 감소된다는 것을 런타임 환경(302)에 나타낼 수 있다.
이어서, 애플리케이션 코드(314) 및 라이브러리(303)는 실행가능 코드(111)로 (가능하면 다른 소스 코드에 따라) 컴파일링될 수 있다. 실행가능 코드(311)의 실행 동안, 가시성 계산 모듈(309)은 API(306)로의 가시성을 계산할 때 디폴트 가시성 규칙들(308) 및 속성(317) 양자를 고려할 수 있다. 일부 실시예들에서, 속성(317)은 디폴트 가시성 규칙들(308)이 액세스가능한 API들에 대한 동적 액세스가 허용된다는 것을 나타내더라도 API(306)에 대한 동적 액세스가 방지된다는 것을 나타낸다.
API로의 제한된 가시성은 API에 대한 메타데이터를 생성하는 것을 포함하지 않을 수 있다. 예를 들어, 컴퓨터 아키텍처(300)에 도시한 바와 같이, 메타데이터는 API(306)에 대해 생성되지 않는다. 다른 한편으로, 메타데이터(319)는 API(304)(애플리케이션 코드(314)로부터 참조되는 다른 액세스가능한 API)에 대해 생성될 수 있다.
도 5는 소비자에게 애플리케이션 프로그래밍 인터페이스(API)로의 특정한 가시성의 제공을 용이하게 하는 예시적인 런타임 환경(500)을 예시한다. 도 5를 참조하면, 런타임 환경(500)은 가시성 계산 모듈(501) 및 소비자(531)를 포함한다. 가시성 계산 모듈(531) 및 소비자(531)는 예를 들어, 시스템 버스, 로컬 영역 네트워크("LAN"), 광역 네트워크("WAN"), 및 심지어 인터넷과 같은 네트워크(또는 그것의 일부)를 통해 서로에 연결될 수 있다. 따라서, 가시성 계산 모듈(501) 및 소비자(531) 뿐만 아니라 임의의 다른 연결된 컴퓨터 시스템들 및 그들의 컴포넌트들은 인터넷을 통해 메시지 관련 데이터 및 교환 메시지 관련 데이터(예를 들어, 인터넷 프로토콜("IP") 데이터그램들 및 "TCP"(Transmission Control Protocol), "HTTP"(Hypertext Transfer Protocol), "SMTP"(Simple Mail Transfer Protocol) 등과 같은 IP 데이터그램들을 활용하거나 다른 넌-데이터그램 프로토콜들을 사용하는 다른 상위층 프로토콜들)를 생성할 수 있다.
런타임 환경(500)은 소프트웨어 실행을 위한 기능을 제공하는 소프트웨어 애플리케이션일 수 있다. 런타임 환경은 소프트웨어 개발 환경(500)에서 개발된 코드를 실행하는 컴파일러(예를 들어, just-in-time(JIT) 컴파일러) 및/또는 인터프리터를 포함할 수 있다. 일부 실시예들에서, 런타임 환경(500)은 통합 개발 환경(IDE)을 포함하거나 IDE에 포함된다. 런타임 환경(500)은 API에 대한 액세스를 동적으로 요청하는 메커니즘들(예를 들어, 리플렉션)을 포함할 수 있다.
런타임 환경(500)은 가시성 계산 모듈(501)을 포함한다. 가시성 계산 모듈(501)은 라이브러리에서 함께 그룹화되는 복수의 API들 각각으로의 가시성을 계산하도록 구성된다. 가시성은 API 타입(예를 들어, 내부, 사설, 공개), API에 적용된 속성들(예를 들어, 라이브러리 작성자), 및 API를 참조하는 애플리케이션에 적용된 속성들에 기초하여 API에 대해 계산될 수 있다. 적용된 속성들은 디폴트 가시성을 변경하거나 재정의하고, 감소시키기 위해 사용될 수 있다.
일부 실시예들에서, 디폴트 가시성 규칙들(502)은 동적 액세스가 비공개(예를 들어, 사설 또는 내부) API에 대해 제거되고 동적 액세스가 공개 API들에 대해 허용된다는 것을 정의한다. 그러나, 비공개 API의 작성자(예를 들어, 라이브러리 작성자)는 디폴트 가시성을 재정의하고 비공개 API에 대한 동적 액세스를 허용하기 위해 속성을 비공개 API에 적용할 수 있다. 유사하게, 공개 API의 작성자(예를 들어, 라이브러리 작성자)는 디폴트 가시성을 재정의하고 공개 API에 대한 동적 액세스를 거부하기 위해 속성을 공개 API에 적용할 수 있다. 다른 디폴트 가시서 규칙들이 또한 가능하다.
(디폴트에 의해 동적으로 액세스가능하든 또는 적용된 속성에 의해 동적으로 액세스가능하든) 임의의 동적으로 액세스가능한 API들에 대해, 제 3 자 작성자(예를 들어, 애플리케이션 작성자)는 API로부터 동적 액세스를 제거하기 위해 동적으로 액세스가능한 API를 참조하는 코드에 속성을 적용할 수 있다. 따라서, 애플리케이션 작성자는 런타임 지원 오버헤드(예를 들어, 메타데이터 생성)를 최소화할 수 있어서, 자원들을 보존한다.
도 6은 소비자에게 애플리케이션 프로그래밍 인터페이스(API)로의 특정한 가시성을 제공하는 예시적인 방법(600)의 흐름도를 예시한다. 방법(600)은 런타임 환경(500)의 컴포넌트들 및 데이터에 관하여 설명된다.
방법(600)은 런타임 환경에서 실행가능 코드를 실행하는 단계를 포함하고, 실행가능 코드는 애플리케이션 코드로부터 유도된다(601). 예를 들어, 실행가능 코드는 런타임 환경(500)에서 실행될 수 있다. 실행가능 코드(503)는 라이브러리에 포함된 API들에 대한 레퍼런스들을 포함하는 애플리케이션 코드로부터 유도될 수 있다. 예를 들어, API 레퍼런스들(511 및 517)은 라이브러리에 포함된 API들을 참조할 수 있다. 라이브러리에 포함된 API들은 API들(513 및 518)을 포함할 수 있다.
방법(600)은 실행가능 코드의 실행 동안, 실행가능 코드의 일부를 실행하기 위해 소비자로부터의 동적 호출을 수신하는 단계를 포함하고, 실행가능 코드의 일부는 라이브러리내의 애플리케이션 프로그램 인터페이스(API)를 지칭하는 애플리케이션 코드의 일부로부터 유도된다. 예를 들어, 동적 호출(521)이 소비자(531)로부터 수신될 수 있다. 동적 호출(521)은 실행가능 코드(503)의 일부를 실행하기 위한 코드일 수 있다.
일 실시예에서, 동적 호출(521)은 API 레퍼런스(511)를 포함하는 실행가능 코드를 실행하기 위한 호출이다. API 레퍼런스(511)는 API(513) 또는 API(518)를 참조할 수 있다. 다른 실시예에서, 동적 호출(521)은 API 레퍼런스(517)를 포함하는 실행가능 코드를 실행하기 위한 호출이다. API 레퍼런스(517)는 API(513) 또는 API(518)를 참조할 수 있다.
방법(600)은 애플리케이션 프로그램 인터페이스(API)의 타입에 기초하여 애플리케이션 프로그램 인터페이스(API)로의 런타임 디폴트 가시성에 액세스하는 단계를 포함한다(603). 타입(514)에 의해 표시된 바와 같이, API(513)는 비공개 API이다. 따라서, API 레퍼런스가 API(513)를 참조할 때, 비공개 API들에 대한 (예를 들어, 동적 액세스를 방지하는) 런타임 디폴트 가시성이 (API(513)에 대한) 디폴트 가시성 규칙들(502)로부터 액세스될 수 있다. 타입(519)에 의해 표시된 바와 같이, API(518)는 공개 API이다. 따라서, API 레퍼런스가 API(518)를 참조할 때, 공개 API들에 대한 (예를 들어, 동적 액세스를 허용하는) 런타임 디폴트 가시성이 (API(518)에 대한) 디폴트 가시성 규칙들(502)로부터 액세스될 수 있다.
방법(600)은 애플리케이션 프로그램 인터페이스(API)에 적용된 임의의 속성들에 액세스하는 단계를 포함하고, 애플리케이션 프로그램 인터페이스(API)에 적용된 속성들은 애플리케이션 프로그램 인터페이스(API)로의 런타임 디폴트 가시성을 변경하기 위한 애플리케이션 프로그램 인터페이스(API)의 작성자의 소망을 나타낸다(604). 예를 들어, API 레퍼런스가 API(513)를 참조할 때, 속성(516)이 액세스될 수 있다. 속성(516)은 API(513)로의 (디폴트 가시성 규칙들(502)에서 정의된 바와 같은) 런타임 디폴트 가시성을 변경하기 위한 라이브러리 작성자의 소망을 나타낼 수 있다. 예를 들어, 디폴트에 의해, 비공개 API들에 대한 동적 액세스가 방지될 수 있다. 그러나, 속성(516)은 API(513)에 대한 동적 액세스가 허용된다는 것을 나타낼 수 있다.
방법(600)은 애플리케이션 프로그램 인터페이스(API)를 지칭하는 애플리케이션 코드의 일부에 적용된 임의의 속성들에 액세스하는 단계를 포함하고, 애플리케이션 코드의 일부에 적용된 속성들은 애플리케이션 프로그램 인터페이스(API)에 적용된 임의의 속성에 의해 변경될 때 런타임 디폴트 가시성에 의해 표시된 것 보다 적은 범위로 애플리케이션 프로그램 인터페이스(API)로의 가시성을 제공하기 위한 애플리케이션 코드의 작성자의 소망을 나타낸다(605). 예를 들어, 동적 호출(521)이 API 레퍼런스(511)를 포함하는 실행가능 코드를 실행하기 위한 호출일 때, 속성(512)이 액세스될 수 있다. 속성(512)은 레퍼런스 API(예를 들어, API(513) 또는 API(518))로의 가시성을 감소시키기 위한 애플리케이션 작성자에 의한 소망을 나타낸다. 예를 들어, 속성(512)은 레퍼런스 API(예를 들어, API(513) 또는 API(518)에 대한 동작 액세스가 방지된다는 것을 나타낼 수 있다. 이와 같이, 라이브러리 작성자가 API에 대한 동적 액세스를 허용하더라도, 애플리케이션 개발자는 API에 대한 동적 액세스를 방지하기 위해 속성(512)을 적용할 수 있다.
방법(600)은 애플리케이션 프로그램 인터페이스(API)로의 런타임 디폴트 가시성, 애플리케이션 프로그램 인터페이스(API)에 적용된 임의의 속성들, 및 애플리케이션 프로그램 인터페이스(API)를 지칭하는 애플리케이션 코드의 일부에 적용된 임의의 속성들 중 하나 이상에 기초하여 애플리케이션 프로그램 인터페이스(API)로의 계산된 가시성을 결정하는 단계를 포함한다(606). 따라서, 가시성 계산 모듈(501)은 (디폴트 가시성 규칙들(502)에 정의된 바와 같은) API의 타입에 대한 디폴트 가시성, API에 적용된 임의의 속성들, 및 API를 참조하는 API 레퍼런스에 적용된 임의의 속성들에 기초하여 API로의 계산된 가시성(522)을 결정할 수 있다.
방법(600)은 계산된 가시성에 따라 동적 호출에 애플리케이션 프로그램 인터페이스(API)로의 가시성을 제공하는 단계를 포함한다(607). 예를 들어, 소비자(531)에게는 실행가능 코드(503)에서 동적으로 호출된 API로의 가시성(522)이 제공될 수 있다. 동적 호출(521)의 결과들(524)이 소비자(531)에게 또한 리턴될 수 있다. 결과들(524)은 동적으로 호출된 API에 대한 동적 액세스가 허용되지 않는다는 것을 나타낼 수 있다.
실행가능 코드(503)내에서, 참조하는 코드 및 API들의 다양한 상이한 조합들이 가능하다. 일 실시예에서, 동적 호출(521)은 API(513)를 호출하기 위해 API 레퍼런스(511)를 사용한다. 이러한 실시예에서, 가시성(522)은 (예를 들어, 디폴트 가시성 규칙들(502)에서 정의된 바와 같은) API 타입(514)에 대한 디폴트 가시성, 속성(512), 및 속성(516)으로부터 결정된다. 다른 실시예에서, 동적 호출(521)은 API(518)를 호출하기 위해 API 레퍼런스(511)를 사용한다. 이러한 실시예에서, 가시성(522)은 (예를 들어, 디폴트 가시성 규칙들(502)에서 정의된 바와 같은) API 타입(519)에 대한 디폴트 가시성 및 속성(512)으로부터 결정된다.
다른 실시예에서, 동적 호출(521)은 API(513)를 호출하기 위해 API 레퍼런스(517)를 사용한다. 이러한 다른 실시예에서, 가시성(522)은 (예를 들어, 디폴트 가시성 규칙들(502)에서 정의된 바와 같은) API 타입(514)에 대한 디폴트 가시성 및 속성(516)으로부터 결정된다. 추가의 실시예에서, 동적 호출(521)은 API(518)를 호출하기 위해 API 레퍼런스(517)를 사용한다. 이러한 다른 실시예에서, 가시성(522)은 (예를 들어, 디폴트 가시성 규칙들(502)에서 정의된 바와 같은) API 타입(519)에 대한 디폴트 가시성으로부터 결정된다.
본 발명은 본 발명의 사상 또는 본질적인 특징들로부터 벗어나지 않고 다른 특정한 형태들에서 실시될 수 있다. 설명한 실시예들은 제한적인 것이 아니라 단지 예시적인 것으로서 모든 관점에서 고려되어야 한다. 따라서, 본 발명의 범위는 상술한 설명 보다는 첨부한 청구항들에 의해 나타내어 진다. 청구항들의 등가물의 의미 및 범위내에 있는 모든 변경들이 청구항들의 범위내에 포함되어야 한다.

Claims (20)

  1. 컴퓨터 시스템에서 애플리케이션 프로그래밍 인터페이스(application programming interface; API)의 런타임 가시성(runtime visibility)을 변경하기 위한 방법에 있어서,
    상기 컴퓨터 시스템은 애플리케이션 프로그래밍 인터페이스(API)를 포함하는 실행가능 코드를 개발하기 위한 개발 환경을 포함하고, 상기 실행가능 코드는 애플리케이션 프로그래밍 인터페이스(API)로의 액세스를 동적으로 요청할 수 있는 런타임 환경에서 실행하기 위한 것이고, 상기 런타임 환경은, 애플리케이션 프로그래밍 인터페이스(API) 타입에 기초하여 애플리케이션 프로그래밍 인터페이스(API)로의 디폴트(default) 가시성을 동적 액세스 요청에 제공하며, 상기 방법은,
    라이브러리(library)에서 조합된 애플리케이션 프로그래밍 인터페이스(API)들의 세트에 액세스하는 단계 - 애플리케이션 프로그래밍 인터페이스(API)들의 상기 세트는 하나 이상의 공개(public) 애플리케이션 프로그래밍 인터페이스(API)와 하나 이상의 비공개(non-public) 애플리케이션 프로그래밍 인터페이스(API)를 포함함 -;
    애플리케이션 프로그래밍 인터페이스(API)들의 상기 세트 중에서, 동적 액세스 요청에 제공된 상기 디폴트 가시성이 변경될 애플리케이션 프로그래밍 인터페이스(API)를 식별하는 단계 - 상기 애플리케이션 프로그래밍 인터페이스(API)로의 디폴트 가시성은 상기 애플리케이션 프로그래밍 인터페이스(API)의 애플리케이션 프로그래밍 인터페이스(API) 타입에 의해 정의되고, 상기 디폴트 가시성은 어떤 다른 소프트웨어 컴포넌트가 런타임에 상기 애플리케이션 프로그래밍 인터페이스(API)에 액세스할 수 있는지를 정의함 -; 및
    추가(additional) 속성을 상기 애플리케이션 프로그래밍 인터페이스(API)에 부착(attach)시킴으로써 상기 애플리케이션 프로그래밍 인터페이스(API)로의 상기 디폴트 가시성을 재정의(override)하는 단계
    를 포함하고,
    상기 추가 속성은, 상기 애플리케이션 프로그래밍 인터페이스(API)에 액세스하기 위한 런타임 동적 액세스 요청이, 상기 애플리케이션 프로그래밍 인터페이스(API)에 부착된 상기 추가 속성을 사용해 평가될 것이라는 것을 런타임 가시성 계산 모듈에게 나타내는 것인, 애플리케이션 프로그래밍 인터페이스(API)의 런타임 가시성을 변경하기 위한 방법.
  2. 제1항에 있어서,
    상기 애플리케이션 프로그래밍 인터페이스(API)를 식별하는 단계는, 상기 애플리케이션 프로그래밍 인터페이스(API)를 상기 애플리케이션 프로그래밍 인터페이스(API)의 작성자에게 노출시키는 단계를 포함하는 것인, 애플리케이션 프로그래밍 인터페이스(API)의 런타임 가시성을 변경하기 위한 방법.
  3. 제2항에 있어서,
    상기 애플리케이션 프로그래밍 인터페이스(API)로의 상기 디폴트 가시성을 재정의하는 단계는, 상기 애플리케이션 프로그래밍 인터페이스(API)의 작성자가 상기 애플리케이션 프로그래밍 인터페이스(API)의 상기 디폴트 가시성을 변경하는 단계를 포함하는 것인, 애플리케이션 프로그래밍 인터페이스(API)의 런타임 가시성을 변경하기 위한 방법.
  4. 제1항에 있어서,
    상기 애플리케이션 프로그래밍 인터페이스(API)를 식별하는 단계는 비공개 애플리케이션 프로그래밍 인터페이스(API)를 식별하는 단계를 포함하고, 상기 비공개 애플리케이션 프로그래밍 인터페이스(API)에 대한 상기 디폴트 가시성은 상기 비공개 애플리케이션 프로그래밍 인터페이스(API)에 대한 동적 액세스 요청을 방지하는 것인, 애플리케이션 프로그래밍 인터페이스(API)의 런타임 가시성을 변경하기 위한 방법.
  5. 제4항에 있어서,
    상기 애플리케이션 프로그래밍 인터페이스(API)로의 상기 디폴트 가시성을 재정의하는 단계는 상기 비공개 애플리케이션 프로그래밍 인터페이스(API)에 속성을 부착시키는 단계를 포함하고, 상기 속성은, 상기 비공개 애플리케이션 프로그래밍 인터페이스(API)에 대한 동적 액세스 요청을 허용하도록 상기 비공개 애플리케이션 프로그래밍 인터페이스(API)로의 상기 디폴트 가시성을 재정의하는 것인, 애플리케이션 프로그래밍 인터페이스(API)의 런타임 가시성을 변경하기 위한 방법.
  6. 제1항에 있어서,
    상기 애플리케이션 프로그래밍 인터페이스(API)를 식별하는 단계는 공개 애플리케이션 프로그래밍 인터페이스(API)를 식별하는 단계를 포함하고, 상기 공개 애플리케이션 프로그래밍 인터페이스(API)에 대한 상기 디폴트 가시성은 상기 공개 애플리케이션 프로그래밍 인터페이스(API)에 대한 동적 액세스 요청을 허용하는 것인, 애플리케이션 프로그래밍 인터페이스(API)의 런타임 가시성을 변경하기 위한 방법.
  7. 제6항에 있어서,
    상기 애플리케이션 프로그래밍 인터페이스(API)로의 상기 디폴트 가시성을 재정의하는 단계는 상기 공개 애플리케이션 프로그래밍 인터페이스(API)에 속성을 부착시키는 단계를 포함하고, 상기 속성은, 상기 공개 애플리케이션 프로그래밍 인터페이스(API)에 대한 동적 액세스 요청을 방지하도록 상기 공개 애플리케이션 프로그래밍 인터페이스(API)에 대한 상기 디폴트 가시성을 재정의하는 것인, 애플리케이션 프로그래밍 인터페이스(API)의 런타임 가시성을 변경하기 위한 방법.
  8. 제1항에 있어서,
    상기 동적 액세스 요청은 리플렉션(reflection)을 활용하는 것인, 애플리케이션 프로그래밍 인터페이스(API)의 런타임 가시성을 변경하기 위한 방법.
  9. 컴퓨터 시스템에서 액세스가능 애플리케이션 프로그래밍 인터페이스(application program interface; API)로의 디폴트 가시성을 감소시키기 위한 방법에 있어서,
    상기 컴퓨터 시스템은 애플리케이션 프로그래밍 인터페이스(API)를 포함하는 실행가능 코드를 개발하기 위한 개발 환경을 포함하고, 상기 실행가능 코드는 애플리케이션 프로그래밍 인터페이스(API)로의 액세스를 동적으로 요청할 수 있는 런타임 환경에서 실행하기 위한 것이고, 상기 런타임 환경은 애플리케이션 프로그래밍 인터페이스(API)로의 디폴트 가시성을 가지며, 상기 방법은,
    애플리케이션에 대한 애플리케이션 코드에 액세스하는 단계 - 상기 애플리케이션 코드는 라이브러리에서 조합된 하나 이상의 액세스가능 애플리케이션 프로그래밍 인터페이스(API)를 참조(refer)함 -;
    상기 애플리케이션 코드 내로 참조되는 액세스가능 애플리케이션 프로그래밍 인터페이스(API)를 식별하는 단계 - 상기 액세스가능 애플리케이션 프로그래밍 인터페이스(API)는 상기 하나 이상의 액세스가능 애플리케이션 프로그래밍 인터페이스(API) 중에서 선택되고, 상기 애플리케이션 프로그래밍 인터페이스(API)로의 디폴트 가시성은 상기 애플리케이션 프로그래밍 인터페이스(API)의 애플리케이션 프로그래밍 인터페이스(API) 타입에 의해 정의되며, 상기 디폴트 가시성은 어떤 다른 소프트웨어 컴포넌트가 런타임에 상기 애플리케이션 프로그래밍 인터페이스(API)에 액세스할 수 있는지를 정의함 -;
    상기 애플리케이션 프로그래밍 인터페이스(API) 타입에 기초해 런타임에 상기 애플리케이션 프로그래밍 인터페이스(API)에 복수의 소프트웨어 컴포넌트들이 액세스가능하다고 결정하는 단계; 및
    상기 액세스가능 애플리케이션 프로그래밍 인터페이스(API)를 참조하는 상기 애플리케이션 코드의 부분에 추가(additional) 속성을 부착시킴으로써, 상기 액세스가능 애플리케이션 프로그래밍 인터페이스(API)로의 상기 디폴트 가시성을 재정의하는 단계
    를 포함하고,
    상기 추가 속성은, 상기 애플리케이션 프로그래밍 인터페이스(API)로의 런타임 동적 액세스 요청이, 상기 복수의 소프트웨어 컴포넌트들 중 적어도 하나에 대해 방지될 것이라는 것을 런타임 가시성 계산 모듈에게 나타내는 것인, 액세스가능 애플리케이션 프로그래밍 인터페이스(API)로의 디폴트 가시성을 감소시키기 위한 방법.
  10. 제9항에 있어서,
    상기 애플리케이션 코드 내로 참조되는 액세스가능 애플리케이션 프로그래밍 인터페이스(API)를 식별하는 단계는, 상기 애플리케이션 코드의 작성자에게로 참조되는 상기 액세스가능 애플리케이션 프로그래밍 인터페이스(API)를 식별하는 단계를 포함하는 것인, 액세스가능 애플리케이션 프로그래밍 인터페이스(API)로의 디폴트 가시성을 감소시키기 위한 방법.
  11. 제10항에 있어서,
    상기 애플리케이션 코드의 부분에 추가 속성을 부착시키는 단계는, 상기 애플리케이션 코드의 작성자가 상기 애플리케이션의 상기 부분에 상기 추가 속성을 부착시키는 단계를 포함하는 것인, 액세스가능 애플리케이션 프로그래밍 인터페이스(API)로의 디폴트 가시성을 감소시키기 위한 방법.
  12. 제9항에 있어서,
    상기 애플리케이션 코드의 부분에 추가 속성을 부착시키는 단계는, 공개 API를 참조하는 상기 애플리케이션 코드의 부분에 추가 속성을 부착시키는 단계를 포함하는 것인, 액세스가능 애플리케이션 프로그래밍 인터페이스(API)로의 디폴트 가시성을 감소시키기 위한 방법.
  13. 제9항에 있어서,
    상기 애플리케이션 코드의 부분에 추가 속성을 부착시키는 단계는, 비공개 API를 참조하는 상기 애플리케이션 코드의 부분에 추가 속성을 부착시키는 단계를 포함하고, 상기 비공개 API는 상기 비공개 API로의 동적 액세스가 허용됨을 나타내는 추가(further) 속성을 갖는 것인, 액세스가능 애플리케이션 프로그래밍 인터페이스(API)로의 디폴트 가시성을 감소시키기 위한 방법.
  14. 제9항에 있어서,
    상기 액세스가능 애플리케이션 프로그래밍 인터페이스(API)로의 상기 디폴트 가시성을 재정의하는 단계는, 상기 액세스가능 애플리케이션 프로그래밍 인터페이스(API)를 위한 메타데이터가 런타임에 생성되지 않을 것임을 상기 런타임 가시성 계산 모듈에 나타내기 위해, 상기 액세스가능 애플리케이션 프로그래밍 인터페이스(API)를 참조하는 상기 애플리케이션 코드의 상기 부분에 추가 속성을 부착시키는 단계를 포함하는 것인, 액세스가능 애플리케이션 프로그래밍 인터페이스(API)로의 디폴트 가시성을 감소시키기 위한 방법.
  15. 제9항에 있어서,
    상기 런타임 동적 액세스 요청은 리플렉션을 활용하는 것인, 액세스가능 애플리케이션 프로그래밍 인터페이스(API)로의 디폴트 가시성을 감소시키기 위한 방법.
  16. 컴퓨터 시스템에서 애플리케이션 프로그래밍 인터페이스(application program interface; API)로의 특정한 가시성을 소비자에게 제공하는 방법에 있어서,
    상기 컴퓨터 시스템은 애플리케이션 프로그래밍 인터페이스(API)로의 동적 액세스를 동적으로 요청할 수 있는 런타임 환경을 포함하고, 상기 런타임 환경은, 애플리케이션 프로그래밍 인터페이스(API) 타입에 기초해 애플리케이션 프로그래밍 인터페이스(API)로의 디폴트 가시성을 동적 액세스 요청에 제공하며, 상기 방법은,
    상기 런타임 환경에서 실행가능 코드를 실행하는 단계 - 상기 실행가능 코드는 애플리케이션 코드로부터 유도됨 -;
    상기 실행가능 코드의 실행 동안:
    상기 실행가능 코드의 부분을 실행하기 위해 소비자로부터의 동적 호출(call)을 수신하는 단계 - 상기 실행가능 코드의 부분은 라이브러리 내의 애플리케이션 프로그래밍 인터페이스(API)를 참조하는 상기 애플리케이션 코드의 부분으로부터 유도됨 -;
    상기 애플리케이션 프로그래밍 인터페이스(API)의 타입에 기초해 상기 애플리케이션 프로그래밍 인터페이스(API)로의 런타임 디폴트 가시성에 액세스하는 단계 - 상기 런타임 디폴트 가시성은 어떤 다른 소프트웨어 컴포넌트가 런타임에 상기 애플리케이션 프로그래밍 인터페이스(API)에 액세스할 수 있는지를 정의함 -;
    상기 애플리케이션 프로그래밍 인터페이스(API)에 부착된 임의의 추가 속성에 액세스하는 단계 - 부착된 상기 추가 속성은, 상기 애플리케이션 프로그래밍 인터페이스(API)로의 런타임 디폴트 가시성을 재정의하기 위한 애플리케이션 프로그래밍 인터페이스(API)의 작성자의 소망을 나타냄 -;
    상기 애플리케이션 프로그래밍 인터페이스(API)를 참조하는 상기 애플리케이션 코드의 상기 부분에 부착된 임의의 추가 속성에 액세스하는 단계 - 상기 애플리케이션 코드의 상기 부분에 부착된 추가 속성은, 상기 애플리케이션 프로그래밍 인터페이스(API)로의 런타임 액세스를 상기 재정의된 디폴트 가시성이 재정의되지 않았다면(otherwise) 허용할 것보다 더 제한적인 가시성으로 설정하기 위한, 상기 애플리케이션 코드의 작성자의 소망을 나타냄 -;
    상기 애플리케이션 프로그래밍 인터페이스(API)로의 런타임 디폴트 가시성, 상기 애플리케이션 프로그래밍 인터페이스(API)에 부착된 임의의 추가 속성, 및 상기 애플리케이션 코드의 상기 부분에 부착된 임의의 추가 속성 중 하나 이상에 기초해, 상기 애플리케이션 프로그래밍 인터페이스(API)로의 계산된 가시성을 결정하는 단계; 및
    상기 애플리케이션 프로그래밍 인터페이스(API)로의 계산된 가시성을 상기 동적 호출에 제공하는 단계
    를 포함하는 것인, 애플리케이션 프로그래밍 인터페이스(API)로의 특정한 가시성을 소비자에게 제공하는 방법.
  17. 제16항에 있어서,
    상기 애플리케이션 프로그래밍 인터페이스(API)로의 계산된 가시성을 결정하는 단계는, API 타입, API에 부착된 속성, 및 API를 참조하는 코드에 부착된 속성에 기초해 API에 대한 계산된 가시성을 결정하는 단계를 포함하는 것인, 애플리케이션 프로그래밍 인터페이스(API)로의 특정한 가시성을 소비자에게 제공하는 방법.
  18. 제16항에 있어서,
    상기 애플리케이션 프로그래밍 인터페이스(API)로의 계산된 가시성을 결정하는 단계는, API 타입과 API에 부착된 속성에 기초해 API에 대한 계산된 가시성을 결정하는 단계를 포함하는 것인, 애플리케이션 프로그래밍 인터페이스(API)로의 특정한 가시성을 소비자에게 제공하는 방법.
  19. 제16항에 있어서,
    상기 애플리케이션 프로그래밍 인터페이스(API)로의 계산된 가시성을 결정하는 단계는, API 타입과 상기 애플리케이션 코드의 상기 부분에 부착된 속성에 기초해 API에 대한 계산된 가시성을 결정하는 단계를 포함하는 것인, 애플리케이션 프로그래밍 인터페이스(API)로의 특정한 가시성을 소비자에게 제공하는 방법.
  20. 제16항에 있어서,
    상기 애플리케이션 프로그래밍 인터페이스(API)로의 계산된 가시성을 결정하는 단계는, API 타입에만 기초해 API에 대한 계산된 가시성을 결정하는 단계를 포함하는 것인, 애플리케이션 프로그래밍 인터페이스(API)로의 특정한 가시성을 소비자에게 제공하는 방법.
KR1020157033296A 2013-04-22 2014-04-21 애플리케이션 프로그래밍 인터페이스들에 대한 런타임 액세스의 제어 KR102183185B1 (ko)

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 (2)

Publication Number Publication Date
KR20160003023A KR20160003023A (ko) 2016-01-08
KR102183185B1 true KR102183185B1 (ko) 2020-11-25

Family

ID=50771633

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020157033296A KR102183185B1 (ko) 2013-04-22 2014-04-21 애플리케이션 프로그래밍 인터페이스들에 대한 런타임 액세스의 제어

Country Status (11)

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

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版本控制方法、装置及存储介质

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110252145A1 (en) 2010-04-07 2011-10-13 Mike Lampell Application Programming Interface, System, and Method for Collaborative Online Applications

Family Cites Families (35)

* 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)
AU6440398A (en) * 1997-02-26 1998-09-18 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
CN1578939A (zh) * 2001-08-29 2005-02-09 格鲁斯番维拉塔公司 用于安全对象操作的密钥界面
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
US8302178B2 (en) * 2005-03-07 2012-10-30 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
US9027039B2 (en) 2007-01-29 2015-05-05 Intel Corporation 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
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

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110252145A1 (en) 2010-04-07 2011-10-13 Mike Lampell Application Programming Interface, System, and Method for Collaborative Online Applications

Also Published As

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

Similar Documents

Publication Publication Date Title
KR102183185B1 (ko) 애플리케이션 프로그래밍 인터페이스들에 대한 런타임 액세스의 제어
US9946525B2 (en) Extracting source code
US20180034924A1 (en) System and method for a unified interface to networked webservices
US10185590B2 (en) Mobile and remote runtime integration
EP3035191A1 (en) Identifying source code used to build executable files
US8938712B2 (en) Cross-platform virtual machine and method
US11442835B1 (en) Mobile and remote runtime integration
JP6385471B2 (ja) 移行および遠隔ランタイム統合
US9830307B1 (en) Ahead of time compilation of content pages
CN111782196A (zh) 基于mvp架构的开发方法及装置
CN115934123A (zh) 一种客户端逻辑更新方法、装置、电子设备及存储介质

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right
GRNT Written decision to grant