Padrão Proxy
Tags: javascript, webdev, programming, tutorial
Published: 2023-04-07 00:10:35



![Padrão Proxy](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1rnqmj2xcf1ghij4newm.jpg)

A origem do padrão de design proxy remonta aos anos 90, quando o livro "Design Patterns: Elements of Reusable Object-Oriented Software" foi publicado por Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides.

Pattern Proxy é um padrão de projeto de software para controlar o acesso a um objeto ou recurso. Ele funciona criando um objeto intermediário, chamado de proxy, que age como um substituto para o objeto real.

O padrão Proxy é útil em situações onde se deseja controlar o acesso a um objeto ou recurso de maneira mais granular, permitindo ou negando o acesso conforme necessário. Alguns casos em que o padrão Proxy pode ser útil incluem:

- Redução do uso de recursos: se um objeto é caro em termos de recursos, como memória ou processamento, o uso de um proxy pode ajudar a reduzir o número de vezes que o objeto é criado ou acessado, melhorando a eficiência do sistema.
- Controle de acesso: o proxy pode ser usado para controlar o acesso a objetos sensíveis ou críticos, permitindo apenas que usuários autorizados tenham acesso a eles. Isso ajuda a garantir a segurança do sistema.
- Gerenciamento de objetos remotos: o proxy remoto é usado para acessar objetos remotos em um sistema distribuído, permitindo que os clientes acessem objetos remotos como se estivessem acessando objetos locais.
- Criação sob demanda: o proxy virtual é usado para criar objetos sob demanda, evitando a criação desnecessária de objetos caros. Isso ajuda a melhorar a eficiência do sistema.
Em resumo, o padrão Proxy é útil sempre que há a necessidade de controlar o acesso a um objeto ou recurso de forma mais granular, garantindo a eficiência e a segurança do sistema.

Existem vários tipos de proxy, como o proxy remoto, o proxy virtual e o proxy de proteção. O proxy remoto é usado para acessar objetos remotos em um sistema distribuído, enquanto o proxy virtual é usado para criar objetos sob demanda, evitando a criação desnecessária de objetos caros. Já o proxy de proteção é usado para controlar o acesso a objetos sensíveis ou críticos.

O padrão proxy é um dos padrões de projeto mais populares e amplamente utilizados na programação de software. Ele ajuda a melhorar a eficiência e a segurança do sistema, garantindo um acesso controlado e seguro aos objetos e recursos importantes.

Segue abaixo o exemplo de implementação do padrão Proxy em Node.js com consumo de API REST.

```js
const axios = require('axios');

class CacheProxyApi {
  
  constructor() {
    this.url = 'https://api.example.com.br'
    this.cache = {};
  }

  async get(path) {
    if (this.cache[path]) {
      console.log(`Retrieved data from cache for path: ${path}`);
      return Promise.resolve(this.cache[path]);
    }

    console.log(`Fetching data from API for endpoint: ${path}`);
    const response = await axios.get(`${this.url}${path}`);
    this.cache[path] = response.data;
    return Promise.resolve(response.data);
  }
}

module.exports = CacheProxyApi;

```

Neste exemplo, a classe CacheProxyApi funciona como um proxy para a API externa, armazenando em cache os resultados das chamadas para evitar chamadas desnecessárias à API. O método get é responsável por realizar a chamada à API e retornar os dados. Se o resultado já estiver armazenado em cache, ele será retornado imediatamente.

Para usar o proxy, basta criar uma instância da classe CacheProxyApi e chamar o método get com o endpoint desejado:


```js
const CacheProxyApi = require('./CacheProxyApi');

const cacheProxyApi = new CacheProxyApi();

cacheProxyApi.get('users')
  .then(data => console.log(data))
  .catch(error => console.error(error));
```

Neste exemplo, o proxy é usado para buscar dados de usuários da API externa. Se os dados já estiverem armazenados em cache, o proxy os retorna imediatamente, sem realizar uma chamada à API. Se os dados não estiverem em cache, o proxy busca os dados da API e os armazena em cache para uso futuro.

Simples, né ?

O uso do padrão Proxy traz várias vantagens, algumas delas são:

- Controle de acesso: o padrão Proxy permite que o acesso a objetos ou recursos sensíveis seja controlado, permitindo apenas que usuários autorizados acessem esses objetos. Isso ajuda a garantir a segurança do sistema.
- Redução do uso de recursos: o Proxy pode ser usado para reduzir o uso de recursos, evitando a criação desnecessária de objetos caros e reduzindo o número de acessos a objetos remotos, por exemplo. Isso ajuda a melhorar a eficiência do sistema.
- Criação sob demanda: o Proxy virtual é usado para criar objetos sob demanda, evitando a criação desnecessária de objetos caros. Isso ajuda a melhorar a eficiência do sistema e reduzir o uso de recursos.
- Melhora a performance: o uso do Proxy pode ajudar a melhorar a performance do sistema, reduzindo a carga na rede e minimizando o tráfego de dados entre o cliente e o servidor.
- Simplificação do código: o padrão Proxy pode ajudar a simplificar o código, permitindo que os desenvolvedores se concentrem em lógica de negócios específica, em vez de se preocupar com detalhes de implementação de controle de acesso e gerenciamento de recursos.

## Conclusão

Em resumo, o padrão Proxy é uma técnica poderosa para melhorar a eficiência, segurança e performance de sistemas, permitindo um controle de acesso mais granular e um gerenciamento mais eficiente de recursos.