Construyendo una AOS con PHP: Patrones de Diseño de Servicios Web en PHP

5,418 views

Published on

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,418
On SlideShare
0
From Embeds
0
Number of Embeds
85
Actions
Shares
0
Downloads
224
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Construyendo una AOS con PHP: Patrones de Diseño de Servicios Web en PHP

  1. 1. Construyendo una AOS con PHP: Patrones de Diseño de Servicios Web en PHP Jesús M. Castagnetto, Ph.D. Latinoware 2008 30 de Octubre – 1 de Noviembre, 2008 Parque Tecnológico Itaipu (PTI) Foz do Iguaçu PR/Brasil Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  2. 2. Agenda ● ¿Qué es una Arquitectura Orientada a Servicios (AOS)? ● ¿Qué es un Patrón de Diseño? ● Uso de Servicios Web en una AOS ● Ejemplos de patrones usando PHP ● Recomendaciones Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  3. 3. Arquitectura Orientada a Servicios (AOS) ● Un diseño arquitectural para el desarrollo e integración de sistemas. ● La funcionalidad del sistema se organiza en función a los procesos de negocios. ● Los procesos se implementan como servicios interoperables, usando interfaces y protocolos homogéneos. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  4. 4. Características de una AOS ● Acoplamiento débil/laxo entre componentes. ● “Contratos de servicio” para definir interfaces. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  5. 5. Características de una AOS ● Intermediarios para el reuso de sistemas existentes. ● Composición de servicios mediante la coordinación de acciones. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  6. 6. Características de una AOS ● Los servicios tienen lógica autónoma. ● La descripción de cada servicio se puede descubrir, simplificando su uso. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  7. 7. Características de una AOS ● Se pueden usar entornos y componentes heterogéneos, siempre que se cumplan los estándares para la comunicación entre servicios. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  8. 8. ... Y algo muy importante El usar una AOS no implica el uso de Servicios Web Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  9. 9. Patrones de Diseño “... Cada patrón describe un problema que ocurre una y otra vez en nuesto entorno, y luego describe el meollo de la solución al problema, de tal manera que puedas usar esta solución millones de veces, sin tener que hacerlo de forma exactamente igual dos veces ...” Christopher Alexander Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  10. 10. Patrones de Diseño ● Son soluciones generales y reusables a problemas comunes. ● Se hacen evidente en la arquitectura, al construir edificios basados en principios clave. ● En software, la idea se traduce en soluciones pragmáticas, que nos ayudan a hacer frente a problemas recurrentes. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  11. 11. Patrones de Diseño ● Escribir programas, es una mezcla de teoría, técnica y arte, y los patrones de diseño surgen de la experiencia. ● Las comunidades de programadores, han descrito decenas de patrones básicos y derivados. ● Aprender a usar patrones de diseño efectivamente, toma tiempo. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  12. 12. Patrones y Anti-patrones ● Los patrones de diseño, nos orientan hacia que debemos hacer para resolver un problema. ● Los anti-patrones nos alertan acerca de qué evitar hacer, y nos enseñan que en ocasiones, una aparente solución es un problema más grave disfrazado. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  13. 13. Servicios Web “... (U)n sistema de software diseñado para permitir la interacción interoperable de máquina-a-máquina en una red. Tiene una interfaz descrita en formato procesable-por-máquina ... Otros sistemas interaccionan con el Servicio Web de la manera prescrita en su descripción ... usando HTTP con serialización XML ...” Definición del W3C Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  14. 14. Protocolos de Servicios Web SOAP: ● Puede usar múltiples medios de transporte: SMTP, HTTP/HTTPS, etc. ● Usa XML como formato del mensaje. ● Puede combinar múltiples estándares que abarcan otras facetas: seguridad, confiabilidad, transacciones, etc. ● Es flexible, extensible, y complejo. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  15. 15. Protocolos de Servicios Web XML-RPC: ● Usa HTTP como transporte (no es común que use HTTPS) ● Usa XML como formato del mensaje, y describe formas de codificar datos. ● Es una implementación en XML de una llamada remota a procedimiento. ● Es simple, pero inflexible. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  16. 16. Protocolos de Servicios Web REST: ● Es más un estilo de arquitectura de sistemas que un protocolo per se. ● Es la Web, con recursos abstraídos en URLs, y acciones en operaciones de HTTP (GET, POST, PUT, DELETE) ● Es escalable, simple, y robusto, y es algo que ya sabemos cómo hacer. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  17. 17. REST y AOS ● En principio una AOS puede ser (y ha sido) implementada usando diferentes tecnologías. ● Los Servicios Web con todas sus ventajas son una excelente forma de implementar una AOS. ● Y, por supuesto, REST es la forma de hacerlo bien y en forma simple. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  18. 18. Anatomía de un patrón de diseño Generalmente se describen usando: ● Un nombre descriptivo. ● Una descripción corta que incluye la intención (el objetivo del mismo y la razón de su uso) y su aplicabilidad (el contexto de uso). ● Las consecuencias de su uso. ● Descripción de cómo implementarlo. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  19. 19. Patrones a discutir ● Búsqueda asincrónica (Asynchronous query) ● Servicios de fachada (Facade services) ● Envoltura para lo anticuado (Legacy wrapper) Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  20. 20. Búsqueda asincrónica Intención: ● Permitir que se puedan realizar búsquedas o procesos de larga duración, sin impactar en forma negativa en el funcionamiento de quienes usen el servicio. ● Tratar de reducir el problema de agotamiento de tiempo y bloqueo de recursos. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  21. 21. Búsqueda asincrónica Consecuencias: ● No hay un tiempo precisamente determinado para obtener la respuesta. ● El cliente del servicio tiene que implementar la lógica de reintentar obtener la respuesta, hasta que ésta se encuentre disponible. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  22. 22. Búsqueda asincrónica Implementación: ● El cliente envía un pedido de búsqueda al proveedor del servicio, el cual lo pone en una cola de proceso, y retorna un ID del pedido. ● Un proceso secundario ejecuta el pedido en cola, y al terminar, pone la respuesta en otra cola de mensajes. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  23. 23. Búsqueda asincrónica Implementación: (cont.) ● El cliente le pide la respuesta al servicio. Si el servicio no la encuentra en la cola, le dice al cliente que regrese luego, de otro modo la saca de la cola de mensajes, y la entrega al cliente. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  24. 24. Búsqueda asincrónica (Ejemplo) ● Vamos a generar un reporte de notas para alumnos y cursos. ● Usaremos REST para definir las URLs de búsqueda: ● http://[dominio]/notas/curso/[CURSOID] ● http://[dominio]/notas/cursos/[CURSOLISTA] ● http://[dominio]/notas/alumno/[ALUMID] ● http://[dominio]/notas/alumnos/[ALUMLISTA] Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  25. 25. Búsqueda asincrónica (Ejemplo) ● Y definiremos: ● CURSOID: Identificador del curso, ej. Q0415 ● CURSOLISTA: Lista de cursos, ej. M0101,B0203 ● ALUMNID: Identificador del alumno, ej. 65782 ● ALUMNOLISTA: Lista de alumnos, ej. 34291,78239,12033 Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  26. 26. Búsqueda asincrónica (Ejemplo) ● La estructura del URL nos da el tipo general de acción, los límites de la búsqueda y sus parámetros: /notas/alumno/05644 ● De esta manera el URL es único y explícito. ● Para nuestro ejemplo asumimos que usaremos sólo HTTP GET. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  27. 27. Búsqueda asincrónica (Ejemplo) ● Al llamar una URL, el cliente recibe un identificador de búsqueda en XML: ➔ http://.../notas/alumno/30462 <notas> <id>12345678901234567890<id> <query>/alumno/30462</query> <result/> </notas> Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  28. 28. Búsqueda asincrónica (Ejemplo) ● El servicio lo envía a ser procesado en una cola, y de ahí en adelante, el cliente se encargará de pedir el resultado usando el URL apropiado. ● Hay dos opciones de diseño: ● Un servicio de resultados general, que sólo use el ID para obtener la información. ● Uno específico al servicio inicial, usando una variante del URL original. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  29. 29. Búsqueda asincrónica (Ejemplo) Usando un procesador genérico: ➔ http://.../resultados/[RESULTID] ● Nos permite unificar resultados de varios servicios, y no multiplicar innecesariamente los recursos. ● Pero, perdemos el contexto del servicio original, lo cual puede ser confuso para los usuarios. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  30. 30. Búsqueda asincrónica (Ejemplo) Usando una variante del URL original: ➔ http://.../notas/resultado/[RESULTID] ● Nos permite conservar el contexto de la interacción, añadiendo sólo una nueva acción dentro del servicio. ● Podemos evitar duplicación de código delegando responsabilidades a un servicio interno. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  31. 31. Búsqueda asincrónica (Ejemplo) El código que implemente el patrón no es complicado, se necesita: ● Código que implemente la recepción de búsquedas, y puesta en cola. ● Código para obtener la búsqueda de la cola, ejecutarla, y luego poner los resultados en cola. ● Código para obtener los resultados. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  32. 32. Servicios de fachada Intención ● Permitir un acceso simplificado a un sistema con una interfaz compleja. ● Combinar en una, varias operaciones relacionadas en la API existente. ● Reducir el número de parámetros. ● Aislar cambios del sistema interno, y desacoplar el uso externo. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  33. 33. Servicios de fachada Consecuencias ● Si bien simplifica el uso de una interfaz, puede llevar a complejidad en la lógica de implementación. ● Puede haber más de una forma de combinar interfaces, y no todas pueden ser óptimas. ● Impacta el rendimiento del servicio. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  34. 34. Servicios de fachada Implementación ● Una capa que implementa el API del servicio que será visto por los clientes externos. ● Código específico que use las librerías o sistemas internos (con todas sus condiciones) para que se pueda cumplir la API simplificada del servicio. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  35. 35. Envoltura para lo anticuado Intención ● Permitir el acceso a un sistema anticuado (legacy), a través de una tecnología o protocolo nuevo. ● Integrar sistemas heterogéneos existentes, dentro de una nueva arquitectura, sin necesidad de rehacer la funcionalidad. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  36. 36. Envoltura para lo anticuado Consecuencias ● La “envoltura” tiene que encargarse de posibles trasformaciones de datos, para que el sistema anticuado pueda funcionar correctamente. ● Aumenta la vida útil del sistema anticuado, pero eso puede convertirse en un defecto grave en la evolución futura de la arquitectura. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  37. 37. Envoltura para lo anticuado Implementación ● Una capa que exponga la API del sistema anticuado usando REST. ● Rutinas de transformación de datos de entrada y salida, para que funcionen con el sistema anticuado. ● Código para manejar los errores originados en el sistema anticuado. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  38. 38. ¿Cómo hacemos el código? ● Podemos hacerlo “a mano”, implementando mapeos apropiados, y lógica de redirección. O ● Podemos usar librerías que hagan el manejo rutinario y concentrarnos en la funcionalidad a proveer. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  39. 39. Tonic (tonic.sf.net) Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  40. 40. Konstrukt (www.konstrukt.dk) Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  41. 41. WSO2 WSF/PHP (wso2.org/projects/wsf/php) Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  42. 42. WSO2 WSF/PHP ● Un proyecto de WSO2: herramientas y librerías para Servicios Web. ● Soporte para SOAP y WSDL, y una serie de estándares WS-*. ● Interoperable con otras implementaciones de SOAP. ● Soporte para REST, incluyendo mapeo específico de URIs. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  43. 43. Ideas finales ● Es posible hacer una AOS simple usando REST, y diseñándola bien. ● Los patrones comunes de diseño no son tan complicados, pero su implementación sí puede serla. ● Si entendemos el uso de REST y de patrones de diseño, podemos escribirlo en PHP (o cualquier otro lenguaje de programación). Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  44. 44. Más información: Patrones ● Portland Pattern Repository: http://c2.com/cgi/wiki? PortlandPatternRepository ➔ Lean también el resto del sitio de Ward Cunninhgam (http://c2.com/) ● “Design Patterns: Elements of Reusable Object- Oriented Software” por Erich Gamma, Richard Helm, Ralph Johnson, y John Vlissides (ISBN: 0-201-63361-2) ● “The Timeless Way of Building” por Christopher Alexander (ISBN: 0195024028) Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  45. 45. Más información: PHP, Servicios Web y AOS ● Do REST in PHP - PHP RESTful Data Services (http://www.dimuthu.org/blog/2008/09/18/do- rest-in-php-php-restful-data-services/) ● Why PHP Users should be Serious about SOA? (http://phpwebservices.blogspot.com/2008/01/w hy-php-uses-should-be-serious-about.html) ● Open Service Oriented Architecture (http://www.osoa.org/display/PHP/SOA+PHP+Ho mepage) ● Using PHP's SDO and SCA extensions (http://www.ibm.com/developerworks/web/librar y/ws-soa-scasdo/) Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  46. 46. Más información: SOA, REST ● “RESTful Web Services” por Leonard Richardson y Sam Ruby (ISBN: 0-596-52926-0) ● “Basic SOA using REST” (http://www.webreference.com/programming/ba sic_soa/) ● SOA Pattern Catalog (http://www.soaprpc.com/patterns/soa_pattern_ catalog.html) ● SOA Patterns (http://www.soapatterns.org/) Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  47. 47. ¡Gracias/Obrigado! A los organizadores del evento por la invitación y el entusiasmo. A todos ustedes por soportar mi “bla, bla, bla...”, sin dormirse. Jesús M. Castagnetto jmcastagnetto@php.net jesus@upch.edu.pe Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia

×