Programación

Tests end-to-end con Selenium Webdriver

Open source on Github

Vale, vale: no he llegado a tiempo para publicaros el post sobre escalabilidad en el que estoy trabajando pero calma porque no os voy a dejar sin turrón: republico un screencast que monté justo antes de empezar programar.cloud sobre test end-to-end con Selenium. He vuelto a verlo y todo lo explicado en él sigue estando vigente. Además quedó bastante entretenido, sobre todo si lo pones a x1.25. Siempre soy más divertido a x1.25.

Recordad que los podcasters y bloggers nos alimentamos de likes y retuits así que sed buenos y dadle a los botoncitos que aparecen en la izquierda para que el mayor número de gente posible conozca el proyecto.

Configurar CORS en Apache Server

Open source on Github

Sí, sí: no es viernes. Pero este día extra de espera ha merecido la pena porque os traigo un vídeo fresquísimo que en apenas veinte minutos te demuestra cómo invocar un API REST con javascript incluso si se encuentra en un dominio diferente al de la página que realiza la petición ¡activando CORS!

Entender CORS

¡Vengadores, reuniros!

TL;DR: Para que una página web pueda hacer llamadas HTTP a una ruta situada en un dominio diferente al que se usó para descargarla debe pedir autorización primero al servidor del segundo dominio.

RSS para podcatcher

alojado en archive.org

Dale un retweet al post si depurando javascript alguna vez te has encontrado con el mensaje “Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource blah blah blah enabling CORS.”.

Vale, seguramente tienes una idea de lo que significa y de cómo se soluciona pero en el post de hoy vas a entender la brecha de seguridad que ayuda a evitar y qué es lo que pasa cuando activas CORS en el servidor para evitarlo. Empezamos.

Demo del Api Gateway Kong

¡Volvemos a tener vídeo! Esta semana vamos a poner en práctica lo que hemos explicado sobre seguridad en el post con el glosario y en el que hablaba sobre implementaciones .

Configuraremos el API gateway Kong para que nos autentifique mediante API Key. En el post puedes ver todos los comandos que he usado así que no hay excusa para no ponerte manos a la obra y probarlo :)

Cómo implementar la seguridad de tu API (Segunda parte)

Beware of the cat

TL;DR: Access key/Secret key es un mecanismo de autentificación muy popular pero JWT tiene ventajas al proporcionar más información sobre el usuario. Puedes centralizar la seguridad utilizando un API Gateway o implementarla en todos y cada uno de tus microservicios.

RSS para podcatcher

alojado en archive.org

Vale, esta es la segunda parte del post en el que hablo de seguridad desde el punto de vista del desarrollador. Nos vamos a centrar en explicar tanto el acceso mediante Access Key como los detalles sobre JSON Web Token y hablaremos de las alternativas que tienes a la hora de implementar la autenticación incluyendo el uso de API gateways. ¡No lo pierdas!

Cómo implementar la seguridad de tu API (Primera parte)

Beware of the cat

TL;DR: Basic Auth no es adecuado para autenticar usuarios en APIs. OAuth2 sirve para delegar, no para autenticar. Y todo tiene que ir por TLS. ¡Ah! Y nada de cookies. Ok, ahora me explico con más detalle.

RSS para podcatcher

alojado en archive.org

Como decía la semana pasada, hoy vamos a hablar de seguridad. ¡La semana pasada! ¿Lo pillas? Ay… en serio, he echado de menos escribiros y espero que vosotros también os hayáis acordado de mi. Para compensar vuelvo con un capítulo súper práctico y detallado que espero que aclare todas las dudas que tienes sobre un pilar fundamental de tu arquitectura como es la seguridad. Vamos a ello.

Cómo implementar HATEOAS en tus APIs

Multiversos enlazados

TL;DR: Los hiperenlaces tienen un papel tan importante en las APIs como en las pantallas para humanos y sin embargo casi nunca se implementan correctamente. Te cuento cómo solucionar este problema.

RSS para podcatcher

alojado en archive.org

Open source on Github

HATEAOS es un término inglés que traducido significa “Estoy desesperado buscando un acrónimo con gancho y no lo consigo encontrar”. Pero detrás esta palabra encontrarás lo que durante veinte años ha sido el core de la web: el hipertexto, los enlaces.

Cómo documentar un microservicio (SpringRESTdocs)

Documentación electrónica

TL;DR: Genera documentación de forma casi automática, minimizando el repeat yourself casi a cero y estructurándola de forma que tenga sentido y coherencia. ¡Ah! Y llénala de ejemplos, maldita sea. Con Spring REST docs.

RSS para podcatcher

alojado en archive.org

Cómo documentar un microservicio (incluyendo Swagger)

Papiro de Ani

TL;DR: Nos pagan por entregar valor. Invertir tiempo en crear documentos que nadie va a leer no tiene sentido pero publicar un API sin explicar cómo funciona es aún peor. Te cuento cómo encontrar el equilibrio entre ambos extremos y te explico por qué NO usarás Swagger (a medio plazo).

RSS para podcatcher

alojado en archive.org

Notas sobre el protocolo HTTP

TL:DR; Tim Berners-Lee es un grande. Un POST permite al servidor elegir la URI del nuevo recurso y un PUT la explicita completamente. GET es idempotente y TRACE no sirve para nada.

Me habéis comentado que el capítulo sobre cómo crear un API REST es duro de seguir si no has jugado antes mínimamente con HTTP así que he montado esta precuela en vídeo.

Tests de integración

traffic light tree

TL;DR: Es imposible mantener la calidad del producto si los errores no se detectan inmediatamente. Una de las herramientas más potentes que tienes son los tests.

RSS para podcatcher

alojado en archive.org

Voy a decirte por primera vez algo: no, no, en realidad llevo dándote la paliza con lo mismo desde el primer post y es que el código tiene que estar en producción para que aporte valor. Y el problema principal que te vas a encontrar si en lugar de una release al mes haces cuatro (o diez, o cien) es que tienes cuatro, diez o cien veces más oportunidades de liarla. Cualquier error que hayas introducido en tu código potencialmente puede terminar impactando al usuario mucho antes y provocar un retraso en cascada de nuevos despliegues. Voy a explicarte cómo evitar esta situación y de paso también te contaré algunas cosas sobre las lechugas.

Cómo crear una API REST

un banco en el parque

TL:DR; Diseña un API de la misma manera que diseñas una pantalla: pensando en la comodidad de quien la va a utilizar, no en tu conveniencia.

RSS para podcatcher

alojado en archive.org

Vamos a ponernos el gorrito de un miembro del equipo, en concreto la persona que se haya asignado la tarea de implementar la historia de usuario PROGRESO_CURSOS. ¿La recuerdas del post anterior ? Decía algo así:

  • Como administrador de cursos deseo poder obtener una visualización global de la utilización de cada curso y unidad didáctica para conocer su popularidad y actuar en consecuencia.*

Bien, manos a la obra: tendremos que detectar los recursos a manipular, definir unas rutas HTTP claras para invocar operaciones sobre ellos y generar la respuesta deseada. No problem. O sí.

Arquitectura del primer proyecto

Dos cabras escocesas

TL:DR; Se aprende haciendo: aquí tienes la descripción de un pequeño (pero realista) proyecto.

RSS para podcatcher

alojado en archive.org

¿Qué vamos a hacer?

Primero voy a ponerme distintos gorritos para ir presentándote un proyecto. Lógicamente es una caricatura (espero que seas indulgente con los detalles) pero tendrá la suficiente complejidad como para que vayamos practicando los patrones de los que quiero hablar.

Desde monolíticas hasta microservicios

almacén lleno de stock

TL;DR: Tenemos que ser conscientes de que seguimos pensando igual que hace unos años cuando las limitaciones tecnológicas son ahora otras.

RSS para podcatcher

alojado en archive.org

¿Cuánto tiempo llevas en el negocio? ¿Recuerdas cuando los servidores eran máquinas con dos procesadores y 128MB de RAM? Párate un momento a pensar sobre esto porque es importante: hace unos años era difícil conseguir hardware e incluso el que utilizábamos en producción tenían menos potencia que el teléfono que llevas en tu bolsillo. Además el acceso a internet era limitado y las aplicaciones que desarrollábamos solían trabajar en red local y soportar un número pequeño de usuarios. Teníamos que aprovechar al máximo el hierro disponible y por ejemplo en entornos Java no podíamos arrancar más de una máquina virtual en un ordenador porque no teníamos suficiente RAM. Por ello nació el concepto de servidor de aplicaciones que básicamente permitía ejecutar de forma más o menos aislada varios componentes dentro de la misma java virtual machine.

Magia desde la línea de comandos

Te cuento muy rápidamente cómo puedes encadenar una serie de pequeños programitas de línea de comandos para llevar a cabo un trabajo interesante y relativamente complejo. Y lo dicho, tenemos que volver a las raíces: pequeños componentes independientes que se encadenen entre ellos fácilmente.