Testing REST API con HTTPie

En días pasados tuvimos un taller práctico sobre cómo hacer testing de REST APIs usando una herramienta muy poderosa que definitivamente deberías agregar a tu set de tools: HTTPie.

Definido por sus creadores como:

A single http command designed for painless debugging and interaction with HTTP servers, RESTful APIs, and web services

Instalación

HTTPie te ayudará a probar que tus REST APIs estén funcionando como se espera, la instalación varia un poco de acuerdo al sistema operativo que tengas; aquí te dejamos las instrucciones oficiales para proceder con la instalación.

Ejemplos

En la siguiente lista tenemos algunos ejemplos de ejecución para los casos de uso más comunes, por ejemplo obtener (GET), agregar (POST) o actualizar información (PUT).

Estos ejemplos pertenecen al REST API creado en Laravel Lumen para el Curso Profesional de Angular para Aplicaciones Enterprise disponible en video.

El código que crea este REST API está público en: http://projects-api.webtraining.zone/ para tu consulta y aprendizaje.

Empecemos, pues con los ejemplos:

GET users

Imaginemos que queremos obtener la lista de usuarios registrados en nuestro sistema, entonces podríamos hacer una petición GET hacia nuestro API con la siguiente instrucción:
http GET http://projects-api.webtraining.zone/users
La respuesta del llamado anterior, será como sigue:
Si notamos, este REST API tiene los recursos (users) protegidos, por lo que es necesario primero “iniciar sesión” para poder leer los datos, entonces hagamos eso en el siguiente ejemplo:

Login

Para poder efectuar la operación de login a nuestro API es necesario ejecutar una petición de tipo POST. Esta petición necesita el username y password.
En HTTPie la forma de mandar estos parámetros es el formato <nombre-del-parámetro>=<valor-del-parámetro> por ejemplo: username=esmeralda-rodriguez
http POST http://projects-api.webtraining.zone/users/login username=esmeralda-rodriguez password=esmeralda
Lo importante en la respuesta que obtenemos es el api_token que más adelante enviaremos como un header de la petición para poder solicitar datos.

GET con token

Una vez hecho el login que nos devuelve nuestro token, ahora procedamos a “inyectarlo” en los headers de la petición:
http GET http://projects-api.webtraining.zone/users Content-Type:application/json Api-Token:jJHGtk3IoZ84CmKlDz5N206w46yaj6v4mk0vXdTDl5w80iqnk0skp9Jp6NQ3
Como vemos, ahora sí, ya tenemos nuestros datos de forma correcta ya que el token es válido y por tanto tenemos “permiso” para leer datos.

PUT con JSON body

Ahora que pasa si deseo hacer una actualización de datos, reemplazando una instancia completa de un usuario; normalmente estos “reemplazos” de entidades de datos se realizan mediante el método PUT (PATCH usualmente se usa para hacer modificaciones de elementos de una entidad, por ejemplo en nuestro caso el nombre de usuario o sólo la contraseña).

echo '{ "username" : "esmeralda-rodriguez", "email" : "esmeralda@webtraining.mx", "password" : "esmeralda", "name" : "Esmeralda Rodríguez B."}' | http PUT http://projects-api.webtraining.zone/users/2 Content-Type:application/json Api-Token:jJHGtk3IoZ84CmKlDz5N206w46yaj6v4mk0vXdTDl5w80iqnk0skp9Jp6NQ3

Evidentemente aquí tenemos una desventaja, ya que si nuestro objeto JSON fuera muy grande, resulta muy incómodo escribir eso a nivel de línea de comandos.

Sería mejor tener una forma de tener este JSON en un archivo y luego usar ese archivo como entrada, eso lo veremos en el siguiente ejemplo.

PUT con JSON body desde un archivo

Para poder realizar este ejercicio vamos a crear un archivo llamado “esmeralda.json”, con el siguiente contenido:

{
    "username": "esmeralda-rodriguez",
    "email": "esmeralda@webtraining.mx",
    "password": "esmeralda",
    "name": "Esmeralda Rodríguez B."
}

Ahora procederemos a ejecutar nuestra petición PUT usando este archivo como entrada, nota el símbolo “@” antes del nombre del archivo:

http PUT http://projects-api.webtraining.zone/users/2 Content-Type:application/json Api-Token:jJHGtk3IoZ84CmKlDz5N206w46yaj6v4mk0vXdTDl5w80iqnk0skp9Jp6NQ3 @esmeralda.json

El resultado será exactamente el mismo que el ejercicio anterior, sólo que esta opción es mucho más mantenible y cómoda de trabajar.

¿Te gustaría escuchar una explicación en video?

Visita nuestro taller en Webtraining.ZoneREST APIs con Postman y HTTPie

Nos vemos en el siguiente post. Saludos.

Tu servidor,

Alex Arriaga.