Post on 16-Apr-2017
CONECTA TU APP ANDROID CON SERVICIOS DE INTERNET
Toni Martínez
@toniousli
/in/tonimartinezcarballo
tonimc
FREELANCE DEVELOPER
tonimc@gmail.com
SÓLO UNA VISIÓN PERSONAL
SOFTWARE IS NOT ABOUT FRAMEWORKS
AGENDA▸ ¿Qué cosas son importantes en una app?
▸ Servicios de internet
▸ REST
▸ Librerías
▸ Tools
▸ Diseñar nuestra app teniendo en cuenta todo esto
▸ Proceso propio al desarrollar una app que se conecta a una API
▸ Show me the code!
▸ Referencias y links de interés
¿QUÉ ES IMPORTANTE EN UNA APP?
EXPERIENCIA DE USUARIO
APIDE NUESTRA PARTE SÓLO PODEMOS LIDIAR CON EL CLIENTE
MANEJO DE LA UI- BUEN MANEJO DEL THREAD DE UI - EVITAR FUGAS DE MEMORIA (MEMORY LEAKS) - EVITAR APP CRASHES
TEXTO
SERVICIOS DE INTERNET
+90% APPS USAN INTERNET¿ALGUIEN ENTIENDE UN
SMARTPHONE SIN INTERNET?
REST
▸ Definida en el año 2000 como tesis doctoral por Roy Fielding
▸ Interfaz entre sistemas que utilice directamente HTTP para obtener datos o indicar la ejecución de operaciones sobre los datos, en cualquier formato (XML, JSON, etc).
▸ No son necesarias abstracciones adicionales de los protocolos basados en patrones de intercambio de mensajes (SOAP)
Fuente: https://es.wikipedia.org/wiki/Representational_State_Transfer
REST
▸ Verbos HTTP
▸ GET : Read
▸ POST : Insert
▸ PUT : Update
▸ DELETE : Remove
▸ Hypermedia HATEOS
▸ Énfasis en el recurso y no en la operación
▸ No usar verbos:
▸ /getUsers ——> GET /users
▸ /addUser ——> POST /users
▸ Usar nombres en plural
▸ Ejemplo: GET /users/13
REST: CONSIDERACIONES A TENER EN CUENTA
▸ Velocidad
▸ Errores de red
▸ Offline first
▸ Sincronización
▸ Seguridad:
▸ HTTPS
▸ Token/oAuth…
LIBRERÍAS: CLIENTE HTTP
▸ Apache HttpClient (Eliminada ya en SDK 23 - Android 6.0)
▸ OkHttp
▸ Volley (Google)
▸ RetroFit: Librería específica para desarrollar clientes REST
RETROFIT
Fuente: https://futurestud.io/blog/retrofit-getting-started-and-android-client
Retrofit 1.9 a 2.0: https://futurestud.io/blog/retrofit-2-upgrade-guide-from-1-9
- Url dinámicas
- OkHttp integrado
- Interceptors: https://github.com/square/okhttp/wiki/Interceptors
- Request Execution
- Request Exception
- RX Java
RETROFIT: CREACIÓN CLIENTE DEL SERVICIO
Fuente: https://futurestud.io/blog/retrofit-getting-started-and-android-client
RETROFIT: OBTENIENDO DATOS
Fuente: https://futurestud.io/blog/retrofit-getting-started-and-android-client
RETROFIT: TOKEN AUTHENTICATION
Fuente: https://futurestud.io/blog/retrofit-getting-started-and-android-client
RETROFIT: LLAMADAS SÍNCRONAS Y ASÍNCRONAS
Fuente: https://futurestud.io/blog/retrofit-getting-started-and-android-client
RETROFIT: QUERY STRING
Fuente: https://futurestud.io/blog/retrofit-getting-started-and-android-client
RETROFIT: ENVÍO DE OBJETOS EN BODY
Fuente: https://futurestud.io/blog/retrofit-getting-started-and-android-client
RETROFIT: CUSTOM HEADERS
Fuente: https://futurestud.io/blog/retrofit-getting-started-and-android-client
RETROFIT: DEBUG
Fuente: https://futurestud.io/blog/retrofit-getting-started-and-android-client
TOOLS: POSTMAN
IMPLEMENTACIÓN RÁPIDA DE API RESTFUL PARA DEMO
HTTPS://USERS-GDGOURENSE.FIREBASEIO.COM/
Como funciona Firebase como API Rest: https://www.firebase.com/docs/rest/api/
DISEÑAR NUESTRA APP PENSANDO EN TODO ESTO
ACTIVITY
VIEW
PRESENTER
USE CASE
USE CASE
USE CASE
DOMAIN
REPOSITORIO
REPOSITORIO
DATASOURCE BBDD
DATASOURCE REST
DATASOURCE FILES
Clean Architecture
MAPPER
MAPPER
MAPPER
Hilo propioHilo UI
PATRÓN REPOSITORIO
Use a repository to separate the logic that retrieves the data and maps it to the entity
model from the business logic that acts on the model. The business logic should be agnostic
to the type of data that comprises the data source layer. For example, the data source layer
can be a database, a SharePoint list, or a Web service.
Fuente: https://msdn.microsoft.com/en-us/library/ff649690.aspx
TEXTO
PROCESO PROPIO DE APP QUE SE CONECTA A API
▸ Dos caminos
▸ Empezamos por la interfaz??
▸ Creación a partir de definición de servicio de datos dummy
▸ Empezamos por la conexión al servicio?
▸ Unit testing
TEXTO
UNIT TESTING: EMULANDO SERVICIO - MOCK WEBSERVER
TEXTO
UNIT TESTING
SHOW ME THE CODE !!!
https://github.com/tonimc/android-clean-api-client
http://es.slideshare.net/tonimc/api-rest-client-en-android
TEXTO
REFERENCIAS
▸ https://futurestud.io/blog/retrofit-getting-started-and-android-client
▸ https://github.com/PaNaVTEC/Clean-Contacts
▸ http://es.slideshare.net/jmpereirag/limpiando-espero-la-arquitectura-que-yo-quiero
▸ http://es.slideshare.net/flipper83/presistiendo-que-es-gerundio-my-storing-story
▸ http://es.slideshare.net/PedroVicenteGmezSnch/effective-android-ui-spanish
▸ http://fernandocejas.com/2014/09/03/architecting-android-the-clean-way/
GRACIAS!!