Api rest client en Android

34
CONECTA TU APP ANDROID CON SERVICIOS DE INTERNET

Transcript of Api rest client en Android

Page 1: Api rest client en Android

CONECTA TU APP ANDROID CON SERVICIOS DE INTERNET

Page 2: Api rest client en Android
Page 3: Api rest client en Android

Toni Martínez

@toniousli

/in/tonimartinezcarballo

tonimc

FREELANCE DEVELOPER

[email protected]

Page 4: Api rest client en Android

SÓLO UNA VISIÓN PERSONAL

Page 5: Api rest client en Android

SOFTWARE IS NOT ABOUT FRAMEWORKS

Page 6: Api rest client en Android

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

Page 7: Api rest client en Android

¿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

Page 8: Api rest client en Android

TEXTO

SERVICIOS DE INTERNET

+90% APPS USAN INTERNET¿ALGUIEN ENTIENDE UN

SMARTPHONE SIN INTERNET?

Page 9: Api rest client en Android

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

Page 10: Api rest client en Android

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

Page 11: Api rest client en Android

REST

Fuente: http://petstore.swagger.io/

Page 12: Api rest client en Android

REST: CONSIDERACIONES A TENER EN CUENTA

▸ Velocidad

▸ Errores de red

▸ Offline first

▸ Sincronización

▸ Seguridad:

▸ HTTPS

▸ Token/oAuth…

Page 13: Api rest client en Android

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

Page 14: Api rest client en Android

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

Page 15: Api rest client en Android

RETROFIT: CREACIÓN CLIENTE DEL SERVICIO

Fuente: https://futurestud.io/blog/retrofit-getting-started-and-android-client

Page 16: Api rest client en Android

RETROFIT: OBTENIENDO DATOS

Fuente: https://futurestud.io/blog/retrofit-getting-started-and-android-client

Page 17: Api rest client en Android

RETROFIT: TOKEN AUTHENTICATION

Fuente: https://futurestud.io/blog/retrofit-getting-started-and-android-client

Page 18: Api rest client en Android

RETROFIT: LLAMADAS SÍNCRONAS Y ASÍNCRONAS

Fuente: https://futurestud.io/blog/retrofit-getting-started-and-android-client

Page 19: Api rest client en Android

RETROFIT: QUERY STRING

Fuente: https://futurestud.io/blog/retrofit-getting-started-and-android-client

Page 20: Api rest client en Android

RETROFIT: ENVÍO DE OBJETOS EN BODY

Fuente: https://futurestud.io/blog/retrofit-getting-started-and-android-client

Page 21: Api rest client en Android

RETROFIT: CUSTOM HEADERS

Fuente: https://futurestud.io/blog/retrofit-getting-started-and-android-client

Page 22: Api rest client en Android

RETROFIT: DEBUG

Fuente: https://futurestud.io/blog/retrofit-getting-started-and-android-client

Page 23: Api rest client en Android

TOOLS: POSTMAN

Page 24: Api rest client en Android

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/

Page 25: Api rest client en Android

DISEÑAR NUESTRA APP PENSANDO EN TODO ESTO

Page 26: Api rest client en Android

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

Page 27: Api rest client en Android

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

Page 28: Api rest client en Android

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

Page 29: Api rest client en Android

TEXTO

UNIT TESTING: EMULANDO SERVICIO - MOCK WEBSERVER

Page 30: Api rest client en Android

TEXTO

UNIT TESTING

Page 31: Api rest client en Android

SHOW ME THE CODE !!!

https://github.com/tonimc/android-clean-api-client

http://es.slideshare.net/tonimc/api-rest-client-en-android

Page 32: 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/

Page 33: Api rest client en Android
Page 34: Api rest client en Android

GRACIAS!!