martes, septiembre 09, 2014

Demo de servicio web consumidor y emisor con PHP

Demostracion de 6 diferentes servicios web con PHP y SOAP.

Introduccion

En este arcticulo se demuestra de una forma muy simplificada, como trabajan los diferentes servicios web, esta principalmente orientado a principiantes.
  • El fuente contiene 6 diferentes servicios web consumidores o clientes, y 2 servicios web emisores.
  • Todos los ejemplos fueron programados en PHP 5, los mismos corren sin problemas en Windows o Linux.
  • Algunos ejemplos requieren enviar información mediante GET y otros mediante la utilización de POST.
  • Algunos ejemplos envian peticiones via URL y otros mediante SOAP.
  • El codigo no utiliza libreria PHP, nuestra intención es mostrar como se construye y envia información por medio de HTTP.
  • Adicionalmente este articulo nos indica como un  XML responde y como utilizar el XPath.
  • Los ejemplos estan basados en la reutilizacion de clases de servicios web clientes o consumidores
  • La intencion de este codigo es indicar la parate basica de los servicios web, no cubre topicos complejos de WSDL.
  • Si nunca utilizaron PHP, esto les puede servir como un utotial sencillo para poder ejecutar y probar en ambiente Windows.
Despues de leer este articulo y estudiado los ejemplos estaremos en capacidad de crear cualquier otro ejemplo y con las mismas caracteristicas.

Consumidor ServicioWeb de Yahoo Maps

Este ejemplo nos demuestra como enviar direccion al servicio web de Yahoo Maps el cual nos returna un dato de las coordenadas GPS (longitud y latitud).

El servicio web recepta parametros via GET en la URL.

El cliente nos demuestra como extraer información desde el XML utilizando el XPath.

Servidorr: http://local.yahooapis.com/MapsService/V1/geocode

Requerimiento:

Street = 701 First Ave, City = New York, State = NY

Respuesta:
--- RESULTADO 1 ---
Precision: address
Address:   701 1st Ave
ZIP:       11232
Latitude:  40.656335
Longitude: -74.012770

Servicio Web Cliente Weather

Con este ejemplo se demuestra de una forma sencilla como obtener un valor del temperaturas en cualesquiera de las 10,000 ciudades del mundo.
Cada ciudad representa un codigo  (ejemplo NLXX0002 for Amsterdam, Dinamarca).

Es posible seleccionar los resultados en Celsius, kilometros, kilometros/h y millibar o Fahrenheit, millas, millas/h, pulgadas.

Tambien es posible disponer del pronostico del tiempo desde una hora hasta 10 dias. Pero no incluye un ejemplo.

Este servicio web recibe parametros via GET en la URL.
En el cliente se demuestra como extraer la información desde un XML que nos retorna utilizando el XPath.

Servidor: http://xml.weather.com/weather/local

Requerimiento:

City= NLXX0002, Count of forecast days = 0, Units = European

Respuesta:
Location:     Amsterdam, Netherlands
Local Time: 5:53 PM
Sunrise:       6:40 AM
Sunset:        8:44 PM
Longitude:  4.90
Latitude:     52.35



Sky:                     Partly Cloudy
Temperature:    18°C
Feels Like:         18°C
Dew Point:         13°C
Pressure:           1010.8 mb
Humidity:           73%
Visibility:            10.0 km
Wind Speed:      21 km/h
Wind Direction: WSW
UV Index:           2



Moon:  Waxing Crescent
WeatherStation: Amsterdam, NETHERLANDS

Servicio Web Cliente de Amazon SimpleDB

Este servicio web se conecta a una base de datos de servicios web de Amazon.
Antes de seguir leyendo, por favor por un rato y olvidarse de todo lo que sabes acerca de Amazon !! Este servicio web no tiene absolutamente nada que ver con ninguno de los productos que se pueden comprar en Amazon, como libros, CDs o DVDs.

Amazon ofrece un servicio web que permite almacenar los datos de cualquier tipo en sus servidores de bases de datos web donde usted puede crear su propia base de datos privada (dominio). Así que usted puede escribir (web) las aplicaciones que almacenan los datos en la base de datos de Amazon. La ventaja es que se puede acceder a esta base de datos de todo el mundo, que puede almacenar grandes volúmenes de datos (como archivos de vídeo) y que Amazon ofrece servidores muy rápidos que están conectados directamente a una red troncal de Internet. Obviamente, este servicio no es gratuito.
En el código fuente, se encuentra la URL donde suscribirse y donde recibe su clave privada y pública que necesita. Pero si usted no se ha suscrito con la información de facturación válida (por ejemplo, MasterCard), usted seguirá recibiendo un error aunque tienes las claves válidas y aunque el primer tráfico de 1GB cada mes es gratis.

Esta muestra es interesante porque muestra cómo se valida un cliente. Para evitar que otra persona utiliza la cuenta de que usted está pagando, todas las peticiones al servidor deben contener la clave pública con la que te identificas y todos los campos de datos A continuación, debe haber iniciado sesión con su clave privada. La firma se realiza con el comando PHP
hash_hmac(). 

La siguiente accion crea una nueva base de datos "CreateDomain" con el nombre de "TestDomain".
 

El requerimiento tambien debe enviar un dato valido de UTC timestamp. Si este dato esta equivocado el servicio web es rechazado. Estos datos deben ser enviados via POST.

Servidor: https://sdb.amazonaws.com


Requerimiento:

Action                     = CreateDomain
AWSAccessKeyId = AIWMFIAEQGPKI3LFRADW
DomainName        = TestDomain
SignatureMethod = HmacSHA256
SignatureVersion = 1
Timestamp            = 2009-08-25T15:57:40.000Z
Version                   = 2009-04-15
Signature               = Xp3QbA4G4Ws41aZ7LX80i8Z4WRqL6LmsIKX9P8DLluY=

Servicio Web Cliente + Server Math calculation

Este servicio web cliente consume un consumidor para realizar operaciones matematicas.
Nos indica como escribir un servicio web emisor simple.

Consumidor y Cliente corren en localhost.

Esto se hace muy cimple: El cliente envia una operacion matematica en conjunto con dos numeros.
El emisor calcula y nos devuelve el resultado en XML.

Los datos se envian via POST.

Requerimiento:
Operation = Multiply
Value1      = 21
Value2      = 3

Respuesta:
Result      = 63

Servicio Web Cliente + Operaciones con Cadenas

Este servicio web es muy similar al anterior, pero ahora utilizaremos SOAP.
El cliente envía una cadena y el servidor ejecuta una operación sobre ella como revertirla, o lo que es mayúscula.

Servidor y cliente se ejecutan en localhost.
Para muchos servidores SOAP, es importante asignar el campo - HTTP header field "SOAPAction".

No es muy lógico que se envía un documento XML que también podría contener un campo XML "SOAPAction" .
Pero dependiendo del servidor, es posible obtener un error si esta cabecera HTTP no existe


Requerimiento:

POST /webservice/Server_Soap.php HTTP/1.0
Host: localhost
Content-Type: text/xml; charset=utf-8
Content-Length: 260
SOAPAction: STR_RevertRQ
User-Agent: PHP WebService Client
<?xml version="1.0"?>
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Header/>
    <soapenv:Body>
        <STR_RevertRQ>
           <Message>This is a little Text</Message>
       </STR_RevertRQ>
    </soapenv:Body>
</soapenv:Envelope>
Respuesta:

<?xml version="1.0"?>
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Header/>
    <soapenv:Body>
        <STR_RevertRS TimeStamp="1251219075">
            <Message>txeT elttil a si sihT</Message>
        </STR_RevertRS>
    </soapenv:Body>
</soapenv:Envelope>

Servicio Web Cliente  - Sabre

Sabre es un servicio web que no retorna vuelos, y hoteles con datos de la industria del turismo. Se puede leer un libro de vuelos, hoteles, renta de carros via servicios web.

Sabre es miembro de Open Travel Alliance (OTA).

Es necesario tener en cuenta que este servico tiene su costo y de hecho se debe suscribir. La documentación esta disponible para el desarrollador que dispone de una suscripcion.

Servidor: https://webservices.sabre.com/websvc

En el ejemplo se envia un  OTA_PingRQ al servidor el cualdo es un simple comando de una lista larga de comando que tiene OTA.

El servidor responde con el comando OTA_PingRS retorna la misma cadena.

Existio problemas en hacerlo funcionar.

Como ejecutar los ejemplos en Windows

  1. Primero compruebe que no hay ningún programa en tu PC que se ejecuta un servidor en el puerto 80.
    Si ha instalado Skype, asegúrese de que en el menú Herramientas -> Opciones -> Conexión, la casilla de verificación "Usar el puerto 80 y 443 como alternativas para las conexiones entrantes" no este activado !!
  2. Verifiar que su navegador no este asociado a un proxy, si es necesario configure para que permita el acceso a los servicios web!
  3. Instalar Wamp Server el cual incluye Apache, mySql y PHP en  C:\Program Files\Wamp.
  4. Editar y modificar el archivo C:\Program Files\Wamp\bin\apache\Apachex.y.z\bin\php.ini  y remover el punto y coma de la sugiente linea ;extension=php_openssl.dll
  5. Seguidamente inicie el servidor desde el startmenu. 
  6. Pero no hay nada que se debe configurar: Wamp se ejecuta por si mismo.
  7. Copie todo el contenido del archivo ZIP de CodeProject en la carpeta C:\Program Files\Wamp\www\webservice
  8. Si todo fue Ok, debe existir este archivo: C:\Program Files\Wamp\www\webservice\index.php
  9. Abrir en el Navegador con http://localhost/webservice

Mas Informacion en : Servicios web con PHP

No hay comentarios: