Diseñando API's de Micro-Servicios Para Mobile. · ejemplo. Servicios (Legados y Nuevos) ......

37
Diseñando API's de Micro-Servicios Para Mobile. Jorge Vargas CTO weex SUN/Oracle Java Champion @edivargas Capítulo 1 Temporada 2 Track: Java, Apps Móviles y su nube

Transcript of Diseñando API's de Micro-Servicios Para Mobile. · ejemplo. Servicios (Legados y Nuevos) ......

Page 1: Diseñando API's de Micro-Servicios Para Mobile. · ejemplo. Servicios (Legados y Nuevos) ... Simple, Cualquiera Puede ... JAXB. Formato Mensaje - JSON { "Cotizacion":{

D i s e ñ a n d o A P I ' s d e M i c ro - S e r v i c i o s P a r a

M o b i l e .

Jorge Vargas CTO weex

SUN/Oracle Java Champion @edivargas

Capítulo 1 Temporada 2 Track: Java, Apps Móviles y su nube

Page 2: Diseñando API's de Micro-Servicios Para Mobile. · ejemplo. Servicios (Legados y Nuevos) ... Simple, Cualquiera Puede ... JAXB. Formato Mensaje - JSON { "Cotizacion":{

@edivargas Jorge Vargas Garcia / Java Champion

Jorge Vargas GarcíaSUN/Oracle Java Champion @Edivargas @JavaUP

✓ CTO en weex (Operador Virtual Móvil en México) ✓ Arquitecto para proyecto Calmecac ✓ Instructor Java en CertificaTIC ✓ Consultor Freelancer en Java y tecnologías asociadas

desde 2000. ✓ Miembro activo en las comunidades de Java en México y

Latinoamérica. ✓ Promueve y usa el software libre, tanto en sus

actividades de desarrollo y consultoría como las implementa con sus clientes.

✓ Cree en la agilidad y su importancia en el desarrollo de software. 

✓ Orgulloso graduado del IPN.

Page 3: Diseñando API's de Micro-Servicios Para Mobile. · ejemplo. Servicios (Legados y Nuevos) ... Simple, Cualquiera Puede ... JAXB. Formato Mensaje - JSON { "Cotizacion":{

@edivargas Jorge Vargas Garcia / Java Champion

Jorge Vargas GarcíaSUN/Oracle Java Champion @Edivargas @JavaUP

NOTICE - DISCLAIMER Esta presentación (se los aseguro) no contendrá alguna mala palabra o su intención a algo parecido.

Todo es producto de la casualidad y que el ponente trae su propio Español :D

Page 4: Diseñando API's de Micro-Servicios Para Mobile. · ejemplo. Servicios (Legados y Nuevos) ... Simple, Cualquiera Puede ... JAXB. Formato Mensaje - JSON { "Cotizacion":{

A p l i c a c i o n e s M ó v i l e s

• Extensión de app’s desktop. • Marketing Digital. • Segmentación -

Geolocalización. • Terminal tonta vs terminal

inteligente. • Un mundo de servicios.

Page 5: Diseñando API's de Micro-Servicios Para Mobile. · ejemplo. Servicios (Legados y Nuevos) ... Simple, Cualquiera Puede ... JAXB. Formato Mensaje - JSON { "Cotizacion":{

E l F ro n t - E n d y e l B a c k - E n d

Llamados a servicios

Page 6: Diseñando API's de Micro-Servicios Para Mobile. · ejemplo. Servicios (Legados y Nuevos) ... Simple, Cualquiera Puede ... JAXB. Formato Mensaje - JSON { "Cotizacion":{

O p c i o n e s d e D e s a r ro l l o - F ro n t

• Nativas (Objective-C, Swift,

Java, Kotlin).

• Framework cross-platform (PhoneGap,

Xamarin, Ionic, Titanium,

SenchaTouch, etc).

• HTML 5 responsive (Bootstrap, Kendo, etc).

Page 7: Diseñando API's de Micro-Servicios Para Mobile. · ejemplo. Servicios (Legados y Nuevos) ... Simple, Cualquiera Puede ... JAXB. Formato Mensaje - JSON { "Cotizacion":{

O p c i o n e s d e D e s a r ro l l o - B a c k

• Java.

• Java.

• Existen otras???. Claro pero recuerden que …

Page 8: Diseñando API's de Micro-Servicios Para Mobile. · ejemplo. Servicios (Legados y Nuevos) ... Simple, Cualquiera Puede ... JAXB. Formato Mensaje - JSON { "Cotizacion":{

L a N u b e … ! Q u é C o n f u s i ó n ! ! !

PaaS

SaaS

IaaS

Page 9: Diseñando API's de Micro-Servicios Para Mobile. · ejemplo. Servicios (Legados y Nuevos) ... Simple, Cualquiera Puede ... JAXB. Formato Mensaje - JSON { "Cotizacion":{

S e r v i c i o s v s . M i c ro s e r v i c i o s

• Ligado a conceptos Legacy.

• No son mecanismos monolíticos.

• Siempre han existido, pero no se identifican fácilmente.

• Puede escalarse y monitorizarse, menos administración.

• Principio de responsabilidad única.

• Multi-tecnologia (Legacy).

• Ámbito de control en desarrollo.

• Escalado horizontal más fácil.

• NÓ, no facilita el deployment.

Page 10: Diseñando API's de Micro-Servicios Para Mobile. · ejemplo. Servicios (Legados y Nuevos) ... Simple, Cualquiera Puede ... JAXB. Formato Mensaje - JSON { "Cotizacion":{

R e t o s d e l o s M i c ro s e r v i c i o s

• Localización (HA).

• Tolerancia a fallos (Resilencia).

• Gestión de la configuración (HA).

• Gestión de Logs (Monitoreo).

• Gestión de Despliegue (Monitoreo).

• Seguridad (HA).

Page 11: Diseñando API's de Micro-Servicios Para Mobile. · ejemplo. Servicios (Legados y Nuevos) ... Simple, Cualquiera Puede ... JAXB. Formato Mensaje - JSON { "Cotizacion":{

A l g o I m p o r t a n t í s i m o ! ! !

• Tú, si Tú !!!

• NO ERES NETFLIX

Page 12: Diseñando API's de Micro-Servicios Para Mobile. · ejemplo. Servicios (Legados y Nuevos) ... Simple, Cualquiera Puede ... JAXB. Formato Mensaje - JSON { "Cotizacion":{

A P I - D e f i n i c i ó n

• La interfaz de programación de aplicaciones, abreviada como API del inglés: Application Programming Interface. Es un conjunto de subrutinas, funciones y procedimientos (o métodos, en la programación orientada a objetos) que ofrece cierta biblioteca para ser utilizado por otro software como una capa de abstracción.

• Es el contrato a cumplir por ambas partes: Servidor vs Cliente de consumo.

Page 13: Diseñando API's de Micro-Servicios Para Mobile. · ejemplo. Servicios (Legados y Nuevos) ... Simple, Cualquiera Puede ... JAXB. Formato Mensaje - JSON { "Cotizacion":{

¿ P o rq u é D e b e s D i s e ñ a r u n a C o r re c t a A P I ?

• Asegura la correcta utilización de la implementación. Seguro y Confiable.

• Minimiza el tiempo de desarrollo de una aplicación.

• Minimiza la cantidad de código a desarrollar. Y como cada línea de código es un bug potencial …

• A veces el término contrato no es claro. Pensemos un ejemplo.

Page 14: Diseñando API's de Micro-Servicios Para Mobile. · ejemplo. Servicios (Legados y Nuevos) ... Simple, Cualquiera Puede ... JAXB. Formato Mensaje - JSON { "Cotizacion":{

S e r v i c i o s ( L e g a d o s y N u e v o s )

Page 15: Diseñando API's de Micro-Servicios Para Mobile. · ejemplo. Servicios (Legados y Nuevos) ... Simple, Cualquiera Puede ... JAXB. Formato Mensaje - JSON { "Cotizacion":{

D e f i n i r E n d - P o i n t s .

Page 16: Diseñando API's de Micro-Servicios Para Mobile. · ejemplo. Servicios (Legados y Nuevos) ... Simple, Cualquiera Puede ... JAXB. Formato Mensaje - JSON { "Cotizacion":{

H e r r a m i e n t a s .

Page 17: Diseñando API's de Micro-Servicios Para Mobile. · ejemplo. Servicios (Legados y Nuevos) ... Simple, Cualquiera Puede ... JAXB. Formato Mensaje - JSON { "Cotizacion":{

S i m p l e , C u a l q u i e r a P u e d e …

Page 18: Diseñando API's de Micro-Servicios Para Mobile. · ejemplo. Servicios (Legados y Nuevos) ... Simple, Cualquiera Puede ... JAXB. Formato Mensaje - JSON { "Cotizacion":{

S o y M u y I n t e l i g e n t e

Page 19: Diseñando API's de Micro-Servicios Para Mobile. · ejemplo. Servicios (Legados y Nuevos) ... Simple, Cualquiera Puede ... JAXB. Formato Mensaje - JSON { "Cotizacion":{

L a S o l u c i ó n P e r f e c t a — > U n C o n t r a t o C o r re c t o

Page 20: Diseñando API's de Micro-Servicios Para Mobile. · ejemplo. Servicios (Legados y Nuevos) ... Simple, Cualquiera Puede ... JAXB. Formato Mensaje - JSON { "Cotizacion":{

A l F i n a l E s u n To d o

Page 21: Diseñando API's de Micro-Servicios Para Mobile. · ejemplo. Servicios (Legados y Nuevos) ... Simple, Cualquiera Puede ... JAXB. Formato Mensaje - JSON { "Cotizacion":{

D e f i n i r M e n s a j e

• Forma de Envío:

• Soap (JAX-WS)

• REST (JAX-RS) - Modelo de Maduración de Richardson.

• Formato del mensaje.

• XML.

• JSON.

• PlainText.

Page 22: Diseñando API's de Micro-Servicios Para Mobile. · ejemplo. Servicios (Legados y Nuevos) ... Simple, Cualquiera Puede ... JAXB. Formato Mensaje - JSON { "Cotizacion":{

F o r m a t o M e n s a j e - X M L

<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope

xmlns:xsd=“http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" <SOAP-ENV:Body>

<ns1:cotizacion xmlns:ns1="Petroleo"> <op1 xsi:type="xsd:string">Brent</op1>

<op2 xsi:type="xsd:integer">400</op2> </ns1:cotizacion> </SOAP-ENV:Body> </SOAP-ENV:Envelope>

JAXB

Page 23: Diseñando API's de Micro-Servicios Para Mobile. · ejemplo. Servicios (Legados y Nuevos) ... Simple, Cualquiera Puede ... JAXB. Formato Mensaje - JSON { "Cotizacion":{

F o r m a t o M e n s a j e - J S O N

{    "Cotizacion":{       "op1":"Brent",       "op2":"400"    } }

JAXP - GSON

Page 24: Diseñando API's de Micro-Servicios Para Mobile. · ejemplo. Servicios (Legados y Nuevos) ... Simple, Cualquiera Puede ... JAXB. Formato Mensaje - JSON { "Cotizacion":{

F o r m a t o M e n s a j e - P l a i n Te x t

• Cotizacion|Brent|400

• Simplemente split

VI

Page 25: Diseñando API's de Micro-Servicios Para Mobile. · ejemplo. Servicios (Legados y Nuevos) ... Simple, Cualquiera Puede ... JAXB. Formato Mensaje - JSON { "Cotizacion":{

H t t p C o d e s ?

• ¿Se recomiendan basarse en los códigos de respuesta?

• 200 OK - 201 Created - 202 Accepted - 301 Moved Permanently- 302 Found - 303 See Other - 400 Bad Request - 401 Unauthorized - 403 Forbidden - 404 Not Found -500 Internal Server Error.

• ¿O usar códigos de error internos?

• {“code”:0,”httpCode”:200,”message”:”OK”,”jsonResponse":""}

Page 26: Diseñando API's de Micro-Servicios Para Mobile. · ejemplo. Servicios (Legados y Nuevos) ... Simple, Cualquiera Puede ... JAXB. Formato Mensaje - JSON { "Cotizacion":{

H t t p M e t h o d s ?

• ¿Se recomiendan basarse en los métodos de http? SI

• GET - Trae datos de un recurso específico.

• POST - Envía datos para que sea procesado por un recurso.

• PUT - Carga una representación de una URI.

• DELETE - Elimina un recurso específico.

• OPTIONS - Regresa los métodos que soporta un server HTTP.

Page 27: Diseñando API's de Micro-Servicios Para Mobile. · ejemplo. Servicios (Legados y Nuevos) ... Simple, Cualquiera Puede ... JAXB. Formato Mensaje - JSON { "Cotizacion":{

¿ U s a r Ve r b o s y Ve r s i ó n e n e l U R L ?

• ¿Se recomiendan agregar verbos en el URL? SI, no es indispensable, y debe analizarse el caso.

• https://miservidor:8080/app/producto/add

• ¿Se recomiendan agregar versión en el URL? SI, no es indispensable, y debe analizarse el caso.

• https://miservidor:8080/app/producto/v1/add

Page 28: Diseñando API's de Micro-Servicios Para Mobile. · ejemplo. Servicios (Legados y Nuevos) ... Simple, Cualquiera Puede ... JAXB. Formato Mensaje - JSON { "Cotizacion":{

C u i d a e l Ta m a ñ o d e l M e n s a j e{"code":0,"httpCode":200,"jsonResponse":"{\"objs\":[{\"id\":400,\"title\":\"Combo Papas\",\"desc\":\"\\u003cp\

\u003e- Cup\\u0026oacute;n para un hotdog y un refresco mediano de cualquier sabor.\\u003c/p\\u003e\\u003cp\\u003e- Cin\\u0026eacute;polis Tradicional de lunes a domingo.\\u003c/p\\u003e\",\"otherInfo\":\"\\u003cp\\u003eAl confirmar tu compra recibir\\u0026aacute;s un correo con el \\u003cstrong\\u003ec\\u0026oacute;digo\\u003c/strong\

\u003e para canjearlo en la sucursal MiCinito de tu elecci\\u0026oacute;n. Recuerda que tambi\\u0026eacute;n puedes consultar tu c\\u0026oacute;digo ingresando a la secci\\u0026oacute;n de \\\"\\u003cem\\u003eCompras en misitio\

\u003c/em\\u003e\\\" desde el men\\u0026uacute;.\\u003c/p\\u003e\\n\\u003cp\\u003eLos c\\u0026oacute;digos tienen una validez de \\u003cstrong\\u003e15 d\\u0026iacute;as\\u003c/strong\\u003e a partir de la fecha de compra.\\u003c/p\\u003e\",\"icon\":\"imagenes/Resources/MiCinitoStore/pack_Papas.png\",\"price\":0.05,\"typeCurrency\":

\"MXN\",\"stock\":27},{\"id\":500,\"title\":\"Combo Hotdog\",\"desc\":\"\\u003cp\\u003e- Cup\\u0026oacute;n para una Galleta dulce de dos ingredientes y caf\\u0026eacute; americano mediano (16 oz).\\u003c/p\\u003e\\u003cp\

\u003e- Cin\\u0026eacute;polis Tradicional de lunes a domingo.\\u003c/p\\u003e\",\"otherInfo\":\"\\u003cp\\u003eAl confirmar tu compra recibir\\u0026aacute;s un correo con el \\u003cstrong\\u003ec\\u0026oacute;digo\\u003c/strong\\u003e para canjearlo en la sucursal MiCinito de tu elecci\\u0026oacute;n. Recuerda que tambi\\u0026eacute;n puedes

consultar tu c\\u0026oacute;digo ingresando a la secci\\u0026oacute;n de \\\"\\u003cem\\u003eCompras en misitio\\u003c/em\\u003e\\\" desde el men\\u0026uacute;.\\u003c/p\\u003e\\n\\u003cp\\u003eLos c\\u0026oacute;digos tienen

una validez de \\u003cstrong\\u003e15 d\\u0026iacute;as\\u003c/strong\\u003e a partir de la fecha de compra.\\u003c/p\\u003e\",\"icon\":\"imagenes/Resources/MiCinitoStore/pack_hotdog.png\",\"price\":0.02,\"typeCurrency\":\"MXN\",\"stock\":185},{\"id\":106,\"title\":\"Combo Galleta\",\"desc\":\"\\u003cp\\u003e- Cup\\u0026oacute;n para

unos Papas con queso y un refresco mediano de cualquier sabor.\\u003c/p\\u003e\\u003cp\\u003e- Cin\\u0026eacute;polis Tradicional de lunes a domingo.\\u003c/p\\u003e\",\"otherInfo\":\"\\u003cp\\u003eAl confirmar tu

compra recibir\\u0026aacute;s un correo con el \\u003cstrong\\u003ec\\u0026oacute;digo\\u003c/strong\\u003e para canjearlo en la sucursal MiCinito de tu elecci\\u0026oacute;n. Recuerda que tambi\\u0026eacute;n puedes consultar tu c\\u0026oacute;digo ingresando a la secci\\u0026oacute;n de \\\"\\u003cem\\u003eCompras en misitio\\u003c/em\

\u003e\\\" desde el men\\u0026uacute;.\\u003c/p\\u003e\\n\\u003cp\\u003eLos c\\u0026oacute;digos tienen una validez de \\u003cstrong\\u003e15 d\\u0026iacute;as\\u003c/strong\\u003e a partir de la fecha de compra.\\u003c/p\\u003e\",

\"icon\":\"imagenes/Resources/MiCinitoStore/pack_Galletas.png\",\"price\":0.06,\"typeCurrency\":\"MXN\",\"stock\":214}],\"error\":{\"code\":0,\"retry\":0}}"}

Page 29: Diseñando API's de Micro-Servicios Para Mobile. · ejemplo. Servicios (Legados y Nuevos) ... Simple, Cualquiera Puede ... JAXB. Formato Mensaje - JSON { "Cotizacion":{

¿ Y l a S e g u r i d a d ?

• Mecanismos de Token.

• Encriptación de request y response.

• Uso de canales seguros (https).

• Uso de medios seguros (VPN).

• Frameworks de autenticación (OAuth, AccessToken, etc).

Page 30: Diseñando API's de Micro-Servicios Para Mobile. · ejemplo. Servicios (Legados y Nuevos) ... Simple, Cualquiera Puede ... JAXB. Formato Mensaje - JSON { "Cotizacion":{

A p l i c a c i o n e s P a r a D i s e ñ a r y C o n s t r u i r

• APIARY

• SWAGGER

• VI, SUBLIME, EMACS, ETC.

• WORD — En serio dijiste Word?.

Page 31: Diseñando API's de Micro-Servicios Para Mobile. · ejemplo. Servicios (Legados y Nuevos) ... Simple, Cualquiera Puede ... JAXB. Formato Mensaje - JSON { "Cotizacion":{

A P I a r y

Page 32: Diseñando API's de Micro-Servicios Para Mobile. · ejemplo. Servicios (Legados y Nuevos) ... Simple, Cualquiera Puede ... JAXB. Formato Mensaje - JSON { "Cotizacion":{

S WA G G E R

• https://swagger.io/tools/

• https://inspector.swagger.io/builder

• https://editor.swagger.io/

• https://swagger.io/swagger-codegen/

Page 33: Diseñando API's de Micro-Servicios Para Mobile. · ejemplo. Servicios (Legados y Nuevos) ... Simple, Cualquiera Puede ... JAXB. Formato Mensaje - JSON { "Cotizacion":{

¿Vemos Cód i g o y u n E j emp l o ?

Page 34: Diseñando API's de Micro-Servicios Para Mobile. · ejemplo. Servicios (Legados y Nuevos) ... Simple, Cualquiera Puede ... JAXB. Formato Mensaje - JSON { "Cotizacion":{

C o n c l u s i ó n R á p i d a

• Las aplicaciones móviles es una necesidad imperante.

• Seleccionar la arquitectura de backend depende de la naturaleza de la app, presupuesto y experiencia.

• Arquitectura de despliegue a seleccionar depende de más que la moda. Se debe seleccionar el nivel de granularidad correcto.

• Necesidad de construir una API consistente, robusta y mantenible.

• Se debe decidir, el como se hará el CONTRATO.

• Utilización de herramientas disponibles: Apiary , Swagger, DISEÑO.

Page 35: Diseñando API's de Micro-Servicios Para Mobile. · ejemplo. Servicios (Legados y Nuevos) ... Simple, Cualquiera Puede ... JAXB. Formato Mensaje - JSON { "Cotizacion":{

Q & aJorge Vargas CTO weex

SUN/Oracle Java Champion @edivargas

Capítulo 1 Temporada 2 Track: Java, Apps Móviles y su nube

Page 36: Diseñando API's de Micro-Servicios Para Mobile. · ejemplo. Servicios (Legados y Nuevos) ... Simple, Cualquiera Puede ... JAXB. Formato Mensaje - JSON { "Cotizacion":{

Gracias!!!Capítulo 1 Temporada 2 Track: Java, Apps Móviles y su nube

D i s e ñ a n d o A P I ' s d e M i c ro s e r v i c i o s P a r a

M o b i l e .

Jorge Vargas CTO weex

SUN/Oracle Java Champion @edivargas

Page 37: Diseñando API's de Micro-Servicios Para Mobile. · ejemplo. Servicios (Legados y Nuevos) ... Simple, Cualquiera Puede ... JAXB. Formato Mensaje - JSON { "Cotizacion":{

A rq u i t e c t u r a d e M i c ro s e r v i c i o s

• Configuration Service (Archaius / Netflix).

• Discovery Service (Eureka / Netflix).

• Load Balancing (Ribbon / Netflix).

• Circuit Breaker (Hystrix / Netflix).

• Edge Service (Zuul / Netflix)..

• Log Management (Graylog / OS).