Saltar al contenido

Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web ASP.NET Core, MVC, Blazor, SignalR, Entity Framework, C#, Azure, Javascript... y lo que venga ;)

18 años online

el blog de José M. Aguilar

Inicio El autor Contactar

Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web
ASP.NET Core, MVC, Blazor, SignalR, Entity Framework, C#, Azure, Javascript...

¡Microsoft MVP!
martes, 11 de febrero de 2025
Desarrollador trabajando con herramientas

Desde que se introdujo en Visual Studio el soporte para archivos .http, he estado usando esta funcionalidad del IDE para probar APIs, dejando casi totalmente de lado a herramientas que había utilizado siempre como Postman o Fiddler. Es genial tenerlo todo en el mismo entorno, que sea tan sencillo de utilizar, y que se integre tan bien con otras herramientas del ecosistema, como el endpoint explorer, user secrets de ASP.NET Core, Azure key vault, etc.

Sin embargo, una limitación importante era que sólo podíamos declarar y asignar variables, pero éstas no podían ser modificadas en tiempo de ejecución. Esto hacía que, por ejemplo, no pudiéramos hacer una llamada a un endpoint de autenticación y utilizar luego el token retornado para acceder a determinados recursos, por lo que teníamos que hacerlo manualmente.

Pero esto cambió con la versión 17.12 de Visual Studio 2022, donde se ha añadido la posibilidad de poder capturar valores de la respuesta de una petición para utilizarlos más adelante en otras peticiones.

Cómo acceder a valores retornados por una petición

Para ello, lo primero que debemos hacer es asignar un nombre a la petición que queremos utilizar para capturar valores. Esto lo hacemos añadiendo un comentario justo antes de la primera línea de la petición con la directiva @name, como en el siguiente ejemplo:

# @name login
POST https://localhost:5748/login
Content-Type: application/json

{
  "username": "john",
  "password": "123456"
}

De esta forma, la variable login quedará definida como una variable de petición, y conseguimos identificarla para luego poder referirnos a ella desde otras operaciones. Por ejemplo, si el resultado de la petición anterior retornara un objeto con una propiedad token, podríamos usarlo en otra petición posterior de una forma similar a la siguiente:

GET https://localhost:5748/customers
Authorization: Bearer {{login.response.body.$.token}}

Con la expresión login.response.body.$.token estamos indicando que queremos utilizar el cuerpo de la respuesta de la petición login y acceder a la propiedad token del objeto JSON que se ha retornado. Por supuesto, la expresión {{xxx}} podemos usarla en cualquier parte de la petición, ya sea en la URL, en el cuerpo, en los encabezados, etc. El único requisito es que la petición login se haya ejecutado previamente.

También, si quisiéramos facilitar la lectura y reutilizar elementos, podríamos establecer variables con estos datos, y luego usarlas de la forma habitual:

...
@authHeader=Bearer {{login.response.body.$.token}}

GET {{host}}/user
Authorization: {{authHeader}}

La expresión login.response.body.$.token especifica la ruta hacia el valor que queremos capturar, y responde al siguiente formato:

{{requestName.(response|request).(body|headers).(*|JSONPath|XPath|Header Name)}}

Como podemos ver, en primer lugar aparece el nombre de la petición (el que hemos asignado con @name), separado por un punto de "response" o "request" en función de si queremos acceder a la respuesta o a la petición. Luego, de nuevo separado por un punto, debemos indicar si queremos acceder al cuerpo "body" o a los encabezados "headers". Por último, debemos especificar cómo llegamos al valor:

  • Si se trata de un contenido JSON, debemos usar una expresión JSON Path para llegar a él.
  • Si se trata de un contenido XML, debemos usar una expresión XPath.
  • Si se trata de un encabezado, debemos indicar simplemente el nombre del encabezado.

En definitiva, se trata de una mejora muy interesante que nos permite hacer pruebas más avanzadas y complejas, y que nos facilita mucho la vida a la hora de trabajar con APIs.

¡Espero que os sea de utilidad!

Publicado en: www.variablenotfound.com.

Aún no hay comentarios, ¡sé el primero!