<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>proxy &#8211; Oscar Blancarte &#8211; Software Architecture</title>
	<atom:link href="https://www.oscarblancarteblog.com/tag/proxy/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.oscarblancarteblog.com</link>
	<description>Software Architect &#38; FullStack developer</description>
	<lastBuildDate>Tue, 29 Jul 2014 23:14:12 +0000</lastBuildDate>
	<language>es-MX</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.5.5</generator>

<image>
	<url>https://www.oscarblancarteblog.com/wp-content/uploads/2019/03/cropped-ob-32x32.png</url>
	<title>proxy &#8211; Oscar Blancarte &#8211; Software Architecture</title>
	<link>https://www.oscarblancarteblog.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">89905023</site>	<item>
		<title>Patrón de diseño &#8211; Proxy</title>
		<link>https://www.oscarblancarteblog.com/2014/07/29/patron-de-diseno-proxy/</link>
					<comments>https://www.oscarblancarteblog.com/2014/07/29/patron-de-diseno-proxy/#respond</comments>
		
		<dc:creator><![CDATA[oblancarte]]></dc:creator>
		<pubDate>Tue, 29 Jul 2014 23:14:12 +0000</pubDate>
				<category><![CDATA[Patrones de Diseño]]></category>
		<category><![CDATA[Patron de diseño]]></category>
		<category><![CDATA[proxy]]></category>
		<guid isPermaLink="false">http://oscarblancarteblog.com/?p=274</guid>

					<description><![CDATA[<p>En esta entrada les hablare del patrón de diseño Proxy, el cual es uno de mis favoritos ya que nos permite hacer una gran cantidad de cosas sin que el usuario final se de cuenta de lo que esta pasando. Podríamos definir a un Proxy como una clase o componentes que hace el papel de intermediario entre [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://www.oscarblancarteblog.com/2014/07/29/patron-de-diseno-proxy/">Patrón de diseño &#8211; Proxy</a> appeared first on <a rel="nofollow" href="https://www.oscarblancarteblog.com">Oscar Blancarte - Software Architecture</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;"><a href="http://www.oscarblancarteblog.com/wp-content/uploads/2014/11/UML1-e1438565150654.gif"><img loading="lazy" class=" size-full wp-image-726 alignleft" src="http://www.oscarblancarteblog.com/wp-content/uploads/2014/11/UML1-e1438565150654.gif" alt="UML" width="86" height="100" /></a>En esta entrada les hablare del patrón de diseño <strong>Proxy, </strong>el cual es uno de mis favoritos ya que nos permite hacer una gran cantidad de cosas sin que el usuario final se de cuenta de lo que esta pasando. Podríamos definir a un Proxy como una clase o componentes que hace el papel de <strong>intermediario</strong> entre la clase que queremos utilizar el cliente que la esta utilizando. Cuando digo intermediario me refiero a que el Proxy nos permite hacer una o varias operaciones antes y después de realizar la tarea que realmente quiere el cliente, incluso el proxy puede tomar la decisión de nunca realizar la tarea solicitada por el usuario.</p>
<figure id="attachment_275" aria-describedby="caption-attachment-275" style="width: 411px" class="wp-caption aligncenter"><a href="http://www.oscarblancarteblog.com/wp-content/uploads/2014/07/patronproxy.png"><img loading="lazy" class="wp-image-275 size-full" title="Patrón de diseño Proxy" src="http://www.oscarblancarteblog.com/wp-content/uploads/2014/07/patronproxy.png" alt="Patrón de diseño Proxy" width="411" height="208" /></a><figcaption id="caption-attachment-275" class="wp-caption-text">Fig.1: Diagrama que muestra como esta conformado un Proxy, Un Proxy se crea a través de una interfaz la cual imita el comportamiento de esta, Sin embargo el trabajo realmente lo delega a otra clase que generalmente también implementan la interfaz del Proxy.</figcaption></figure>
<p><span id="more-274"></span></p>
<p style="text-align: justify;">Para entender bien lo que es un Proxy nos iremos al ámbito de las Redes ya que es un tema casi todos comprendemos, Todos hemos escuchado de los proxy de red o Servidores Proxy los cuales nos impiden que entremos a una determinada pagina como por ejemplo las redes sociales o paginas de vídeos en streaming. Pues bien estos servidores implementa el patrón de diseño proxy, ya que antes de enviar la solicitud a la pagina que queremos entrar primero valida si la pagina no esta en la lista de paginas bloqueadas si no es a sí entonces manda el request a la pagina y el proxy antes de enviarnos la respuesta a nuestro navegador valida por ejemplo que la pagina no tenga contenido prohibido como por ejemplo paginas de adulo o vídeo juegos, Si el proxy detecta que la respuesta de la pagina regresa un contendido de estos entonces el proxy nos manda una pagina distinta a la solicitada diciendo que la pagina tiene contenido indeseado.</p>
<p style="text-align: justify;">Los <em>proxy</em> tiene varias utilidades y podemos utilizarlo para lo que queramos, para este caso hablaremos de ejemplo prácticos los cuales son usados con regularidad.</p>
<pre><strong>Proxy de Seguridad: </strong></pre>
<p style="text-align: justify;">Cuando desarrollamos aplicaciones por lo general desarrollamos clases que utilizamos como BusinessService (Clases con operaciones de negocio) estas clases generalmente no requieren autenticación y los usuarios pueden invocar los métodos sin ningún problema, ¿pero que pasa si un día decidimos que estos métodos requieren de privilegios para ser ejecutados? una solución seria modificar los métodos para que recibieran las credenciales o modificar la aplicación para que valide los privilegios antes de mandar llamar los métodos de negocio, Sin embargo estos cambios son radicales ya que implicaría modificar la firma de los BusinessService impactando gran parte del proyecto o modificar cada parte en donde hacíamos un llamada a los BusinessService para agregar la validación antes de la llamada. Estas soluciones producirían un gran cambio en nuestra aplicación y afectaría los componentes ya desarrollados y probados para tener que volver a la etapa  de pruebas y validar nuevamente que la aplicación sigue funcionando correctamente.</p>
<figure id="attachment_279" aria-describedby="caption-attachment-279" style="width: 275px" class="wp-caption aligncenter"><a href="http://www.oscarblancarteblog.com/wp-content/uploads/2014/07/noproxy.png"><img loading="lazy" class="wp-image-279 size-full" title="Patrón de diseño Proxy" src="http://www.oscarblancarteblog.com/wp-content/uploads/2014/07/noproxy.png" alt="Patrón de diseño Proxy" width="275" height="95" /></a><figcaption id="caption-attachment-279" class="wp-caption-text">Fig.2: La figura muestra como el cliente se comunica directamente al Business Service si pasar por un Proxy lo que le da el control absoluto sobre las operaciones que quiera realizar con este.</figcaption></figure>
<p style="text-align: justify;"><strong>Solución: </strong>En vez de lo anterior podríamos envolver la ejecución del BusinessService en un Proxy el cual antes de mandar llamar al BusinessService cheque las credenciales del usuario y posteriormente invoque al BusinessService, Pero no solo eso podemos hacer, También podría mandar llamar a otro servicio de Auditoria una vez que el servicio de negocio fue invocado, esto es posible por que un proxy puede hacer algo antes y después de realizar la tarea que realmente el cliente quiere realizar, sin embargo el cliente no es consciente de lo que pasa antes y después de la invocación del BusinessService.</p>
<figure id="attachment_276" aria-describedby="caption-attachment-276" style="width: 540px" class="wp-caption aligncenter"><a href="http://www.oscarblancarteblog.com/wp-content/uploads/2014/07/securityproxy.png"><img loading="lazy" class="wp-image-276" title="Patrón de diseño Proxy" src="http://www.oscarblancarteblog.com/wp-content/uploads/2014/07/securityproxy.png" alt="Servicio de seguridad con el patrón de diseño Proxy" width="540" height="232" /></a><figcaption id="caption-attachment-276" class="wp-caption-text">Fig.3: En la figura podemos apreciar que el usuario realiza un acción sobre el proxy el cual puede realizar una tarea antes y después de realizar la tarea que el cliente, En este escenario se realiza una invocación al servicio de seguridad para validar las credenciales, después realiza la consulta al BusinessService  y por ultimo realiza la llamada a un servicio de auditoria para registrar la acción que acaba de hacer el usuario, El cliente no es consciente de la Pre-Action y la Post-Action pues el Proxy encapsula este comportamiento.</figcaption></figure>
<pre><strong>Proxy de invocación remota.</strong></pre>
<p style="text-align: justify;">Otro de los escenarios para los cuales se utilizan los proxy son para enmascarar la invocación de métodos remotos.</p>
<p style="text-align: justify;">El procedimiento para realizar esto es creando una interfaz que contenga las operaciones que queremos invocar de forma remota, Luego creamos una un Proxy a través de la interfaz la cual delegue el comportamiento a una clase que se encargue de realizar la comunicación con el servicio remoto y al final regrese lo resultados al cliente de nuestra aplicación, De esta forma la invocación remota es invisible y no se dará cuenta de que detrás del proxy existe una conexión con algún servicio remoto.</p>
<figure id="attachment_282" aria-describedby="caption-attachment-282" style="width: 512px" class="wp-caption aligncenter"><a href="http://www.oscarblancarteblog.com/wp-content/uploads/2014/07/remoteproxy.png"><img loading="lazy" class="wp-image-282" title="Remote Proxy" src="http://www.oscarblancarteblog.com/wp-content/uploads/2014/07/remoteproxy.png" alt="Remote Proxy" width="512" height="222" /></a><figcaption id="caption-attachment-282" class="wp-caption-text">Fig.4: La figura muestra como desde una aplicación podemos realizar una invocación a un servicio remoto a través de un Proxy, El Proxy delega a otra clase la lógica para la comunicación con el servicio remoto, de esta forma el cliente no se preocupa por como el servicio esta implementado si no por los parámetros que le tiene que inviar al Proxy para que funcione.</figcaption></figure>
<p>&nbsp;</p>
<p>&nbsp;</p>
<figure id="attachment_2333" aria-describedby="caption-attachment-2333" style="width: 648px" class="wp-caption aligncenter"><a href="https://reactiveprogramming.io/books/design-patterns/es" target="_blank" rel="noopener"><img loading="lazy" class="wp-image-2333 size-large" src="https://www.oscarblancarteblog.com/wp-content/uploads/2018/09/patrones-diseño-banner-1024x392.jpg" alt="Introducción a los patrones de diseño" width="648" height="248" /></a><figcaption id="caption-attachment-2333" class="wp-caption-text">¿Quieres aprender más patrones como este? te invito a que veas mi nuevo libro</figcaption></figure>
<p>&nbsp;</p>
<p style="text-align: justify;"><b>Conclusión</b><strong>:</strong></p>
<p style="text-align: justify;">En resumen podríamos decir que un <strong>Proxy</strong> es un intermediario que puede interceptar una petición y hacer algo con ella antes y después de ejecutar la operación deseada por el usuario e incluso podemos cancelar la invocación como en el caso que no tenga los privilegios.</p>
<p style="text-align: justify;">Es importante remarcar que los Proxy tiene muchas utilidades y estas que planteo a qui solo son alguno de la multitud de utilidades que tiene. Otro escenario para el cual se utilizan es para el Debug de aplicaciones de lo cual hablare en otra entrada.</p>
<p style="text-align: justify;">Ya está a la venta mi nuevo libro &#8220;<a href="http://www.oscarblancarteblog.com/libros/introduccion-los-patrones-diseno/">Introducción a los patrones de diseño</a>&#8220;, en donde expongo los 25 patrones de diseño más utilizados y explicados desde un enfoque del mundo real, con ejemplos que pueden ser aplicados en tus proyectos. Sin duda es unos de los libros más completos de patrones de diseño en español.</p>
<p>The post <a rel="nofollow" href="https://www.oscarblancarteblog.com/2014/07/29/patron-de-diseno-proxy/">Patrón de diseño &#8211; Proxy</a> appeared first on <a rel="nofollow" href="https://www.oscarblancarteblog.com">Oscar Blancarte - Software Architecture</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.oscarblancarteblog.com/2014/07/29/patron-de-diseno-proxy/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">274</post-id>	</item>
		<item>
		<title>Que es la Virtualización de Servicios</title>
		<link>https://www.oscarblancarteblog.com/2014/07/18/que-es-la-virtualizacion-de-servicios/</link>
					<comments>https://www.oscarblancarteblog.com/2014/07/18/que-es-la-virtualizacion-de-servicios/#comments</comments>
		
		<dc:creator><![CDATA[oblancarte]]></dc:creator>
		<pubDate>Fri, 18 Jul 2014 15:58:01 +0000</pubDate>
				<category><![CDATA[ESB]]></category>
		<category><![CDATA[SOA Suite]]></category>
		<category><![CDATA[enterprice service bus]]></category>
		<category><![CDATA[esb]]></category>
		<category><![CDATA[osb]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[servicio]]></category>
		<category><![CDATA[soa]]></category>
		<category><![CDATA[virtualización]]></category>
		<category><![CDATA[webservice]]></category>
		<guid isPermaLink="false">http://javamex.wordpress.com/?p=97</guid>

					<description><![CDATA[<p>Para los que ya tenemos mas experiencia en la arquitectura SOA y comprendemos perfectamente que es un Enterprise Service Bus este tema las ha de parecer muy simple pero para todos aquellos que no han tenido la oportunidad de adentrarse a los obscuros territorios de lo que es SOA les tengo buenas noticias pues en [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://www.oscarblancarteblog.com/2014/07/18/que-es-la-virtualizacion-de-servicios/">Que es la Virtualización de Servicios</a> appeared first on <a rel="nofollow" href="https://www.oscarblancarteblog.com">Oscar Blancarte - Software Architecture</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;">Para los que ya tenemos mas experiencia en la arquitectura SOA y comprendemos perfectamente que es un Enterprise Service Bus este tema las ha de parecer muy simple pero para todos aquellos que no han tenido la oportunidad de adentrarse a los obscuros territorios de lo que es SOA les tengo buenas noticias pues en esta Entrada hablaremos que es la virtualización.</p>
<p style="text-align: justify;">Para empezar virtualizar viene de la palabra virtual como cuando hablamos de maquinas virtuales, pues esto es algo parecido pues un servicio virtual no es mas que una mascara que lo único que hace es <span id="more-97"></span>exponer un WebService que por dentro hace la llamada a otro u otros WebServices para dar una funcionalidad nuevo o extendida.</p>
<p style="text-align: justify;"><em>Imaginemos que estamos desarrollando una aplicación móvil para una empresa la cual dentro de sus sistemas ya tiene un conjunto de webservices desarrollados para las principales tareas que realiza, sin embargo hasta el momento no tiene ningún desarrollo para móviles y le preocupa la seguridad ya que al exponer sus webservices tema que alguna persona mal intencionada pueda entrar y hacer algún mal.</em></p>
<p style="text-align: justify;"><em>Por lo que desarrollo un WebService para que el usuario se Autentifique cuando entre a la aplicación, sin embargo eso no es todo, también requiere que cuando el usuario realice alguna acción se validen sus privilegios para denegar cualquier acción no permita para ese usuario.</em></p>
<p style="text-align: justify;"><em>Otro punto importante es que el cliente quiere que cuando una persona intente hacer una acción no autorizada o falle en el Login se registre tal acción para poder auditar y detectar situaciones sospechosas.</em></p>
<p style="text-align: justify;">El cliente nos brinda los siguientes WebServices con los que debemos diseñar nuestra aplicación:</p>
<pre style="text-align: justify;"><strong>SecurityService  </strong><em>//WebServices que expone el sistema de seguridad centralizado.</em></pre>
<ul style="text-align: justify;">
<li><strong>login(usuario, password) : boolean: </strong>Operación que autentifica al usuario y nos dice indica si el login fue exitoso o no.</li>
<li><strong>autorization(usuario,password, accion ):boolean: </strong>Operación que nos indica si un usuario tiene privilegios para realizar una acción determinada, El parámetro acción representa el ID de la operación a ejecutar.</li>
</ul>
<pre><strong>AuditService </strong>//WebService que expone el sistema de Auditoria Informática</pre>
<ul style="text-align: justify;">
<li><strong>intentoAccion(usuario, accion, DateTime, autorizationResult): void: </strong>Operación que registra cuando una acción es solicitada</li>
</ul>
<pre><strong>ClienteService </strong>//WebService para consultar los datos del cliente</pre>
<ul style="text-align: justify;">
<li><strong>consultaDatosPersonales(idCliente):</strong> <strong>Cliente: </strong>Operación que regresa los datos básicos del cliente como nombre,apellido, sexo, CURP, etc.</li>
<li><strong> consultaSaldo(idCliente): double: </strong>Operación que regresa el saldo del cliente</li>
</ul>
<h1 style="text-align: justify;"><strong>Desarrollando la solución</strong></h1>
<p style="text-align: justify;">Imaginemos que la aplicación lo único que hace es consultar los datos del cliente y su saldo sin embargo no todos los usuarios pueden saber el saldo de un cliente por lo que el servicio se separa y se consulta de forma independiente.</p>
<p style="text-align: justify;">Lo primero que se nos ocurre es hacer una pantalla de login y autenticarnos con el servicio de login pasandole el nombre de usuario y password. Si el login se realiza correctamente entramos a la aplicación, sin embargo el cliente quiere que cuando un login falle o se de correctamente notifiquemos el evento al departamento de Auditoria mediante la operación de <strong>intentoAccion</strong> y pesarla el ID de la operación Login y la fecha y hora del intento.</p>
<p style="text-align: justify;">Esto desde luego nos implicaría dos llamadas a Webservices, uno para Login y otro para Auditoria:</p>
<p style="text-align: justify;"><a href="http://www.oscarblancarteblog.com/wp-content/uploads/2014/07/loginnovirtual.png"><img loading="lazy" class="aligncenter  wp-image-101" src="http://www.oscarblancarteblog.com/wp-content/uploads/2014/07/loginnovirtual.png" alt="LoginNoVirtual" width="555" height="347" /></a></p>
<p style="text-align: justify;"> Fig.1: Muestra la comunicación con los dos webservices de forma separada.</p>
<p style="text-align: justify;">Para la pantalla de datos del cliente tendríamos que implementar nuevamente un sistema de llamadas donde primero verificaríamos si tenemos privilegios para leer los datos del cliente con el webservices de autorizacion, de darse los privilegios entonces se consulta el Webservices de <strong>consultaDatosPerosnales</strong>, seguido de consultar los privilegios para autorizar al usuario para leer el saldo del cliente y consultar el servicio de  <strong>consultaSaldo. </strong>Nuevamente si alguna autorización falla es requerido notificar al departamento de Auditoria mediante el Webservices <strong>intentoAccion. </strong>Este esquema quedaría algo a sí.</p>
<p style="text-align: justify;"> <a href="http://www.oscarblancarteblog.com/wp-content/uploads/2014/07/consultaclientnovirtual.png"><img loading="lazy" class="aligncenter  wp-image-103" src="http://www.oscarblancarteblog.com/wp-content/uploads/2014/07/consultaclientnovirtual.png" alt="ConsultaClientNoVirtual" width="555" height="397" /></a></p>
<p style="text-align: justify;"> Fig.2: Fugura que muestra el número de acción a realizar solo para completar la consulta de los datos del cliente y saldo.</p>
<p style="text-align: justify;"><strong>Un esquema con Virtualización:</strong></p>
<p style="text-align: justify;">Una vez que examinamos como tendríamos que desarrollar una aplicación sin virtualización podemos empezar a examinar el esquema con virtualización.</p>
<p style="text-align: justify;">La primera acción que deberíamos hacer es crear un proxy que cumpla casi exactamente con el contrato(WSDL) que sirve como punto de entrada a nuestra aplicación pero que ademas de esto le estaríamos pasando los datos de autenticación y autorización en el Header del mensaje SOAP de tal forma que el proxy tomara el header lo enviara al servicio de <strong>autorization </strong>en caso de autorización continuara con la llamada al servicio de <strong>consultaDatosPerosnales </strong>y regresara el resultado.Pero en caso de haber fallado la autorización llamaría al servicio de Auditoria y regresaría un Throw para indicar que el servicio ha fallado por seguridad.</p>
<p style="text-align: justify;">La aplicación se viera de esta manera para el escenario de consulta de datos del suscriptor:</p>
<p style="text-align: justify;"><a href="http://www.oscarblancarteblog.com/wp-content/uploads/2014/07/consultaclientevirtual.png"><img loading="lazy" class="aligncenter  wp-image-104" src="http://www.oscarblancarteblog.com/wp-content/uploads/2014/07/consultaclientevirtual.png" alt="ConsultaClienteVirtual" width="568" height="427" /></a></p>
<p style="text-align: justify;">Fig.3: Escenario con virtualización</p>
<p style="text-align: justify;">Si nos damos cuenta en este escenario ya solo tenemos una invocación a un único servicio el cual se encarga de realizar las operaciones previas a la consulta de los datos del cliente y también notificar al departamento de Auditoria en caso de haber fallado la autorización.</p>
<p style="text-align: justify;">Este enfoque tiene las siguientes ventajas:</p>
<ul>
<li>Se reduce el numero de llamadas al servidor</li>
<li>Aumentan los tiempos de respuesta</li>
<li>Las operaciones se realizan desde la misma infraestructura del cliente por lo que la seguridad es mucho mejor.</li>
<li>El implementar un Enterprice Service Bus nos da la cualidad de poder medir el performance (KPI o Key Performance Indicator).</li>
<li>Definir los acuerdos de nivel de servicio o SLA.</li>
</ul>
<p>The post <a rel="nofollow" href="https://www.oscarblancarteblog.com/2014/07/18/que-es-la-virtualizacion-de-servicios/">Que es la Virtualización de Servicios</a> appeared first on <a rel="nofollow" href="https://www.oscarblancarteblog.com">Oscar Blancarte - Software Architecture</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.oscarblancarteblog.com/2014/07/18/que-es-la-virtualizacion-de-servicios/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">97</post-id>	</item>
	</channel>
</rss>
