Fork me on GitHub
{% trans "

Your browser doesn't support the features required by impress.js, so you are presented with a simplified version of this presentation.

For the best experience please use the latest Chrome, Safari or Firefox browser.

" %}

¡Una Kata diferente! MarvelKata
Software Craftsmanship Barcelona 2014

nikey_es@yahoo.es   @nikey_es   github.com/nikeyes
Marvel Kata
¡Haz Click Sobre el Cómic para verlo en pantalla completa!

¿Qué vamos a hacer?
1) Conectarnos a la API de Marvel.

2) Obtener una lista con los comics que saldrán semana que viene.

3) El formato de Comics de la tienda de Stuart es:
  • Título
  • ThumbailUrl
  • Precio
¿Cuáles son los objectivos?
1) Practicar la conexión a servicios de terceros

2) Ver los problemas que aparecen al conectarnos a servicios externos.

3) Después de tener la primera versión puede que haya sorpresas...
¿Cómo podemos hacer esto?
Datos Acceso API:
  • Public Key: 97f295907072a970c5df30d73d1f3816
  • Private key: ed54a875c0dffad1fa6af84e66ff104434a1c6cc

Especificación Formato JSON retorno:
http://developer.marvel.com/docs#!/public/getComicsCollection_get_6
¿Cómo podemos hacer esto?
Conexión desde Servidor

Url: http://gateway.marvel.com:80/v1/public/comics?dateDescriptor=nextWeek&ts=XXX&apikey=XXX&hash=XXX

ts = timestamp o cualquier número.
apiKey = public key
hash = md5(ts+privateKey+publicKey)

Conexión desde cliente:

Url: http://gateway.marvel.com:80/v1/public/comics?dateDescriptor=nextWeek&apikey=XXXX

Solo accesible desde los dominios:
*.bcnswcraft.com
*.developer.marvel.com
¡Qué difícil! ¡Hay que hacer un MD5!
.Net -> System.Security.Cryptography

Java -> java.security.MessageDigest

Javascript ->https://code.google.com/p/crypto-js/

¡Qué difícil! ¡Hay que hacer un MD5!
Y no tengo ni idea de como se hace en este lenguaje...

Generador de MD5 online:

http://www.md5.cz/
¡Qué difícil! ¡Y soy muy vago!
¡Qué difícil! ¡Y soy muy vago!
Datos para construir la URL desde servidor:

  • ts = 987
  • apiKey = 97f295907072a970c5df30d73d1f3816
  • hash = abfa1c1d42a73a5eab042242335d805d
  • Url construida:
    http://gateway.marvel.com:80/v1/public/comics
    ?dateDescriptor=nextWeek&ts= 987&apikey=97f295907072a970c5df30d73d1f3816
    &hash=abfa1c1d42a73a5eab042242335d805d
¡No tengo internet!
Podemos simular que hacemos la llamada al servicio.

Repuesta JSON Marvel para descargar:

http://bit.ly/1qQtR91
¡A divertirse!
minutes
0
0
seconds
0
0

No se vayan todavía, ¡aún hay más!
¡Haz Click Sobre el Cómic para verlo en pantalla completa!

Cambios necesarios
La tienda de Stuart tiene un método para acceder a su sistema:

List<Comic> GetComicsNextWeekStuartShop();
  • ¿Cómo afecta a nuestra aplicación?
  • ¿Es fácil de cambiar?
  • ¿Seríamos capaces de cambiar nuestro código
    en menos de 5 minutos para soportar el cambio?
Debate
  • ¿Qué le pasará a nuestra aplicación si la API falla?
  • ¿Que le pasa a nuestro código si cambian el formato de Marvel?
  • ¿Que le pasa a nuestro código si cambian el acceso a la API?
  • ¿Qué le pasa a nuestro código si queremos añadir una Cache?
  • ¿Qué patrones nos pueden ayudar a soportar todo esto?
  • ¿Podemos desarrollar con TDD el acceso a servicios externos?
Patrones que nos pueden ayudar
Gracias!
Space Forward
Left, Down, Page Down Next slide
Right, Up, Page Up Previous slide
P Open presenter console
H Toggle this help