BR112015026327B1 - Método para alterar visibilidade de tempo de execução de uma interface de programação de aplicativo, método para reduzir a visibilidade preestabelecida dentro de uma interface de programação de aplicativo acessível, e método para proporcionar a um consumidor visibilidade especificada dentro de uma interface de programação de aplicativo - Google Patents

Método para alterar visibilidade de tempo de execução de uma interface de programação de aplicativo, método para reduzir a visibilidade preestabelecida dentro de uma interface de programação de aplicativo acessível, e método para proporcionar a um consumidor visibilidade especificada dentro de uma interface de programação de aplicativo Download PDF

Info

Publication number
BR112015026327B1
BR112015026327B1 BR112015026327-5A BR112015026327A BR112015026327B1 BR 112015026327 B1 BR112015026327 B1 BR 112015026327B1 BR 112015026327 A BR112015026327 A BR 112015026327A BR 112015026327 B1 BR112015026327 B1 BR 112015026327B1
Authority
BR
Brazil
Prior art keywords
api
application programming
programming interface
visibility
application
Prior art date
Application number
BR112015026327-5A
Other languages
English (en)
Other versions
BR112015026327A2 (pt
BR112015026327A8 (pt
Inventor
Mircea Trofin
Patrick Dussud
Rudi Martin
John Lawrence Hamby
Michal Strehovsky
David Charles Wrighton
Atsushi Kanamori
Fadi M. Hanna
Original Assignee
Microsoft Technology Licensing, Llc
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 Technology Licensing, Llc filed Critical Microsoft Technology Licensing, Llc
Publication of BR112015026327A2 publication Critical patent/BR112015026327A2/pt
Publication of BR112015026327A8 publication Critical patent/BR112015026327A8/pt
Publication of BR112015026327B1 publication Critical patent/BR112015026327B1/pt

Links

Images

Classifications

    • 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
    • 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

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

MÉTODO PARA ALTERAR VISIBILIDADE DE TEMPO DE EXECUÇÃO DE UMA INTERFACE DE PROGRAMAÇÃO DE APLICATIVO (API), MÉTODO PARA REDUZIR A VISIBILIDADE PREESTABELECIDA DENTRO DE UMA INTERFACE DE PRO- GRAMAÇÃO DE APLICATIVO (API) ACESSÍVEL E MÉTODO PAR A PROPORCIONAR A UM CONSUMIDOR VISIBILIDADE ESPECIFICADA DENTRO DE UMA INTERFACE DE PROGRAMAÇÃO DE APLICATIVO (API) A invenção refere-se a métodos, sistemas e produtos de programa de computador para controlar acesso em tempo de execução às interfaces de programação de aplicativo. Concretizações da invenção permitem aos desenvolvedores de biblioteca mais precisamente e facilmente controlar quais de suas APIs de bibliotecas podem ser chamadas dinamicamente. Assim, sua carga de manutenção e de atualização de versão pode ser mais apropriadamente controlada. Adicionalmente, desenvolvedores de aplicativo podem controlar quais APIs adicionalmente excluir dos cenários de chamada dinâmica, para minimizar a sobrecarga de suporte em tempo de execução (por exemplo, impedir a geração de metadados).

Description

ANTECEDENTES Antecedentes e Técnica Relevante
[001] Os sistemas de computador e a tecnologia relacionada afetam vários aspectos da sociedade. Na verdade, a habilidade do sistema de computador em processar informação tem transformado o modo em que nós vivemos e trabalhamos. Atualmente, os sistemas de computador normalmente executam um grande número de tarefas (por exemplo, processamento de texto, programação de atividades, contabilidade, etc.) que anterior ao advento do sistema de computador eram executadas manualmente. Mais recentemente, os sistemas de computador têm sido acoplados uns com os outros e com outros dispositivos eletrônicos para formar tanto redes de computadores com uso de fios como sem uso de fios através das quais os sistemas de computador e outros dispositivos eletrônicos podem transferir dados eletrônicos. Por consequência, o desempenho de várias tarefas de computação é distribuído através de vários diferentes sistemas de computador e/ou de vários diferentes ambientes de computação.
[002] Durante o desenvolvimento de código, os desenvolvedores de software frequentemente utilizam Interfaces de Programação de Aplicativo (APIs) para facilitar comunicação entre os componentes de software. Uma API pode incluir uma especificação para as rotinas, estruturas de dados, classes de objeto, e variáveis associadas com a API. Assim, um desenvolvedor pode utilizar uma especificação de API para determinar como chamar uma API escrita por outro desenvolvedor.
[003] Frequentemente, um desenvolvedor de software (um desenvolvedor de biblioteca) desenvolve código possuindo várias APIs relacionadas que são agrupadas em uma biblioteca oferecendo funcionalidade especificada. O desenvolvedor de software pode pegar partes da funcionalidade disponível para outros programas por expor APIs correspondentes dentro da biblioteca como APIs públicas. Assim, outros desenvolvedores (um desenvolvedor de aplicativo) pode acessar as partes de funcionalidade disponíveis a partir de dentro de seu código através de chamadas para as APIs públicas. O desenvolvedor de software também pode manter outras partes da funcionalidade como privadas. A funcionalidade privada pode ser utilizada internamente entre APIs dentro da biblioteca ou para acessar outras APIs privadas em outras bibliotecas. APIs proporcionando a funcionalidade privada não são diretamente expostas para outros programas.
[004] Entretanto, vários ambientes em tempo de execução permitem código dinamicamente chamar qualquer API em uma biblioteca externa (por exemplo, utilizando reflexão para acessar metadados). Assim, o programa aplicativo ou biblioteca pode identificar e chamar APIs privadas dentro de outra biblioteca. Quando um desenvolvedor de software mantém uma API como privada, o desenvolvedor de software não espera que a API seja externamente chamada. Infelizmente, manutenção ou alterações de versão para os detalhes internos de implementação de tais bibliotecas, tais como, por exemplo, novos nomes ou remoções de métodos privados, possuem o potencial de causar alterações interruptivas em aplicativos utilizando estas bibliotecas.
[005] Em adição, o suporte em tempo de execução para chamadas dinâmicas suporta uma sobrecarga de tamanho e de conjunto operante (por exemplo, metadados). A sobrecarga de tamanho e de conjunto operante é mantida para APIs (privadas ou públicas), sejam ou não as APIs realmente chamadas dinamicamente. Manter a sobrecarga de tamanho e de conjunto operante para APIs não chamadas desnecessariamente consume recursos de computação.
BREVE SUMÁRIO
[006] A presente invenção se estende para métodos, sistemas e produtos de programa de computador para controlar acesso em tempo real a interfaces de programação de aplicativo. Concretizações da invenção incluem controlar acesso em tempo de execução a interfaces de programação de aplicativo (APIs). Um ambiente de tempo de execução proporciona solicitações dinâmicas de acesso (por exemplo, através de reflexão ou de outras técnicas de chamada dinâmica) com uma visibilidade preestabelecida dentro das APIs baseada no tipo da API. Por exemplo, a visibilidade preestabelecida dentro de APIs não públicas pode impedir acesso dinâmico.
[007] Um conjunto de APIs combinadas em uma biblioteca é acessado. O conjunto de APIs inclui uma ou mais APIs públicas e uma ou mais APIs não públicas. Uma API é identificada no meio do conjunto de APIs para o qual a visibilidade preestabelecida proporcionada para solicitações de acesso dinâmico é para ser alterada.
[008] A visibilidade preestabelecida dentro da API é alterada pela aplicação de um atributo para a API. O atribuo indica para o ambiente de tempo de execução que solicitações de acesso dinâmico são para ser proporcionadas com a visibilidade alterada dentro da API. Alterar a visibilidade pode incluir permitir acesso dinâmico a uma API não pública onde por condição preestabelecida o acesso dinâmico não é permitido.
[009] Outras concretizações incluem reduzir a visibilidade preestabelecida para uma API acessível. O código de aplicativo para um aplicativo é acessado. O código de aplicativo se refere a uma ou mais APIs acessíveis combinadas em uma biblioteca. Uma API acessível referida dentro do código de aplicativo é identificada. A API acessível é selecionada dentre as uma ou mais APIs acessíveis.
[0010] É determinado que a API acessível não é para ser dinamicamente acessada em tempo de execução. Um atributo é aplicado para a API acessível para reduzir a visibilidade preestabelecida dentro da API acessível. O atributo indica para um ambiente de tempo de execução no tempo de execução que solicitações de acesso dinâmico (por exemplo, através de reflexão ou de outras técnicas de chamada dinâmica) são para ser proporcionadas com visibilidade reduzida dentro da API acessível. Reduzir a visibilidade dentro de uma API pode de forma correspondente reduzir a geração de metadados. Em algumas concretizações, reduzir a visibilidade dentro de uma API inclui impedir acesso dinâmico à API.
[0011] Concretizações adicionais incluem proporcionar para um consumidor visibilidade especificada dentro de uma API. Código executável é executado em um ambiente de tempo de execução. O código executável é derivado a partir do código de aplicativo. Durante a execução do código executável, uma chamada dinâmica é recebida a partir de um consumidor para executar uma parte do código executável. A parte do código executável é derivada a partir de uma parte do código de aplicativo que se refere a uma API dentro de uma biblioteca. Uma visibilidade preestabelecida em tempo de execução dentro da API é acessada baseada no tipo da API.
[0012] Quaisquer atributos aplicados para a API são acessados. Os atributos aplicativos para a API podem ser indicativos de um desejo pelo auto da API de alterar a visibilidade preestabelecida em tempo de execução dentro da API. Quaisquer atributos aplicados para a parte do código de aplicativo são acessados. Os atributos aplicados para a parte do código de aplicativo podem ser indicativos de um desejo pelo autor de que o código de aplicativo proporcione menos visibilidade dentro da API do que indicado pela visibilidade preestabelecida em tempo de execução como alterada por quaisquer atributos aplicados para a API.
[0013] Uma visibilidade calculada dentro da API é determinada baseada em um ou mais dentre: a visibilidade preestabelecida em tempo de execução dentro da API, quaisquer atributos aplicados para a API, e quaisquer atributos aplicados para a parte do código de aplicativo que faz referência à API. A chamada dinâmica é proporcionada com a visibilidade calculada dentro da API.
[0014] Este Sumário é proporcionado para introduzir uma seleção de conceitos de uma forma simplificada, os quais são adicionalmente descritos abaixo na Descrição Detalhada. Este Sumário não é pretendido para identificar aspectos chave ou aspectos essenciais do assunto reivindicado, nem é pretendido para ser utilizado como um auxílio ao determinar o escopo do assunto reivindicado.
[0015] Aspectos e vantagens adicionais da invenção serão expostos na descrição a seguir, e em parte serão óbvios a partir da descrição, ou podem ser aprendidos pela prática da invenção. Os aspectos e vantagens da invenção podem ser imaginados e obtidos por meio dos instrumentos e combinações particularmente salientados nas concretizações anexas. Estes e outros aspectos da presente invenção irão se tornar mais totalmente aparentes a partir da descrição e das concretizações anexas seguintes, ou podem ser aprendidos pela prática da invenção como exposta daqui para frente.
BREVE DESCRIÇÃO DOS DESENHOS
[0016] De modo a descrever a maneira na qual as vantagens citadas acima e outras vantagens e aspectos podem ser obtidos, uma descrição mais particular da invenção resumidamente descrita acima será produzida por referência às concretizações específicas da mesma que são ilustradas nos desenhos anexos. Entendendo que estes desenhos representam somente concretizações típicas da invenção e, portanto, não são para ser considerados como sendo limitativos de seu escopo, a invenção será descrita e explicada com especificidade e detalhes adicionais através do uso dos desenhos acompanhantes, nos quais:
[0017] A Figura 1 ilustra uma arquitetura de computador ilustrativa que facilita controlar acesso em tempo de execução a uma interface de programação de aplicativo.
[0018] A Figura 2 ilustra um fluxograma de um método ilustrativo para controlar acesso em tempo de execução a uma interface de programação de aplicativo.
[0019] A Figura 3 ilustra uma arquitetura de computador ilustrativa que facilita reduzir a visibilidade preestabelecida dentro de uma interface de programação de aplicativo acessível.
[0020] A Figura 4 ilustra um fluxograma de um método ilustrativo para reduzir a visibilidade preestabelecida dentro de uma interface de programação de aplicativo acessível.
[0021] A Figura 5 ilustra uma arquitetura de computador ilustrativa que facilita proporcionar para um consumidor visibilidade especificada dentro de uma interface de programação de aplicativo.
[0022] A Figura 6 ilustra um fluxograma de um método ilustrativo para proporcionar para um consumidor visibilidade especificada dentro de uma interface de programação de aplicativo.
DESCRIÇÃO DETALHADA
[0023] A presente invenção se estende para métodos, sistemas e produtos de programa de computador para controlar acesso em tempo de execução a interfaces de programação de aplicativo. Concretizações da invenção incluem controlar acesso em tempo de execução a uma interface de programação de aplicativo (API). Um ambiente de tempo de execução proporcionar solicitações de acesso dinâmico (por exemplo, através da reflexão ou de outras técnicas de chamada dinâmica) com uma visibilidade preestabelecida dentro das APIs baseada no tipo da API. Por exemplo, a visibilidade preestabelecida dentro de APIs não públicas pode impedir acesso dinâmico.
[0024] Um conjunto de APIs combinadas em uma biblioteca é acessado. O conjunto de APIs inclui uma ou mais APIs públicas e uma ou mais APIs não públicas. Uma API identificada dentre o conjunto de APIs para a qual a visibilidade preestabelecida é proporcionada para solicitações de acesso dinâmico é para ser alterada.
[0025] A visibilidade preestabelecida dentro da API é alterada pela aplicação de um atributo para a API. O atributo indica para o ambiente de tempo de execução no tempo de execução que solicitações de acesso dinâmico são para ser proporcionadas com a visibilidade alterada dentro da API. Alterar a visibilidade pode incluir permitir acesso dinâmico a uma API não pública onde por condição preestabelecida o acesso dinâmico não é permitido.
[0026] Outras concretizações incluem reduzir a visibilidade preestabelecida dentro de uma API acessível. O código de aplicativo para um aplicativo é acessado. O código de aplicativo se refere a uma ou mais APIs acessíveis combinadas em uma biblioteca. Uma API acessível referida dentro do código de aplicativo é identificada. A API acessível é selecionada dentre as várias APIs acessíveis.
[0027] É determinado que a API acessível não é para ser dinamicamente acessada em tempo de execução. Um atributo é aplicado para a API acessível para reduzir a visibilidade preestabelecida dentro da API acessível. O atributo indica para um ambiente de tempo de execução em tempo de execução que solicitações de acesso dinâmico (por exemplo, através de reflexão ou de outras técnicas de chamada) são para ser proporcionadas com visibilidade reduzida dentro da API acessível. Reduzir a visibilidade dentro de uma API pode de forma correspondente reduzir a geração de metadados. Em algumas concretizações, reduzir a visibilidade dentro de uma API inclui impedir acesso dinâmico à API.
[0028] Concretizações adicionais incluem proporcionar para um consumidor visibilidade especificada dentro de uma API. Código executável é executado em um ambiente de tempo de execução. O código executável é derivado a partir do código de aplicativo. Durante a execução do código executável, uma chamada dinâmica é recebida a partir de um consumidor para executar uma parte do código executável. A parte do código executável é derivada a partir de uma parte do código de aplicativo que faz referência a uma API dentro de uma biblioteca. Uma visibilidade preestabelecida em tempo de execução dentro da API é acessada baseada no tipo da API.
[0029] Quaisquer atributos aplicados para a API são acessados. Os atributos aplicados para a API podem ser indicativos de um desejo pelo autor da API de alterar a visibilidade preestabelecida em tempo de execução dentro da API. Quaisquer atributos aplicados para a parte do código de aplicativo são acessados. Os atributos aplicados para a parte do código de aplicativo podem ser indicativos de um desejo pelo autor do código de aplicativo de proporcionar menos visibilidade dentro da API do que indicada pela visibilidade preestabelecida em tempo de execução como alterada por quaisquer atributos aplicativos para a API.
[0030] Uma visibilidade calculada dentro da API é determinada baseada em um ou mais dentre: a visibilidade preestabelecida em tempo de execução dentro da API, quaisquer atributos aplicados para a API, e quaisquer atributos aplicados para a parte do código de aplicativo que faz referência à API. A chamada dinâmica é proporcionada com visibilidade calculada dentro da API.
[0031] Concretizações da presente invenção podem compreender ou utilizar um computador de propósito especial ou de propósito geral incluindo hardware de computador, tal como, por exemplo, um ou ais processadores e memória do sistema, como discutido abaixo em maiores detalhes. Concretizações dentro do escopo da presente invenção também incluem meios físicos e outros meios legíveis por computador para transportar ou armazenar instruções e/ou estruturas de dados executáveis por computador. Tais meios legíveis por computador podem ser qualquer meio disponível que possa ser acessado por um sistema de computador de propósito geral ou de propósito especial. Meios legíveis por computador que armazenam instruções executáveis por computador são meios (dispositivos) de armazenamento do computador. Meios legíveis por computador que transportam instruções executáveis por comutador são meios de transmissão. Assim, a título de exemplo e não de limitação, concretizações da invenção podem compreender pelo menos dois tipos distintamente diferentes de meios legíveis por computador: meios (dispositivos) de armazenamento do computador e meios de transmissão.
[0032] Os meios (dispositivos) de armazenamento do computador incluem RAM, ROM, EEPROM, CD-ROM, unidades de estado sólido ("SSDs") (por exemplo, baseadas na RAM), memória Flash, memória com troca de fase ("PCM"), outros tipos de memória, outro armazenamento em disco ótico, armazenamento em disco magnético ou outros dispositivos de armazenamento magnético, ou qualquer outro meio que possa ser utilizado para armazenar meios de código de programa desejados na forma de instruções ou estruturas de dados executáveis por computador e que possa acessado por um computador de propósito geral ou de propósito especial.
[0033] Uma "rede" é definida como uma ou mais ligações de dados que permitem o transporte de dados eletrônicos entre sistemas e/ou módulos de computador e/ou outros dispositivos eletrônicos. Quando informação é transferida ou proporcionada através de uma rede ou de outra conexão de comunicações (seja fisicamente conectada, sem uso de fios, ou uma combinação de fisicamente conectada ou sem uso de fios) para um computador, o computador apropriadamente visualiza a conexão como um meio de transmissão. Meios de transmissão podem incluir uma rede e/ou ligações de dados que posem ser utilizadas para transportar meios desejados de código de programa na forma de instruções ou de estruturas de dados executáveis por computador e que podem ser acessadas por um computador de propósito geral ou de propósito especial. Combinações do dito acima também devem estar incluídas dentro do escopo de meios legíveis por computador.
[0034] Adicionalmente, ao alcançar vários componentes do sistema de computador, os meios de código de programa na forma de instruções ou de estruturas de dados executáveis por computador podem ser transferidos automaticamente do meio de transmissão para o meio (dispositivos) de armazenamento do computador (ou vice versa). Por exemplo, instruções ou estruturas de dados executáveis por computador recebidas através de uma rede ou ligação de dados podem ser colocadas em memória temporária na RAM dentro de um módulo de interface de rede (por exemplo, um "NIC"), e então, eventualmente transferidas para a RAM do sistema de computador e/ou para meios (dispositivos) de armazenamento do computador menos voláteis em um sistema de computador. Assim, deve ser entendido que os meios (dispositivos) de armazenamento do computador podem estar incluídos em componentes do sistema de computador que também (ou meios principalmente) utilizam meios de transmissão.
[0035] Instruções executáveis por computador compreendem, por exemplo, instruções e dados que quando executados em um processador causam que um computador de propósito geral, computador de propósito especial, ou dispositivo de processamento de propósito especial execute alguma função ou grupo de funções. As instruções executáveis por computador podem ser, por exemplo, binários, instruções em formato intermediário tal como linguagem assembly, ou mesmo código fonte. Apesar de o assunto ter sido descrito em linguagem específica para aspectos estruturais ou atos metodológicos, é para ser entendido que o assunto definido nas concretizações anexas não está necessariamente limitado aos aspectos ou atos descritos acima. Ao invés disso, os aspectos e atos descritos são revelados como formas ilustrativas para implementar as concretizações.
[0036] Os versados na técnica irão apreciar que a invenção pode ser praticada em ambientes de computação em rede com vários tipos de configurações de sistema de computador, incluindo computadores pessoais, computadores de mesa, computadores laptop, processadores de mensagem, dispositivos portáteis, sistemas multiprocessador, eletroeletrônicos baseados em microprocessador ou programáveis, PCs de rede, minicomputadores, computadores de grande porte, telefones celulares, PDAs, tablets, pagers, roteadores, comutadores, dentre outros. A invenção também pode ser praticadas em ambientes de sistema distribuído onde sistemas de computador, local e remoto, que são ligados (por ligações de dados fisicamente conectadas, ligações de dados sem uso de fios, ou por uma combinação de ligações de dados fisicamente conectada e sem uso de fios) através de uma rede, ambos executam tarefas. Em um ambiente de sistema distribuído, módulos de programa podem estar localizados tanto nos dispositivos de armazenamento em memória locais como remotos.
[0037] Concretizações da invenção também podem ser implementadas em ambientes de computação em nuvem. Nesta descrição e nas concretizações seguintes, "computação em nuvem" é definida como um modelo para permitir acesso à rede sob demanda a um grupo compartilhado de recursos de computação configuráveis. Por exemplo, a computação em nuvem pode ser empregada no mercado para oferecer acesso sob demanda ubíquo e conveniente ao grupo compartilhado de recursos de computação configuráveis. O grupo compartilhado de recursos de computação configuráveis pode ser rapidamente aprovisionado via virtualização e liberação com pouco esforço de gerenciamento ou interação com o provedor de serviço, e então por consequência dimensionado.
[0038] Um modelo de computação em nuvem pode ser composto de várias características tais como, por exemplo, autosserviço sob demanda, acesso amplo à rede, consulta de recursos, elasticidade rápida, serviço medido, e assim por diante. Um modelo de computação em nuvem também pode expor vários modelos de serviço, tal como, por exemplo, Software como um Serviço ("SaaS"), Plataforma como um Serviço ("PaaS"), e Infraestrutura como um Serviço ("IaaS"). Um modelo de computação em nuvem também pode ser implementado utilizando diferentes modelos de implementação tais como nuvem privada, nuvem da comunidade, nuvem pública, nuvem híbrida, dentre outros. Nesta descrição e nas concretizações, um "ambiente de computação em nuvem" é um ambiente no qual a computação em nuvem é empregada.
[0039] Concretizações da invenção permitem desenvolvedores de biblioteca mais precisamente e facilmente controlar quais de suas APIs das bibliotecas podem ser chamadas dinamicamente. Assim, seus problemas de manutenção e de atualização de versão podem ser mais apropriadamente controlados. Adicionalmente, desenvolvedores de aplicativo podem controlar quais APIs adicionalmente excluir dos cenários de chamada dinâmica, para minimizar a sobrecarga de suporte em tempo de execução.
[0040] A Figura 1 ilustra uma arquitetura de computador ilustrativa 100 que facilita controlar acesso a uma interface de programação de aplicativo (API). Referindo-se à Figura 1, a arquitetura de computador 100 inclui o ambiente de desenvolvimento 101 e o ambiente de tempo de execução 102. O ambiente de desenvolvimento 101 e o ambiente de tempo de execução 102 podem ser conectados um com o outro através (ou ser parte) de uma rede, tal como, por exemplo, um barramento do sistema, uma Rede de Área Local ("LAN"), uma Rede de Longa Distância ("WAN"), e mesmo a Internet. Por consequência, o ambiente de desenvolvimento 101 e o ambiente de tempo de execução 102, bem como outros sistemas de computador conectados e seus componentes, podem aumentar os dados relacionados com mensagem e trocar dados relacionados com mensagem (por exemplo, datagramas do Protocolo Internet ("IP") e outros protocolos de camada mais elevada que utilizam datagramas IP, tal como, Protocolo de Controle de Transmissão ("TCP"), Protocolo de Transferência de Hipertexto ("HTTP"), Protocolo Simples de Transferência de Correio ("SMTP"), etc., ou utilizando outros protocolos que não são de datagrama) através da rede.
[0041] O ambiente de desenvolvimento 101 pode ser um aplicativo de software que proporciona facilidades para desenvolvimento de software, incluindo, mas não limitado a: um editor de código fonte, automação de construção, um depurador, um sistema de controle de versão, um navegador de classe, um inspetor de objeto, um digrama de hierarquia de classes, etc. Em algumas concretizações, o ambiente de desenvolvimento 101 inclui ou está incluído em um Ambiente de Desenvolvimento Integrado (IDE). Um desenvolvedor de biblioteca pode utilizar o ambiente de desenvolvimento 101 para aplicar um atributo para uma API para alterar a visibilidade da API para as solicitações de acesso dinâmico.
[0042] O ambiente de tempo de execução 102 pode ser um aplicativo de software que proporciona facilidade para execução de software. O ambiente de tempo de execução 102 pode incluir um compilador (por exemplo, compilador no momento certo (JIT)) e/ou um interpretador para executar código desenvolvido no ambiente de desenvolvimento de software 101. Em algumas concretizações, o ambiente de tempo de execução 102 inclui ou está incluído em um Ambiente de Desenvolvimento Integrado (IDE). O ambiente de tempo de execução 102 pode incluir mecanismos (por exemplo, reflexão) para dinamicamente solicitar acesso a uma API.
[0043] O ambiente de desenvolvimento 101 e o ambiente de execução 102 podem ser integrados no mesmo ambiente ou podem ser residentes em ambientes separados.
[0044] O ambiente de tempo de execução 102 inclui o módulo de cálculo de visibilidade 109. O módulo de cálculo de visibilidade é configurado para calcular a visibilidade dentro de uma API baseado no tipo da API (por exemplo, interna, privada, pública, etc.) e nos atributos aplicados. As regras de visibilidade preestabelecida 108 podem definir uma visibilidade preestabelecida (por exemplo, permitir acesso dinâmico ou remover acesso dinâmico) para cada tipo de API. Os atributos aplicados podem ser utilizados para alterar ou sobrepor uma visibilidade preestabelecida. Assim, os atributos aplicados fornecem para um desenvolvedor de biblioteca controle mais preciso sobre como APIs individuais podem ser acessadas dinamicamente.
[0045] Em algumas concretizações, regras de visibilidade preestabelecida 108 definem que o acesso dinâmico é removido para APIs indicadas como privadas ou internas. Um desenvolvedor de biblioteca pode utilizar o ambiente de desenvolvimento 101 para aplicar um atributo para a API privada ou interna. O atributo aplicado pode indicar que acesso dinâmico é para ser permitido para a API interna ou privada. Ao receber uma chamada dinâmica para a API privada ou interna, o módulo de cálculo de visibilidade 109 pode determinar que o atributo aplicado sobrepõe a visibilidade preestabelecida (de acesso dinâmico removido) para a API privada ou interna. Assim, é permitido o acesso da chamada dinâmica à API privada ou interna.
[0046] A Figura 2 ilustra um fluxograma de um método ilustrativo 200 para controlar acesso a uma interface de programação de aplicativo (API). O método 200 será descrito com respeito aos componentes e dados da arquitetura de computador 100.
[0047] O método 200 inclui acessar um conjunto de interfaces de programação de aplicativo (APIs) combinadas em uma biblioteca, o conjunto de interfaces de programação de aplicativo (APIs) incluindo uma ou mais interfaces de programação de aplicativo (APIs) pública e uma ou mais interfaces de programação de aplicativo (APIs) não públicas (201). Por exemplo, o ambiente de desenvolvimento 101 pode acessar a biblioteca 103. A biblioteca 103 inclui uma ou mais APIs pública incluindo a API pública 104. A biblioteca 103 inclui uma ou mais APIs não públicas (por exemplo, privadas ou internas) incluindo a API não pública 106.
[0048] O método 200 inclui identificar uma interface de programação de aplicativo (API) a partir do conjunto de interfaces de programação de aplicativo (APIs) para a qual a visibilidade preestabelecida proporcionada para solicitações de acesso dinâmico é para ser alterada (202). Por exemplo, o ambiente de desenvolvimento 101 (possivelmente em resposta à entrada do autor) pode identificar que a visibilidade preestabelecida para solicitações de acesso dinâmico (por exemplo, utilizando reflexão ou outras técnicas de chamada dinâmica) dentro da API não pública 106 é para ser alterada.
[0049] O método 200 inclui alterar a visibilidade preestabelecida dentro da interface de programação de aplicativo (API) para uma visibilidade alterada pela aplicação de um atributo para a interface de programação de aplicativo (API), o atributo indicando para o ambiente de tempo de execução no tempo de execução que é para ser proporcionada a visibilidade alterada para as solicitações de acesso dinâmico dentro da interface de programação de aplicativo (API) (203). Por exemplo, o autor 113 pode entrar com a entrada de visibilidade 112 no ambiente de desenvolvimento 101. Em resposta à entrada de visibilidade 112, o ambiente de desenvolvimento 101 pode aplicar o atributo 107 para a API não pública 106. O atributo 107 pode indicar para o ambiente de tempo de execução 102 que a visibilidade preestabelecida para APIs não públicas definidas nas regras de visibilidade preestabelecida 108 é para ser alterada para a API não pública 106.
[0050] Subsequentemente, a biblioteca 103 pode ser compilada junto com outro código fonte para o código executável 111. Durante a execução do código executável 111, o módulo de cálculo de visibilidade 109 pode considerar tanto as regras de visibilidade preestabelecida 108 como o atributo 107 quando calculando a visibilidade dentro da API não pública 106. Em algumas concretizações, o atributo 107 indica que o acesso dinâmico para a API não pública 106 é permitido mesmo que, no entanto, as regras de visibilidade preestabelecida 108 indiquem que o acesso dinâmico às APIs não públicas é para ser impedido.
[0051] A Figura 3 ilustra uma arquitetura de computador ilustrativa 100 que facilita reduzir a visibilidade preestabelecida dentro de uma interface de programação de aplicativo (API) acessível. Referindo-se à Figura 3, a arquitetura de computador 300 inclui o ambiente de desenvolvimento 301 e o ambiente de tempo de execução 302. O ambiente de desenvolvimento 301 e o ambiente de tempo de execução 302 podem ser conectados um com o outro através (ou ser parte) de uma rede, tal como, por exemplo, um barramento do sistema, uma Rede de Área Local ("LAN"), uma Rede de Longa Distância ("WAN"), e mesmo a Internet. Por consequência, o ambiente de desenvolvimento 301 e o ambiente de tempo de execução 302 bem como quaisquer outros sistemas de computador conectados e seus componentes, podem criar dados relacionados com mensagem e trocar os dados relacionados com mensagem (por exemplo, datagramas do Protocolo Internet ("IP") e outros protocolos de camadas mais elevadas que utilizam datagramas IP, tais como Protocolo de Controle de Transmissão ("TCP"), Protocolo de Transferência de Hipertexto ("HTTP"), Protocolo Simples de Transferência de Correio ("SMTP"), etc., ou utilizando outros protocolos que não são de datagrama) através da rede.
[0052] O ambiente de desenvolvimento 301 pode ser um aplicativo de software que proporciona facilidades para desenvolvimento de software, incluindo, mas não limitadas a: um editor de código fonte, automação incorporada, um depurador, um sistema de controle de versão, um navegador de classes, um inspetor de objeto, um diagrama de hierarquia de classe, etc. Em algumas concretizações, o ambiente de desenvolvimento 301 inclui ou está incluído em um Ambiente de Desenvolvimento Integrado (IDE). Um desenvolvedor de aplicativo pode utilizar o ambiente de desenvolvimento 301 para aplicar um atributo para código fazendo referência a uma API acessível (por exemplo, incluída em uma biblioteca externa). Os atributos aplicados para o código fazendo referência a uma API acessível podem ser utilizados para reduzir a visibilidade preestabelecida dentro da API acessível.
[0053] O ambiente de tempo de execução 302 pode ser um aplicativo de software que proporciona facilidades para execução de software. O ambiente de tempo de execução pode incluir um compilador (por exemplo, um compilador de momento certo (JIT)) e/ou um interprete para executar código desenvolvido no ambiente de desenvolvimento de software 301. Em algumas concretizações, o ambiente de tempo de execução 302 inclui ou está incluído em um Ambiente de Desenvolvimento Integrado (IDE). O ambiente de tempo de execução 302 pode incluir mecanismos (por exemplo, reflexão) para dinamicamente solicitar acesso a uma API.
[0054] O ambiente de desenvolvimento 301 e o ambiente de tempo de execução 302 podem ser integrados dentro do mesmo ambiente ou podem ser residentes em ambientes separados.
[0055] O ambiente de tempo de execução 302 inclui o módulo de cálculo de visibilidade 309. O módulo de cálculo de visibilidade 309 é configurado para calcular a visibilidade dentro de uma API acessível (por exemplo, API pública ou API não pública atribuída para permitir acesso dinâmico) baseado nos atributos aplicados para código fazendo referência à API acessível. Regras de visibilidade preestabelecida 308 podem permitir acesso dinâmico às API acessíveis. Assim, os atributos aplicados fornecem para um desenvolvedor de aplicativo um mecanismo para excluir APIs de outro modo acessíveis (por exemplo, incluídas em uma biblioteca externa) do acesso dinâmico. Excluir uma API de outro modo acessível do acesso dinâmico minimiza a sobrecarga de suporte em tempo de execução (por exemplo, geração de metadados) e desse modo, conserva recursos.
[0056] A Figura 4 ilustra um fluxograma de um método ilustrativo 400 para reduzir visibilidade preestabelecida dentro de uma interface de programação de aplicativo (API) acessível. O método 400 será descrito com respeito aos componentes e dados da arquitetura de computador 300.
[0057] O método 400 inclui acessar código de aplicativo para um aplicativo, o código de aplicativo fazendo referência a uma ou mais interfaces de programação de aplicativo (APIs) acessíveis combinadas em uma biblioteca (401). Por exemplo, o ambiente de desenvolvimento 301 pode acessar o código de aplicativo 314. O ambiente de desenvolvimento 310 também pode acessar a biblioteca 30. O código de aplicativo 314 pode fazer referência a uma ou mais APIs, tais como, por exemplo, as APIs 304 e 306, incluídas na biblioteca 303.
[0058] O método 400 inclui identificar uma interface de programação de aplicativo (API) acessível referida dentro do código de aplicativo, a interface de programação de aplicativo (API) acessível selecionada de entre a uma ou mais interfaces de programação de aplicativo (APIs) (402) acessíveis. Por exemplo, o ambiente de desenvolvimento 301 pode identificar a API 306 referida pela referência da API 316.
[0059] O método 400 inclui determinar que a interface de programação de aplicativo (API) acessível não é para ser dinamicamente acessada em tempo de execução (403). Por exemplo, o ambiente de desenvolvimento 301 (possivelmente em resposta à entrada do autor) pode determinar que acesso dinâmico à API 306 é para ser impedido.
[0060] O método 400 inclui reduzir a visibilidade preestabelecida dentro da interface de programação de aplicativo (API) acessível para uma visibilidade reduzida pela aplicação de um atributo para a parte do código de aplicativo fazendo referência à interface de programação de aplicativo (API) acessível, o atributo indicando para o ambiente de tempo de execução que a visibilidade reduzida é para ser proporcionada para as solicitações de acesso dinâmico dentro da interface de programação de aplicativo (API) acessível (404). Por exemplo, o autor 313 pode informar a entrada de visibilidade 312 no ambiente de desenvolvimento 301. Em resposta à entrada de visibilidade 312, o ambiente de desenvolvimento 301 pode aplicar o atributo 317 para a referência de API 316 (uma referência à API 306). O atributo 317 pode indicar para o ambiente de tempo de execução 302 que a visibilidade preestabelecida para a API 306 é para ser reduzida.
[0061] Subsequentemente, o código de aplicativo 314 e a biblioteca 303 podem ser compilados juntos (possivelmente com outro código fonte) no código executável 311. Durante a execução do código executável 311, o módulo de cálculo de visibilidade 309 pode considerar tanto as regras de visibilidade preestabelecida 308 como o atributo 317 quando calculando a visibilidade dentro da API 306. Em algumas concretizações, o atributo 317 indica que o acesso dinâmico à API 306 é impedido mesmo que, no entanto, as regras de visibilidade preestabelecida 308 indiquem que o acesso dinâmico às APIs acessíveis é para ser permitido.
[0062] A visibilidade limitada dentro de uma API pode incluir não gerar metadados para a API. Por exemplo, como representado na arquitetura de computador 300, metadados não são gerados para a API 306. Por outro lado, os metadados 319 podem ser gerados para a API 304 (outra API acessível referenciada a partir do código de aplicativo 314).
[0063] A Figura 5 ilustra um ambiente de tempo de execução ilustrativo 500 que facilita proporcionar para um consumidor visibilidade especificada dentro de uma interface de programação de aplicativo (API). Referindo-se à Figura 5, o ambiente de tempo de execução 500 inclui o módulo de cálculo de visibilidade 501 e o consumidor 531. O módulo de cálculo de visibilidade 501 e o consumidor 531 podem ser conectados um com o outro através (ou ser parte) de uma rede, tal como, por exemplo, um barramento do sistema, uma Rede de Área Local ("LAN"), uma Rede de Longa Distância ("WAN"), e mesmo da Internet. Por consequência, o módulo de cálculo de visibilidade 501 e o consumidor 531, bem como quaisquer outros sistemas de computador conectados e seus componentes, podem criar dados relacionados com mensagem e trocar dados relacionados com mensagem (por exemplo, datagramas do Protocolo Internet ("IP") e outros protocolos de camada mais elevada que utilizam datagramas IP, tais como, o Protocolo de Controle de Transmissão ("TCP"), o Protocolo de Transferência de Hipertexto ("HTTP"), o Protocolo Simples de Transferência de Correio ("SMTP"), etc., ou utilizando outro protocolo(s) que não seja de datagrama através da rede.
[0064] O ambiente de tempo de execução 500 pode ser um aplicativo de software que proporcionar facilidades para execução de software. O ambiente de tempo de execução pode incluir um compilador (por exemplo, um compilador de momento certo (JIT)) e/ou um interpretador para executar código desenvolvido no ambiente de desenvolvimento de software 500. Em algumas concretizações, o ambiente de tempo de execução 500 inclui ou está incluído em um Ambiente de Desenvolvimento Integrado (IDE). O ambiente de tempo de execução 500 pode incluir mecanismos (por exemplo, reflexão) para dinamicamente solicitar acesso a uma API.
[0065] O ambiente de tempo de execução 500 inclui o módulo de cálculo de visibilidade 501. O módulo de cálculo de visibilidade 501 é configurado para calcular a visibilidade dentro de cada uma das várias APIs agrupadas juntas em uma biblioteca. A visibilidade pode ser calculada para uma API baseada em um tipo da API (por exemplo, interna, privada, pública), nos atributos aplicados (por exemplo, um autor da biblioteca) para a API, e nos atributos aplicados para o aplicativo que faz referência à API. Os atributos aplicados podem ser utilizados para alterar, sobrepor, reduzir, etc., uma visibilidade preestabelecida.
[0066] Em algumas concretizações, as regras de visibilidade preestabelecida 502 definem que acesso dinâmico é removido para APIs não públicas (por exemplo, privadas ou internas) e que o acesso dinâmico é permitido para APIs públicas. Entretanto, o autor de uma API não pública (por exemplo, um autor de biblioteca) pode aplicar um atributo para a API não pública para sobrepor a visibilidade preestabelecida e permitir acesso dinâmico à API não pública. Da mesma forma, o autor de uma API pública (por exemplo, um autor de biblioteca) pode aplicar um atributo para a API pública para sobrepor a visibilidade preestabelecida e negar acesso dinâmico à API pública. Outras regras de visibilidade preestabelecida também são possíveis.
[0067] Para quaisquer APIs dinamicamente acessíveis (sejam dinamicamente acessíveis por condição preestabelecida ou dinamicamente acessíveis por um atributo aplicado), um autor externo (por exemplo, um autor de aplicativo) pode aplicar um atributo para código fazendo referência à API dinamicamente acessível para remover acesso dinâmico da API. Assim, um autor de aplicativo pode minimizar a sobrecarga de suporte em tempo de execução (por exemplo, geração de metadados) e desse modo conservar recursos.
[0068] A Figura 6 ilustra um fluxograma de um método ilustrativo 600 para proporcionar para um consumidor visibilidade especificada dentro de uma interface de programação de aplicativo (API). O método 600 será descrito com respeito aos componentes e dados do ambiente de tempo de execução 500.
[0069] O método 600 inclui executar código executável no ambiente de tempo de execução, o código executável derivado a partir do código de aplicado (601). Por exemplo, o código executável pode ser executado no ambiente de tempo de execução 500. O código executável 503 pode ser derivado a partir do código de aplicativo que inclui referências às APIs contidas em uma biblioteca. Por exemplo, às referências à API 511, e 517 podem fazer referência às APIs contidas em uma biblioteca. As APIs contidas na biblioteca podem incluir as APIs 513 e 518.
[0070] O método 600 inclui durante a execução do código executável, o método 600 inclui receber uma chamada dinâmica a partir de um consumidor para executar uma parte do código executável, a parte do código executável derivada a partir de uma parte do código de aplicativo que faz referência a uma interface de programação de aplicativo (API) dentro de uma biblioteca (602). Por exemplo, a chamada dinâmica 521 pode ser recebida a partir do consumidor 531. A chamada dinâmica 521 pode ser uma chamada para executar uma parte do código executável 503.
[0071] Em uma concretização, a chamada dinâmica 531 é uma chamada para executar código executável que inclui a referência à API 511. A referência à API 511 pode fazer referência à API 513 ou à API 518. Em outra concretização, a chamada dinâmica 521 é uma chamada para executar código executável que inclui a referência à API 517. A referência à API 517 pode fazer referência à API 513 ou à API 518.
[0072] O método 600 inclui acessar uma visibilidade preestabelecida em tempo de execução dentro da interface de programação de aplicativo (API) baseada no tipo da interface de programação de aplicativo (API) (603). Como indicado pelo tipo 514, a API 513 é uma API não pública. Assim, quando uma referência à API faz referência à API 513, uma visibilidade preestabelecida em tempo de execução (por exemplo, impedindo acesso dinâmico) para APIs não públicas pode ser acessada a partir das regras de visibilidade preestabelecida 502 (para a API 513). Como indicado pelo tipo 519, a API 6518 é uma API pública. Assim, quando uma referência à API faz referência à API 518, uma visibilidade preestabelecida em tempo de execução (por exemplo, permitindo acesso dinâmico) para APIs públicas pode ser acessada a partir das regras de visibilidade preestabelecida 502 (para a API 518).
[0073] O método 600 inclui acessar quaisquer atributos aplicados para a interface de programação de aplicativo (API), atributos aplicados para a interface de programação de aplicativo (API) indicativos de um desejo pelo autor da interface de programação de aplicativo (API) de alterar a visibilidade preestabelecida em tempo de execução dentro da interface de programação de aplicativo (API) (604). Por exemplo, quando uma referência à API faz referência à API 513, o atributo 516 pode ser acessado. O atributo 516 pode indicar um desejo pelo autor da biblioteca de alterar a visibilidade preestabelecida em tempo de execução (como definida nas regras de visibilidade preestabelecida 502) dentro da API 513. Por exemplo, por condição preestabelecida, o acesso dinâmico às APIs não públicas pode ser impedido. Entretanto, o atributo 513 pode indicar que o acesso dinâmico à API 513 é para ser permitido.
[0074] O método 600 pode incluir acessar quaisquer atributos aplicados para a parte do código de aplicativo que faz referência à interface de programação de aplicativo (API), atributos aplicados para a parte do código de aplicativo indicativos de um desejo do autor do código de aplicativo em proporcionar visibilidade dentro da interface de programação de aplicativo (API) para uma extensão menor do que indicada pela visibilidade preestabelecida em tempo de execução como alterada por quaisquer atributos aplicados para a interface de programação de aplicativo (API) (605). Por exemplo, quando a chamada dinâmica 521 é uma chamada para executar código executável que inclui a referência à API 511, o atributo 512 pode ser acessado. O atributo 512 pode indicar um desejo por um autor do aplicativo de reduzir a visibilidade dentro de uma API de referência (por exemplo, API 513 ou API 518). Por exemplo, o atributo 512 pode indicar que o acesso dinâmico à API de referência (por exemplo, API 513 ou API 518) é para ser impedido. Assim, mesmo se o autor da biblioteca de outro modo permite acesso dinâmico a uma API, o desenvolvedor de aplicativo pode aplicar o atributo 512 para impedir acesso dinâmico à API.
[0075] O método 600 inclui determinar uma visibilidade calculada dentro da interface de programação de aplicativo (API) baseado em um ou mais dentre: a visibilidade preestabelecida em tempo de execução dentro da interface de programação de aplicativo (API), quaisquer atributos aplicados para uma interface de programação de aplicativo (API), e em quaisquer atributos aplicados para a parte do código de aplicativo que faz referência à interface de programação de aplicativo (API) (606). Assim, o módulo de cálculo de visibilidade 501 pode determinar uma visibilidade calculada 522 dentro de uma API baseado em uma visibilidade preestabelecida para o tipo de API (como definida nas regras de visibilidade preestabelecida 502), em quaisquer atributos aplicados para a API, e em quaisquer atributos aplicados para uma referência à API que faz referência à API.
[0076] O método 600 inclui proporcionar a chamada dinâmica com visibilidade dentro da interface de programação de aplicativo (API) de acordo com a visibilidade calculada (607). Por exemplo, o consumidor 531 pode receber a visibilidade 522 dentro de uma API dinamicamente chamada no código executável 503. Os resultados da chamada dinâmica 521 também podem ser retornados para o consumidor 531. Os resultados 524 podem indicar que o acesso dinâmico à API dinamicamente chamada não é permitido.
[0077] Dentro do código executável 503, várias diferentes combinações de código de referência e de APIs são possíveis. Em uma concretização, a chamada dinâmica 521 utiliza a referência à API 511 para chamar a API 513. Nesta concretização, a visibilidade 522 é determinada a partir de uma visibilidade preestabelecida para o tipo de API 514 (por exemplo, como definida nas regras de visibilidade preestabelecida 502), do atributo 512, e do atributo 516. Em outra concretização, a chamada dinâmica 521 utiliza a referência à API 511 para chamar a API 518. Nesta concretização, a visibilidade 522 é determinada a partir de uma visibilidade preestabelecida para o tipo de API (por exemplo, como definida nas regras de visibilidade preestabelecida 502) e no atributo 512.
[0078] Em uma concretização adicional, a chamada dinâmica 521 utiliza a referência à API 517 para chamar a API 513. Nesta concretização adicional, a visibilidade 522 é determinada a partir de uma visibilidade preestabelecida para o tipo de API 514 (por exemplo, como definida nas regras de visibilidade preestabelecida 502) e no atributo 516. Em uma concretização adicional, a chamada dinâmica 521 utiliza a referência à API 517 para chamar a API 518. Nesta concretização adicional, a visibilidade 522 é determinada a partir de uma visibilidade preestabelecida para o tipo de API 519 (por exemplo, como definida nas regras de visibilidade preestabelecida 502).
[0079] A presente invenção pode ser incorporada em outras formas específicas sem afastamento de seu espírito ou características essenciais. As concretizações descritas são para ser consideradas em todos os aspectos somente como ilustrativas e não restritivas. Portanto, o escopo da invenção é indicado pelas concretizações anexas ao invés do que pela descrição precedente. Todas as alterações que surjam dentro do significado e faixa de equivalência das concretizações são para ser abrangidas dentro de seu escopo.

Claims (20)

1. Método para alterar visibilidade de tempo de execução de uma interface de programação de aplicativo (API), em um sistema de computador, o sistema de computador incluindo um ambiente de desenvolvimento para desenvolver código executável que inclui interfaces de programação de aplicativo (APIs), o código executável para execução em um ambiente de tempo de execução que pode dinamicamente solicitar acesso às interfaces de programação de aplicativo (APIs), o ambiente de tempo de execução proporcionando solicitações de acesso dinâmico com uma visibilidade preestabelecida dentro das interfaces de programação de aplicativo (APIs) baseada no tipo da interface de programação de aplicativo (API), o método caracterizado pelo fato de que compreende as etapas de: acessar um conjunto de interfaces de programação de aplicativo (APIs) combinadas em uma biblioteca, o conjunto de interfaces de programação de aplicativo (APIs) incluindo uma ou mais interfaces de programação de aplicativo (APIs) públicas e uma ou mais interfaces de programação de aplicativo (APIs) não públicas; identificar uma interface de programação de aplicativo (API) a partir do conjunto de interfaces de programação de aplicativo (APIs) para a qual a visibilidade preestabelecida proporcionada para solicitações de acesso dinâmico é para ser alterada, uma visibilidade preestabelecida dentro da interface de programação de aplicativo (API) definida por um tipo de interface de programação de aplicativo (API) da interface de programação de aplicativo (API), a visibilidade preestabelecida definindo quais outros componentes de software podem acessar a interface de programação de aplicativo (API) em tempo de execução; e sobrepor a visibilidade preestabelecida dentro da interface de programação de aplicativo (API) ao atribuir um atributo adicional à interface de programação de aplicativo (API), o atributo adicional indicando para um módulo de cálculo de visibilidade de tempo de execução que solicitações de acesso dinâmico de tempo de execução para acessar a interface de programação de aplicativo (API) são para serem avaliadas utilizando o atributo adicional atribuído à interface de programação de aplicativo (API).
2. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que identificar uma interface de programação de aplicativo (API) compreende expor a interface de programação de aplicativo (API) para o autor da interface de programação de aplicativo (API).
3. Método, de acordo com a reivindicação 2, caracterizado pelo fato de que sobrepor a visibilidade preestabelecida dentro da interface de programação de aplicativo (API) compreende o autor da interface de programação de aplicativo (API) alterando a visibilidade preestabelecida da interface de programação de aplicativo.
4. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que identificar uma interface de programação de aplicativo (API) compreende identificar uma interface de programação de aplicativo (API) não pública, a visibilidade preestabelecida para a interface de programação de aplicativo (API) não pública impedindo solicitações de acesso dinâmico à interface de programação de aplicativo (API) não pública.
5. Método, de acordo com a reivindicação 4, caracterizado pelo fato de que sobrepor a visibilidade preestabelecida da interface de programação de aplicativo (API) compreende atribuir um atributo à interface de programação de aplicativo (API) não pública, o atributo sobrepondo a visibilidade preestabelecida dentro da interface de programação de aplicativo (API) não pública de modo a permitir solicitações de acesso dinâmico à interface de programação de aplicativo (API) não pública.
6. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que identificar uma interface de programação de aplicativo (API) compreende identificar uma interface de programação de aplicativo (API) pública, a visibilidade preestabelecida para a interface de programação de aplicativo (API) pública permitindo solicitações de acesso dinâmico à interface de programação de aplicativo (API) pública.
7. Método, de acordo com a reivindicação 6, caracterizado pelo fato de que sobrepor a visibilidade preestabelecida da interface de programação de aplicativo (API) compreende atribuir atributo à interface de programação de aplicativo (API) pública, o atributo sobrepondo a visibilidade preestabelecida para a interface de programação de aplicativo (API) pública de modo a impedir solicitações de acesso dinâmico à interface de programação de aplicativo (API) pública.
8. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que solicitações de acesso dinâmico utilizam reflexão.
9. Método para reduzir a visibilidade preestabelecida dentro de uma interface de programação de aplicativo (API) acessível, em um sistema de computador, o sistema de computador incluindo um ambiente de desenvolvimento para desenvolver código executável que inclui interfaces de programação de aplicativo (APIs), o código executável para execução em um ambiente de tempo de execução que pode dinamicamente solicitar acesso às interfaces de programação de aplicativo (APIs), o ambiente de tempo de execução possuindo visibilidade preestabelecida dentro das interfaces de programação de aplicativo (APIs), o método caracterizado pelo fato de que compreende as etapas de: acessar código de aplicativo para um aplicativo, o código de aplicativo fazendo referência a uma ou mais interfaces de programação de aplicativo (APIs) combinadas em uma biblioteca; identificar uma interface de programação de aplicativo (API) acessível referida dentro do código de aplicativo, a interface de programação de aplicativo (API) acessível selecionada a partir da uma ou mais interfaces de programação de aplicativo (APIs) acessíveis, uma visibilidade preestabelecida dentro da interface de programação de aplicativo (API) definida por um tipo de interface de programação de aplicativo (API) da interface de programação de aplicativo (API), a visibilidade preestabelecida definindo quais outros componentes de software podem acessar a interface de programação de aplicativo (API) em tempo de execução; determinar que a interface de programação de aplicativo (API) é acessível a uma pluralidade de componentes de software em tempo de execução com base no tipo de interface de programação de aplicativo (API); sobrepor a visibilidade preestabelecida dentro da interface de programação de aplicativo (API) acessível ao atribuir um atributo adicional à parte do código de aplicativo fazendo referência à interface de programação de aplicativo (API) acessível, o atributo adicional indicando para um módulo de cálculo de visibilidade de tempo de execução que solicitações de acesso dinâmico de tempo de execução são para serem evitadas por pelo menos um da pluralidade de componentes de software.
10. Método, de acordo com a reivindicação 9, caracterizado pelo fato de que identificar uma interface de programação de aplicativo (API) acessível referida dentro do código de aplicativo compreende identificar a interface de programação de aplicativo (API) acessível fazendo referência ao autor do código de aplicativo.
11. Método, de acordo com a reivindicação 10, caracterizado pelo fato de que atribuir um atributo adicional a uma parte do código de aplicativo compreende o autor do código de aplicativo atribuído o atributo adicional para a parte do código de aplicativo.
12. Método, de acordo com a reivindicação 9, caracterizado pelo fato de que atribuir um atributo adicional a uma parte do código de aplicativo compreende atribuir um atributo adicional a uma parte do código de aplicativo fazendo referência a uma API pública.
13. Método, de acordo com a reivindicação 9, caracterizado pelo fato de que atribuir um atributo adicional a uma parte do código de aplicativo compreende atribuir um atributo adicional a uma parte do código de aplicativo fazendo referência a uma API não pública, a API não pública possuindo um atributo adicional que indica que acesso dinâmico à API não pública é permitido.
14. Método, de acordo com a reivindicação 9, caracterizado pelo fato de que sobrepor a visibilidade preestabelecida dentro da interface de programação de aplicativo (API) compreende atribuir atributo à parte do código de aplicativo fazendo referência à interface de programação de aplicativo (API) para indicar ao módulo de cálculo de visibilidade que metadados para a interface de programação de aplicativo (API) não são para serem gerados em tempo de execução.
15. Método, de acordo com a reivindicação 9, caracterizado pelo fato de que solicitações de acesso dinâmico utilizam reflexão.
16. Método para proporcionar a um consumidor visibilidade especificada dentro de uma interface de programação de aplicativo (API), em um sistema de computador, o sistema de computador incluindo um ambiente de execução que pode solicitar acesso dinâmico às interfaces de programação de aplicativo (APIs), o ambiente de tempo de execução proporcionando solicitações de acesso dinâmico com uma visibilidade preestabelecida dentro das interfaces de programação de aplicativo (APIs) com base no tipo de interface de programação de aplicativo (API), o método caracterizado pelo fato de que compreende as etapas de: executar código executável no ambiente de tempo de execução, o código executável derivado a partir do código de aplicativo; durante a execução do código executável: receber uma chamada dinâmica a partir de um consumidor para executar uma parte do código executável, a parte do código executável derivada a partir de uma parte do código de aplicativo que faz referência a uma interface de programação de aplicativo (API) dentro de uma biblioteca; acessar uma visibilidade preestabelecida em tempo de execução dentro da interface de programação de aplicativo (API) com base no tipo da interface de programação de aplicativo (API), a visibilidade preestabelecida definindo quais outros componentes de software podem acessar a interface de programação de aplicativo (API) em tempo de execução; acessar quaisquer atributos adicionais atribuídos à interface de programação de aplicativo (API), os atributos adicionais atribuídos indicativos de um desejo do autor da interface de programação de aplicativo (API) para sobrepor a visibilidade preestabelecida em tempo de execução dentro da interface de programação de aplicativo (API); acessar quaisquer atributos adicionais atribuídos à parte do código de aplicativo que faz referência à interface de programação de aplicativo (API), os atributos adicionais atribuídos à parte do código de aplicativo indicativos de um desejo do autor do código de aplicativo para ajustar acesso em tempo de execução da interface de programação de aplicativo (API) para uma visibilidade mais restritiva do que a visibilidade preestabelecida sobreposta poderia permitir; determinar uma visibilidade calculada dentro da interface de programação de aplicativo (API) com base em um ou mais dentre: a visibilidade preestabelecida em tempo de execução dentro da interface de programação de aplicativo (API), quaisquer atributos adicionais atribuídos à interface de programação de aplicativo (API), e quaisquer atributos adicionais atribuídos à parte do código de aplicativo; e proporcionar a chamada dinâmica visibilidade calculada dentro da interface de programação de aplicativo (API).
17. Método, de acordo com a reivindicação 16, caracterizado pelo fato de que determinar uma visibilidade calculada dentro da interface de programação de aplicativo (API) compreende determinar uma visibilidade calculada para uma API com base em um tipo de API, em um atributo atribuído à API, e em um atributo atribuído a código que faz referência à API.
18. Método, de acordo com a reivindicação 16, caracterizado pelo fato de que determinar uma visibilidade calculada dentro da interface de programação de aplicativo (API) compreende determinar uma visibilidade calculada para uma API com base em um tipo de API e em um atributo atribuído à API.
19. Método, de acordo com a reivindicação 16, caracterizado pelo fato de que determinar uma visibilidade calculada dentro da interface de programação de aplicativo (API) compreende determinar uma visibilidade calculada para uma API com base em um tipo de API e em um atributo atribuído à parte de código.
20. Método, de acordo com a reivindicação 16, caracterizado pelo fato de que determinar uma visibilidade calculada dentro da interface de programação de aplicativo (API) compreende determinar uma visibilidade calculada para uma API com base unicamente em um tipo de API.
BR112015026327-5A 2013-04-22 2014-04-21 Método para alterar visibilidade de tempo de execução de uma interface de programação de aplicativo, método para reduzir a visibilidade preestabelecida dentro de uma interface de programação de aplicativo acessível, e método para proporcionar a um consumidor visibilidade especificada dentro de uma interface de programação de aplicativo BR112015026327B1 (pt)

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
BR112015026327A2 BR112015026327A2 (pt) 2017-07-25
BR112015026327A8 BR112015026327A8 (pt) 2019-12-24
BR112015026327B1 true BR112015026327B1 (pt) 2022-05-17

Family

ID=50771633

Family Applications (1)

Application Number Title Priority Date Filing Date
BR112015026327-5A BR112015026327B1 (pt) 2013-04-22 2014-04-21 Método para alterar visibilidade de tempo de execução de uma interface de programação de aplicativo, método para reduzir a visibilidade preestabelecida dentro de uma interface de programação de aplicativo acessível, e método para proporcionar a um consumidor visibilidade especificada dentro de uma interface de programação de aplicativo

Country Status (11)

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

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
JP6473442B2 (ja) 2019-02-20
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 (pt) 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
EP2989539A1 (en) 2016-03-02
AU2014257298A1 (en) 2015-10-15

Similar Documents

Publication Publication Date Title
BR112015026327B1 (pt) Método para alterar visibilidade de tempo de execução de uma interface de programação de aplicativo, método para reduzir a visibilidade preestabelecida dentro de uma interface de programação de aplicativo acessível, e método para proporcionar a um consumidor visibilidade especificada dentro de uma interface de programação de aplicativo
Reghenzani et al. The real-time linux kernel: A survey on preempt_rt
Gu et al. Building certified concurrent OS kernels
US20150058586A1 (en) Guarded Memory Access in a Multi-Thread Safe System Level Modeling Simulation
Stilkerich et al. Tailor‐made JVMs for statically configured embedded systems
Dennis et al. Two-stage agent program verification
Jeong et al. Dataflow model–based software synthesis framework for parallel and distributed embedded systems
US10819752B2 (en) Systems and methods for quantitative assessment of a computer defense technique
Olden Performance Analysis of SWE Implementations based on modern parallel Runtime Systems
US9477696B2 (en) Serializing resource utilization using hardware built-in functions
Khaitan et al. PARAGON: an approach for parallelization of power system contingency analysis using Go programming language
Kiss Build automation systems against CI lock-in-A comparative study of Dagger and Mage
Kahanwal Towards High Performance Computing (HPC) Through Parallel Programming Paradigms and Their Principles
Carvalho et al. Functionality farming in POK/rodosvisor
Dazzi Let's annotate to let our code run in parallel
Annemarija Samusa Time-Triggered Execution of 3-Phase Tasks on the RP2040—A Framework Avoiding Memory Contention by Design
Brown et al. Run-time extensibility: anything less is unsustainable
Decký Component-based General-purpose Operating System
McCurdy et al. Memphis on an XT5: Pinpointing Memory Performance Problems on Cray Platforms
Bychkov et al. Technologies of Heterogeneous Programming Systems Integration in the Informational Computing Environment of Mathematical Modeling and Data Analysis
Wehrmeister et al. Applying the SEEP method in the design of a real-time embedded control system for a motorized wheelchair
Falessi et al. Experiences, Strategies and Challenges in Adapting PVM to VxWorks TM Hard Real-Time Operating System, for Safety-Critical Software
Li Performance analysis and improvement of guestVM for running OSGi-based MacroComponents
Deuso et al. Applications for 68 Node Raspberry Pi 3 Education Cluster
Kostin et al. Development of Parallel Computing Framework to Enhance Radiation Transport Code Capabilities for Rare Isotope Beam Facility Design

Legal Events

Date Code Title Description
B06F Objections, documents and/or translations needed after an examination request according [chapter 6.6 patent gazette]
B06U Preliminary requirement: requests with searches performed by other patent offices: procedure suspended [chapter 6.21 patent gazette]
B350 Update of information on the portal [chapter 15.35 patent gazette]
B09A Decision: intention to grant [chapter 9.1 patent gazette]
B16A Patent or certificate of addition of invention granted [chapter 16.1 patent gazette]

Free format text: PRAZO DE VALIDADE: 20 (VINTE) ANOS CONTADOS A PARTIR DE 21/04/2014, OBSERVADAS AS CONDICOES LEGAIS