¡Microsoft MVP 2013 – APS.NET/IIS!

MVP 2013Quiero comportair con todos ustedes esta gran noticia que recibí hace una semana. Nuevamente fui nombrado como Microsoft MVP (Most Value Professional) en el área de ASP.NET/IIS. Noticias como estas realmente me ponen muy feliz y me dan fuerzas para seguir aportando experiencias y conocimientos al resto de la comunidad.

Quiero agradecer a todos mis compañeros de trabajo y colegas de los cuales aprendo muchísimo en el día a día y a mis familiares que siempre estan apoyando en lo que a una más le gusta. En particular quiero agradecer a compañeros como @diegobersano, @MfFerrero, @francoferrari86, @emaxy06 con los cuales compartí y aprendí muchisimo durante este último tiempo (prometo que ya van a volver los #SR). También agredacer enormemente a @masaez y @aschapiro que desde Microsoft siempre colaboraron conmigo y tuve la gran suerte de conocerlos. Y por último agradecer a mi gran maestro @MartinSalias!

Espero que este año pueda seguir ayudando a que esta gran comunidad siga creciendo.

¡Gracias a todos!

Anuncios

Patrón PRG

En esta oportunidad vamos a hablar del patrón PRG (Post-Redirect-Get) el cual es aplicable en el desarrollo web. Tal como el nombre nos sugiere, lo que se logra con esta técnica es que la respuesta a una petición POST sea una re-dirección que nos permita obtener una nueva página por medio de una petición GET.

Antes que nada veamos, utilizando un escenario bastante común en los sitios web, el problema de no aplicar este patrón. Imaginemos un formulario de contacto, en donde el usuario carga información y se envía a un servidor web que la recibe y procesa. Por último informamos al usuario que la operación se realizó con éxito por medio de una nueva página.

En este último punto es donde arriba el problema, ya que si el usuario por esas cosas de la vida se le ocurre actualizar esta última página (F5) aparecerá el siguiente cuadro de dialogo:

Dialogo

Dialogo

El primer problema con esta advertencia es que el usuario posiblemente no entienda el mensaje (en el cual se pregunta si quiere volver a enviar la información del formulario). Por este motivo posiblemente intente reenviar la información cuando ya lo hizo!.

En el caso de hacerlo (botón “Reintentar”) se volverá a realizar la petición POST y nuevamente estaremos procesando la lógica del formulario de contacto (o el formulario que corresponda). Esto, entre otros problemas, nos puede generar registros duplicados, notificaciones duplicadas, etc …  :/

Para prevenir estos casos lo que PRG nos sugiere es lo siguiente:

  1. Recibimos una petición POST con los datos del formulario y ejecutamos la lógica que corresponda.
  2. Respondemos al cliente con una redirección (código de estados HTTP 30x) para que el navegador sepa que debe solicitar otra página (en el ejemplo sería la pantalla que informa que los datos de contacto se enviaron correctamente).
  3. El navegador obtiene esta página mediante una petición GET.

Vista la teoría, vamos a la práctica.

Aclaración: en el siguiente ejemplo voy aplicar el patrón PRG en una aplicación ASP.NET MVC pero es totalmente posible hacerlo en cualquier otra tecnología web (WebForms, PHP…).

Siguiendo el ejemplo de arriba, nuestro método de acción debería quedar  mas o menos así:

Aplicando el patrón PRG

Aplicando el patrón PRG

Muy simple, no?! En un post anterior vimos lo facil que es hacer re-direcciones en ASP.NET MVC. Veamos la respuesta del servidor luego de procesar la petición POST:

Respuesta del servidor

Respuesta del servidor

En primer lugar la respuesta a la petición POST es una re-dirección (HTTP Status 302). En segundo lugar se solicita la página “de agradecimiento” por medio de una petición GET, la cual es devuelta con éxito (HTTP Status 200). Si ahora al usuario se le ocurriera actualizar la página, el navegador le retornará la última petición realizada (petición GET).

Como pueden ver, aplicar esta patrón es muy simple, aún más con ASP.NET MVC (solo basta con modificar la respuesta en nuestro método de acción).

Espero que les sea de utilidad 🙂