viernes, 24 de junio de 2011

Web Services En PHP

Hoy veremos una parte fundamental en el area de programacion y son los famosos servicios web de los que tanto mencionan en internet.

Primero es lo primero tenemos que saber y entender lo basico de los servicios web:

Pero que es un Servicio Web ??????

Web Service Es un sistema software diseñado para soportar la interoperabilidad máquina - máquina a través de una red. Este tiene una interfaz descripta en un formato que puede ser procesado por una máquina (específicamente WSDL,que veremos más adelante). Otros sistemas interactúan con el Web service utilizando mensajes SOAP los cuales se encuentran establecidos previamente.

En nuestro caso seria un archivo PHP en el cual se almacenen una serie de metodos los cuales tengan un objetivo especifico y general para hacerlo web service.

Tambien hay otros conceptos los cuales hay que ponerles atencion:

XML es un Lenguaje de Etiquetado Extensible muy simple, pero estricto que juega un papel fundamental en el intercambio de una gran variedad de datos. Es un lenguaje muy similar a HTML pero su función principal es describir datos y no mostrarlos como es el caso de HTML. XML es un formato que permite la lectura de datos a través de diferentes aplicaciones.

SOAP (siglas de Simple Object Access Protocol) es un protocolo estándar que define cómo dos objetos en diferentes procesos pueden comunicarse por medio de intercambio de datos XML.


UDDI es uno de estándares básicos de los servicios web. Está diseñado para ser interrogado por mensajes SOAP y proveer acceso documentos de WSDL (Web Services Description Language), en los que se describen los requisitos del protocolo y los formatos del mensaje solicitado para interactuar con los servicios Web del catálogo de registros.

Ventajas de los servicios web :
  • Aportan interoperabilidad entre aplicaciones de software independientemente de sus propiedades o de las plataformas sobre las que se instalen.
  • Los servicios Web fomentan los estándares y protocolos basados en texto, que hacen más fácil acceder a su contenido y entender su funcionamiento.
  • Permiten que servicios y software de diferentes compañías ubicadas en diferentes lugares geográficos puedan ser combinados fácilmente para proveer servicios integrados.
  • Basado en estandares

Desventajas de los Web Services:
  • Al apoyarse en HTTP, pueden esquivar medidas de seguridad basadas en firewall cuyas reglas tratan de bloquear
  • la comunicación entre programas.
  • Existe poca información de servicios web para algunos lenguajes de programación
  • No es la solucion a todos los problemas
  • Relativamente nuevo, algunos estandares no definidos
  • Dependencia de la disponibilidad de servidores y comunicaciones
Como lo trabajaremos en PHP usaremos unas librerias que hagan el trabajo de los protocolos y los mensajes , de eso no nos preocupemos aunque es bueno darle un vistazo a esas librerias .

¿Que es NuSOAP?

NuSOAP es un kit de herramientas (ToolKit) para desarrollar Web Services bajo el lenguaje PHP. Está compuesto por una serie de clases que nos harán mucho más fácil el desarrollo de Web Services. Provee soporte para el desarrollo de clientes (aquellos que consumen los Web Services) y de servidores (aquellos que los proveen). NuSOAP está basado en SOAP 1.1, WSDL 1.1 y HTTP 1.0/1.1

no es el único, existen otros, pero es uno de los que están en una fase de desarrollo mucho más avanzada. Sin ir más lejos, PHP a partir de su versión 5 comienza a dar soporte para SOAP, pero aún está en fase de pruebas.

¿Por qué NuSOAP y no otro?
  • Está en una fase madura de desarrollo.
  • No necesita módulos adicionales.
  • Es muy fácil su instalación y uso
¿Cómo instalo NuSOAP?

La instalación es bastante sencilla, sólo basta ir a la pagina en sourceforge de NuSOAP
y bajar el archivo comprimido (es un .zip).

Lo descomprimimos en un directorio de nuestro servidor web (como puede ser /lib que es el directorio por default o ponerle el nombre que queramos), y listo, ya podemos hacer uso de
NuSOAP.

comenten no sean bayuncos...

jueves, 23 de junio de 2011

Creacion de Metodos para Clase Conexion PHP

Hoy veremos como crear metodos con la clase conexion siempre usando el estilo orientado a objetos que hemos ido desarrollando .

Nuestro proyecto tendra una estructura como la que vemos en la imagen con una capa de persistencia donde haremos todos los procedimientos que tengan que ver con la base de datos,dentro de la capa de persistencia esta el action que es donde estan los archivos de todos los procedimientos del sistema , conexion es donde estan las clases de conexion , luego van las entidades que nos ayudaran al traer y devolver informacion de nuestras entidades en la base de datos no son mas que clases con getter y setter, luego esta el SQLClass que es la encargada de construir las consultas sql .

Ahora veremos la parte del action :

Como aplicaremos conceptos orientados a objetos entonces necesitaremos una clase abstracta en el action que nos retorne la conexion con un metodo y asi solo heredar esa caracteristica que los hace familia a las demas clases .

Pero primero como todo buen sistema tenemos que guardar lo que sucede en cada momento importante, he creado una clase historial la cual hace lo que su nombre dice guarda el historial.

Pero antes tenemos que ver la clase que construira el SQL para mayor comodidad y poner en practica la teoria orientada a objetos.

Esta clase contiene todas las funciones que retornaran un sql , si en dado caso necesitamos parametros solo los indicamos y retornamos el string concatenado .

La clase historial heredara de la abstracta para obtener la conexion a la base de datos , luego creamos un metodo el cual pedira un Objeto usuario que es la clase entidad de usuario, y un string de accion que es lo que se esta realizando a la hora de guardar el historial.

Antes de ver el action veremos como esta formado la clase entidad , no es mas que una clase que contendra getter y setter de los atributos de esa entidad , y esa entidad la tomaremos como una tabla de nuestra base de datos.

Esto nos servira para traer la informacion y devolverla de una manera facil y exacta de lo que queremos ocupar , esto nos evita el estar declarando propiedad por propiedad en nuestro metodo .

Bien esta es la clase que contendra toda la logica de la aplicacion primero vemos que hereda de la abstracta y luego tenemos un metodo publico que sirve para logearse vemos que tenemos como parametro a la clase entidad haciendo uso de type hinting que significa tipos sugeridos , luego llamamos a la conexion con self que sirve para traer metodos de la misma clase , antes de eso instanciamos la clase sql para enviarle los valores a la funcion y que nos retorne la sql con esos valores.

Luego ejecutamos la consulta por medio de la conexion y lo recorremos para ver si trajo resultados o no ,si trajo resultados pues simplemente llama a otro metodo privado para que cree la sesion y guarde el historial.

El otro metodo sirve para cerrar la sesion.

Ahora como ejecutamos esto en una aplicacion , solo veamos el codigo que esta aca abajo que es un fragmento del login.

Hemos visto como implementar las caracteristicas de la POO primero el principio de ocultacion , hemos ocultado muchas funciones para que la otra funcion no tenga que preocuparle caracteristicas mas profundas solo se hace una idea general del objeto , Generalizacion, y encapsulamiento, ciertas funciones son privadas y solo se pueden accesar a travez de la clase misma , ahora con la abstraccion lo que hemos hecho es separar los elementos singularmente para hacer asi mucho mejor su compresion ,La abstracción nos permite dividir nuestro programa en distintos objetos que se agrupan para formar cosas más complejas, cumplimos con una vieja regla de guerra: Divide y Vencerás. Es decir, lo que hacemos es seccionar nuestro código en grupos de código más pequeño que, al unirlos, hacen el trabajo.

Y el ultimo pero no menos importante que es la herencia ,la herencia nos permite, entre otras cosas, evitar tener que escribir el mismo código una y otra vez, puesto que al definir que una categoría (que en programación llamaremos clase) pertenece a otra, automáticamente estamos atribuyéndoles las características generales de la primera, sin tener que definirlas de nuevo.

Tambien usamos otros elementos que son caracteristica como interfaces metodos sobrecargados metodos asesores.

Comenten no sean bayuncos

Descargar archivo Completo

miércoles, 1 de junio de 2011

Crear una Aplicacion Multilenguaje en PHP

Bien hoy veremos como crear una aplicacion multilenguaje usando php claro que se podra aplicar en otros lenguajes de programacion espero que agarren la idea de como funciona y poder aplicarla a sus proyectos.

Hoy en dia vemos muchas web que tienen muchos idiomas tambien programas que los podemos cambiar entre idiomas , pues bien como hacen esto , pues no hacen una web en cada idioma ni tampoco hacen otro programa para la version en ingles , todo esto lo podemos hacer con varios XML en donde tengamos todo lo relacionado a nuestro sistema por ejemplo mensajes de error , mensajes de confirmacion, algunas etiquetas , algunos titulos que tengamos que usar todo iria dentro de un xml.

bien luego de tener nuestros xml para español para ingles para frances solo basta hacer una estructura por la cual sea reusable y bastante util para general estas configuraciones.

Luego de tener nuestros archivos xml en todos los idiomas disponibles en la aplicacion solo basta usar la clase de leer xml generica para accesar a todos los nodos padres y traer todos sus nodos hijos en un arreglo.

Luego haremos otro XML que contenga la configuracion existente tales como que idioma estamos usando y el archivo de localizacion mas un identificador para saber que archivo xml ir a traer.

luego tenemos una clase que lee esa configuracion y nos indica que archivo xml de lenguaje tenemos que leer y traer el modulo o pantalla que necesitemos independiente del lenguaje .

mas adelante tenemos un archivo que manda a traer todo el lenguaje de un modulo del xml para luego meterlo en una matriz y devolver los datos en otra matriz con los datos cargados para solo hacer una simple traida de datos de un array con el nombre a que se refiere.

Primero veamos la estructura de como esta formado :

Este es el diagrama que representa el modulo de configuracion de lenguaje ahora veamos el codigo de cada clase .

Este archivo xml es el que guarda la configuracion del lenguaje a la hora de instala el sistema solo basta generarlo con php y sobrescribirlo cuando el usuario lo requiera. Lo unico que utilizaremos aca por el momento sera el identicador que el siguiente archivo lo leera y ira a traer ese archivo xml veamos esa clase.

Primero leemos el xml de configuracion y extraemos el identificador y lo comparamos con los posibles predefinidos en el sistema y retornamos un nombre de archivo que contiene todo el lenguaje de nuestra aplicacion separada por modulos veamos ese archivo xml.

Aca tenemos que usar estandares para no confundirnos y tampoco hacer un desorden en este archivo puedes hacer tus estandares . o usar los mios msg son mensajes , et son etiquetas , bt son botones .

Bien pero como es multilenguaje tenemos que crear todos los archivos posibles de lenguaje que esten disponibles dentro de la aplicacion.

Ahora veamos el archivo que manda a llamar todos los mensajes o etiquetas o valores de botones que necesitemos para un modulo .


Aca tenemos que especificar todas las etiquetas que hemos definido por modulo y esto nos regresara una matriz de objetos en cual es asociativo no necesitamos identificarlo con indices solo con el nombre de la etiqueta.

Ahora veamos el archivo que tendria que estar fuera de todo el modulo de lenguaje que sirve para solo llamarlo y que nos devuelva el array del modulo.

Ya hecha esta clase solo basta con llamarlo y donde necesitemos los mensajes del idioma solo hacemos esto:

solo basta con llamarlo asi .

Mas adelante veremos como usar la clase conexion desarrollando metodos los cuales tendran una estructura diferente que haremo uso de la ocultacion de la programacion orientada a objetos y lo veremos aplicado a un login.

comenten no sean bayuncos...