Este documento discute la importancia de conectar las aplicaciones a Internet de manera eficiente y las herramientas para hacerlo. Explica cómo gestionar la velocidad de la conexión, los errores de red, el funcionamiento sin conexión y la seguridad de las peticiones de red. También recomienda herramientas como OkHttp, Retrofit, Postman y Swagger para construir un cliente API robusto y facilitar el desarrollo y pruebas de APIs.
Cómo conectar nuestras apps a Internet de forma eficiente
1. El pegamento de las Apps
con Internet
José María Rodríguez Hurtado (@durbon)
Android Engineer
Herramientas para el desarrollo
móvil de apps
2. José Manuel Pereira García
ANDROID TEAM LEAD
www.jmpergar.com
@JMPergar
jm.pereira.g@gmail.com
+JoseMPereira
José María
Rodríguez Hurtado
ANDROID DEVELOPER
& APIs LOVER
@durbon
chema@durbon.com
++JoséMRodríguez
3. “Casi cualquier app necesita
una conexión de red
para funcionar”
(incluso la app que ahuyenta los mosquitos)
4. ¿Somos eficientes usando las
peticiones de red en nuestras Apps?
1. Velocidad
2. Errores de red
3. Offline
4. Sincronización
5. Seguridad
5. Velocidad de conexión
La red (puede ser) lenta
● Ajustes de conexión según si estamos en WiFi, 3G, 4G:
○ Calidad de las imágenes. Solicitar resoluciones, formatos al API
○ Descarga de datos pesados sólo en WiFi. Ajustes de
applicación
○ Usa datos en caché siempre que puedas. Cache-control, ETag
● Usa siempre GZIP, reduce hasta un 70%
6. Errores de conexión
Gestionar los errores 4xx y 500.
● Enviar errores a Crashlytics o Analytics para analizarlo. ¿fallos de
backend?
● Mensajes informativos, intenta recoger feedback del usuario ¿hay
algo incorrecto?
7. Errores de conexión
Definir Timeout.
● Gestionar los tiempos de espera: nunca más de 10 seg
● Feedback de loading o fallo. Evitar el loading infinito
8. Errores de conexión
Retries
● Reintentos manuales. Botón de reintento UI
● Respetar la transaccionalidad de las acciones.
Rollback de las acciones y comprobar estado
● Cola de reintentos en segundo plano. Diferenciar
acciones que no requieren más interacción de
usuario. Ejemplo: whatsapp
9. ¿Funcionamiento offline?
Offline First: http://offlinefirst.org/
Probar a usar la app en modo avión (sin conexión)
Caché de los datos más usados. Equilibrio entre lógica
de negocio en la app y directa del backend
Persistir todos los datos posibles de la App
Sincronización del uso offline. Colas de sincronización
10. Notificaciones Push
Utilizar SaaS que nos faciliten la vida
● Parse
● Amazon SNS
Tipos de notificaciones: bulk, topic, personalizadas
Sincronización en background usando push
12. Seguridad
Utilizar HTTPS para TODAS las llamadas
Uso de OAuth2
Signature en llamadas para no poder repetir llamadas
si alguien intenta crawlear nuestra API
14. “Las APIs son el pegamento
entre las apps e Internet”
15. Las frustraciones del desarrollador de apps móviles
● Falta de documentación
● Parseo de respuestas y gestión de
errores
● El API aún no está desarrollada (mocks)
● “Manual testing”
● Versionado y mantenimiento de APIs
● Seguridad de las peticiones
16. ¿Documentación estática o sandbox
interactivos?
● Definición de endpoints, parámetros,
response, errores, etc.. (actualizada,
por favor)
..pero también necesitamos...
● Entorno trasteable y testable
17. Swagger: agnostic framework for APIs
“The goal of Swagger™ is to define a standard,
language-agnostic interface to REST APIs which
allows both humans and computers to discover and
understand the capabilities of the service without
access to source code, documentation, or through
network traffic inspection”
swagger.io
23. API Workflow
Herramientas para almacenar colecciones de llamadas APIs
● Crear peticiones de forma simple y
reproducibles
● Documentar llamadas y exportarlas
● Trabajar con distintos entornos staging y pro
● Utilizar helper de autenticación
● Crear script de pruebas
● En definitiva, un Sandbox de pruebas
25. Mock server
● Evita el bloqueo mientras se está desarrollando
una API
● Adelantar trabajo y definir JSON al equipo de
Backend
● Pruebas en local sin necesidad de conexión de
red. Mock server integrado.
● Y los más importante… TESTING
33. Retrofit
http://square.github.io/retrofit
Convertir HTTP APIs en interface Java
public interface GitHubService {
@GET("/users/{user}/repos")
Call<List<Repo>> listRepos(@Path("user") String user);
}
public interface GitHubService {
@GET("/users/{user}/repos")
Call<List<Repo>> listRepos(@Path("user") String user);
}
34. Conclusiones
Cuidar la capa de red de las aplicaciones
Offline First. Diseñar la UI y el componente de caché
pensando en ello
Utiliza herramientas para debuggear la API
35. Referencias
Android Tech Talk: HTTP In A Hostile World - Jesse Wilson
https://www.youtube.com/watch?v=tfD2uYjzXFo
Offline First
http://offlinefirst.org/
OkHTTP Recipes
https://github.com/square/okhttp/wiki/Recipes
Retrofit
http://square.github.io/retrofit/