Cacheando peticiones con OkHttp (parte 1)

Jesús Serrano
Aug 27, 2017 · 2 min read

En muchas ocasiones va a ser necesario que nuestras aplicaciones accedan a servicios web. Ya sea para prevenir excesos en el consumo de datos, la lentitud o la sobrecarga en el servidor, vamos a tener que atender a la cache de las peticiones que realicemos.

Lo ideal en estos casos es que esto sea controlado por las cabeceras que envía el servidor web:

$ curl -I https://api.github.com/users/tyrbokHTTP/1.1 200 OK
Server: GitHub.com
Content-Type: application/json; charset=utf-8
Content-Length: 1206
Status: 200 OK
Cache-Control: public, max-age=60, s-maxage=60
Vary: Accept
...

Controlando respuestas con Cache-Control

Para estos casos OkHttp nos facilita el trabajo con una opción para habilitar una cache en disco:

En el ejemplo anterior vemos que podemos que podemos indicar, al cliente de OkHttp, donde vamos a almacenar los datos cacheados y cuál va a ser el tamaño máximo de dicha cache.

Controlando respuestas sin Cache-Control

No siempre nos vamos a encontrar con esta cabecera o simplemente queremos cachear la petición un tiempo diferente o bajo otra serie de condiciones a las que no da el servidor.

Para estos casos podemos crear "Interceptores" que nos ayuden a modificar el comportamiento de las peticiones.

En el siguiente ejemplo crearemos un interceptor que añade una cabecera Cache-Control de 120 segundos:

Gracias a los métodos .addInterceptor() y .addNetworkInterceptor(), podemos añadir todos los interceptores que necesitemos para manipular las peticiones o simplemente para nuestros logs.

Al tener disponibles tanto el Request como el Response, podemos modificar las cabeceras de cache que necesitemos en cada caso, por ejemplo para peticiones dentro del path /api/ que devuelvan la cabecera Content-Type:application/json.

Conclusión

OkHttp nos facilita los mecanismos para cachear nuestras peticiones en disco sin necesidad de introducir nuevas capas en nuestra aplicación. Cómo utilizarlos y combinarlos dependen de las necesidades y dependencias que tengamos, sin que la librería nos limite a casos de uso específicos.

)
Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade