Mostrando entradas con la etiqueta PHP. Mostrar todas las entradas
Mostrando entradas con la etiqueta PHP. Mostrar todas las entradas

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

Creando un Servicio Web con PHP

Descargar Codigo Fuente

Introducción

Hoy, intentaremos escribir una funcionalidad de servicios web y también la forma de consumirla mediante código PHP. Básicamente, se trata de un nivel de servicio web de principiante pero podemos ver el nivel de sencillez que resulta para a futuro poder utilizarlo.

Contenido

  1. Que es SOAP?
  2. Porque SOAP?
  3. Creando un metodo para el web services.
  4. Consumiendo un web service(Cliente)

Desarrollo:

Que es SOAP?

SOAP iesta basado en XML lo que se considera de lectura humano. Es un protocolo para acceder a un servicio Web. Se trata de un sencillo protocolo basado en XML para permitir el intercambio de requerimientos de información a través del protocolo HTTP

Porque SOAP?

Para el caso, se requiere de tantas aplicaciones para la comunicación de datos entre los sistemas, una form es por medio de llamadas a procedimiento remoto (RPC) entre objetos como DCOM y CORBA pero HTTP no fue diseñado para esto.
  • RPC representa compatibilitibidad
  • La seguridad es un problema
  • Los servidores Firewalls y proxy, normalmente bloquean el trafico.
Una mejor manera de comunicarse entre las aplicaciones es a través de HTTP, HTTP es compatible con todos los navegadores y servidores de Internet. Por eso es preferible servicio SOAP.

Podemos colaborar con otros programadores de la construcción de gran tamaño y aplicaciones complejas en múltiples plataformas.

Utilizando el Codigo

Aquí, vamos a crear un servicio web utilizando el código PHP, para ello seguiremos los siguientes pasos:
Paso 1: Se debe descargar la libreria de esta URL http://sourceforge.net/projects/nusoap/.
Paso 2: Instalar WAMP/XAMPP en ambientes Windows o en Linux instalar el servidor Apache con PHP, luego ubicar para Windows www/httpdoc, en Linux en var/www/html.
Paso 3: Crear una carpeta llamada "serviciowebsoap"  segun el Paso 2.
Paso 4: Copiar en la carpeta "lib" lo que se descargo en el Paso 1, dentro de la libreria Paso 3.
Paso 5: Crear dos archivos "server.php" y "client.php" en la carpeta creada en el Paso 3.
Paso: Para el "server.php", escribir el sigiente codigo:
<?php
//Invocar a la libreria 
require_once ('lib/nusoap.php'); 
//uitilizando SOAP_SERVER para crear un objeto server 
$server = new soap_server; 

//registrr la function que trabajo en el servidor
$server->register('get_message'); 

// crear la funccion 
function get_message($your_name) 
{ 
if(!$your_name){ 
return new soap_fault('Client','','Digite su Nombre:!'); 
} 
$result = "Bienvenido a ".$your_name .". Gracias por utilizar el primer servicio web  en PHP con SOAP"; 
return $result; 
} 
// crear HTTP oyente
$server->service($HTTP_RAW_POST_DATA); 
exit(); 
?> 
 
Paso 7: Despues de haber creado el archivo "server.php" , vamos a crear ahora el archivo que podamos probar su funcionalidad. En el navegador escribirmos los siguiente http://localhost/serviciowebsoap/server.php?wsdl.
Paso 8: Crear el archivo cliente o consumidor "client.php" en la carpeta serviciowebsoap. Digitamos lo sigueinte:
<?php 
require_once ('lib/nusoap.php'); 
// Reuqerimos el valor del parametro
$param = array( 'your_name' => 'Jose Candelario'); 
// Crear un objeto que haga referencia a los servicios web
$client = new soapclient('http://localhost/serviciowebsoap/server.php'); 
// Invocar la funcion del servidor y enviar parametros
$response = $client->call('get_message',$param); 
//Process result 
if($client->fault) 
{ 
echo "FAULT: <p>Code: (".$client->faultcode."</p>"; 
echo "String: ".$client->faultstring; 
} 
else 
{ 
echo $response; 
} 
?> 
 
Paso 9: Respaldar todo los archivoss, seguidamente en el Navegador digite lo siguiente http://localhost/serviciowebsoap/client.php.
Se visualizara el siguiente resultado: 
Bienvenido a JOSE CANELARIO. Gracias por utilizar el primer servicio web utilizando  PHP con SOAP.

Como ven la creación y utilizacion de servicios web con PHP resulta bastante sencillos.