Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save jordisilvazup/833fa6af58fdf73b017b5c193824e936 to your computer and use it in GitHub Desktop.
Save jordisilvazup/833fa6af58fdf73b017b5c193824e936 to your computer and use it in GitHub Desktop.

Cache-Control em uma API REST Java usando OpenFeign

O cabeçalho Cache-Control é um campo do cabeçalho HTTP que permite controlar como o cache do navegador ou do servidor deve armazenar e usar uma resposta HTTP. Ele especifica diretivas que informam ao cache se a resposta pode ser armazenada, se pode ser compartilhada entre vários usuários ou se deve ser revalidada antes de ser reutilizada.

Algumas das diretivas do cabeçalho Cache-Control incluem:

  • public: permite que a resposta seja armazenada em cache pelo navegador ou servidor intermediário e compartilhada com outros usuários.
  • private: especifica que a resposta deve ser armazenada em cache somente pelo navegador do usuário e não por servidores intermediários.
  • no-cache: indica que a resposta não deve ser armazenada em cache sem ser revalidada.
  • max-age: especifica por quanto tempo a resposta pode ser armazenada em cache antes de ser considerada obsoleta.

O cabeçalho Cache-Control ajuda a melhorar o desempenho da web, reduzindo a quantidade de solicitações que o navegador faz ao servidor e diminuindo o tempo necessário para carregar as páginas da web. Ele também ajuda a garantir que os usuários recebam informações atualizadas e precisas.

Cache Controll e REST APIs

Ao trabalhar com uma API REST que utiliza o Cache-Control, é importante que o cliente HTTP seja capaz de lidar corretamente com as diretivas de cache definidas no cabeçalho HTTP. O Cache-Control é um mecanismo que permite aos servidores de origem especificar como as respostas devem ser armazenadas em cache pelos clientes. Com a diretiva "max-age", por exemplo, é possível definir por quanto tempo um recurso pode ser armazenado em cache.

Neste artigo, vamos explorar como lidar com o Cache-Control em uma REST API usando a biblioteca OpenFeign em Java. O OpenFeign é uma biblioteca de cliente HTTP para Java que simplifica a comunicação com uma API REST e oferece suporte ao Cache-Control.

Configurando o HttpClient com suporte a cache Antes de começarmos a utilizar o OpenFeign, é importante configurar o HttpClient com suporte a cache. Para isso, vamos utilizar a biblioteca Apache HttpClient, que oferece suporte ao cache de HTTP.

import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.cache.CacheConfig;
import org.apache.http.impl.client.cache.CachingHttpClientBuilder;

// Criar um HttpClient com suporte a cache
CacheConfig cacheConfig = new CacheConfig();
cacheConfig.setMaxCacheEntries(1000);
cacheConfig.setMaxObjectSizeBytes(8192);
HttpClientBuilder builder = CachingHttpClientBuilder.create();
builder.setCacheConfig(cacheConfig);
Client feignClient = new feign.httpclient.ApacheHttpClient(builder.build());

este exemplo, criamos um HttpClient com suporte a cache com um limite de 1000 entradas de cache e 8192 bytes para o tamanho máximo do objeto. Em seguida, criamos um objeto feignClient a partir do HttpClient configurado para ser utilizado pelo OpenFeign.

Criando uma interface para a API REST

Agora que temos o HttpClient configurado com suporte a cache, podemos criar uma interface que define os endpoints da API REST que desejamos utilizar. Para isso, utilizaremos a anotação @RequestLine para especificar o método HTTP e o endpoint, e a anotação @Headers para adicionar o cabeçalho Cache-Control com as diretivas de cache desejadas.

import feign.Headers;
import feign.RequestLine;

// Criar uma interface para definir os endpoints da API REST
interface MinhaAPI {
    @RequestLine("GET /api/recurso")
    @Headers("Cache-Control: max-age=3600")
    String obterRecurso();
}

Neste artigo, vamos explorar como lidar com o Cache-Control em uma REST API usando a biblioteca OpenFeign em Java. O OpenFeign é uma biblioteca de cliente HTTP para Java que simplifica a comunicação com uma API REST e oferece suporte ao Cache-Control.

Configurando o HttpClient com suporte a cache Antes de começarmos a utilizar o OpenFeign, é importante configurar o HttpClient com suporte a cache. Para isso, vamos utilizar a biblioteca Apache HttpClient, que oferece suporte ao cache de HTTP.

import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.cache.CacheConfig;
import org.apache.http.impl.client.cache.CachingHttpClientBuilder;

// Criar um HttpClient com suporte a cache
CacheConfig cacheConfig = new CacheConfig();
cacheConfig.setMaxCacheEntries(1000);
cacheConfig.setMaxObjectSizeBytes(8192);
HttpClientBuilder builder = CachingHttpClientBuilder.create();
builder.setCacheConfig(cacheConfig);
Client feignClient = new feign.httpclient.ApacheHttpClient(builder.build());

Neste exemplo, criamos um HttpClient com suporte a cache com um limite de 1000 entradas de cache e 8192 bytes para o tamanho máximo do objeto. Em seguida, criamos um objeto feignClient a partir do HttpClient configurado para ser utilizado pelo OpenFeign.

Criando uma interface para a API REST

Agora que temos o HttpClient configurado com suporte a cache, podemos criar uma interface que define os endpoints da API REST que desejamos utilizar. Para isso, utilizaremos a anotação @RequestLine para especificar o método HTTP e o endpoint, e a anotação @Headers para adicionar o cabeçalho Cache-Control com as diretivas de cache desejadas.

import feign.Headers;
import feign.RequestLine;

// Criar uma interface para definir os endpoints da API REST
interface MinhaAPI {
    @RequestLine("GET /api/recurso")
    @Headers("Cache-Control: max-age=3600")
    String obterRecursoHTTP();
}

Neste exemplo, criamos a interface MinhaAPI com um método obterRecursoHTTP() que utiliza o método HTTP GET e o endpoint /api/recurso. Também adicionamos o cabeçalho Cache-Control com a diretiva "max-age" de 1 hora.

Criando uma instância da interface usando o OpenFeign

Agora que temos a interface MinhaAPI definida, podemos criar uma instância da interface usando o OpenFeign. Para isso, utilizaremos a classe Feign e o método builder() para criar a instância, passando o HttpClient configurado, o Decoder e o Encoder para converter as respostas e solicitações em JSON, e as opções de configuração desejadas.

import feign.Client;
import feign.Feign;
import feign.codec.Decoder;
import feign.codec.Encoder;
import feign.gson.GsonDecoder;
import feign.gson.GsonEncoder;

// Criar um Decoder e Encoder para converter as respostas e solicitações em JSON
Decoder decoder = new GsonDecoder();
Encoder encoder = new GsonEncoder();

// Criar uma instância da interface usando o Feign
MinhaAPI api = Feign.builder()
        .client(feignClient)
        .encoder(encoder)
        .decoder(decoder)
        .options(new Request.Options(5000, TimeUnit.MILLISECONDS, 5000, TimeUnit.MILLISECONDS, true))
        .target(MinhaAPI.class, "https://exemplo.com");

Neste exemplo, criamos um objeto decoder e encoder para converter as respostas e solicitações em JSON. Em seguida, criamos uma instância da interface MinhaAPI utilizando o método builder() da classe Feign. Configuramos o HttpClient com suporte a cache, o Decoder e o Encoder para converter as respostas e solicitações em JSON e definimos as opções de configuração desejadas. Finalmente, criamos uma instância da interface MinhaAPI apontando para a URL base da API REST que desejamos consumir.

Fazendo uma chamada à API REST

Agora que temos a interface MinhaAPI e a instância criada, podemos fazer uma chamada à API REST utilizando o método obterRecurso() definido na interface.

// Fazer uma chamada à API para obter o recurso
String conteudo = api.obterRecursoHTTP();
System.out.println(conteudo);

Conclusão

Neste artigo, exploramos como lidar com o Cache-Control em uma REST API utilizando a biblioteca OpenFeign em Java. Vimos como configurar o HttpClient com suporte a cache, criar uma interface para a API REST, criar uma instância da interface utilizando o OpenFeign e fazer uma chamada à API REST. O OpenFeign simplifica muito o processo de comunicação com uma API REST e oferece suporte ao Cache-Control, tornando a implementação de um cliente HTTP muito mais fácil.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment