¿cómo creamos un servicio web en PHP?
Para facilitarnos la vida empezaremos por descargar NuSOAP, un toolkit para el desarrollo de servicios web con SOAP en PHP, que nos proveerá de diversas clases para trabajar con este protocolo. Basta con descargarlo, descomprimirlo, meterlo dentro de nuestro proyecto y, cuando queramos usarlo, incluir nusoap.php como librería.
Ok, con NuSOAP instalado toca crear un servidor SOAP en nuestra aplicación. Para el ejemplo crearemos un servidor, lo llamaremos producto.php, que si recibe una petición donde se le pida una lista de libros devuelva tres títulos (es un ejemplo básico, piensa que en la realiadad podrías acceder a una base de datos y dar muchas más funcionalidades).
<?php require_once "nusoap.php"; function getProd($categoria) { if ($categoria == "libros") { return join(",", array( "El señor de los anillos", "Los límites de la Fundación", "The Rails Way")); } else { return "No hay productos de esta categoria"; } } $server = new soap_server(); $server->register("getProd"); $server->service($HTTP_RAW_POST_DATA); ?>Ok, ahora necesitas un cliente, que llamaremos cliente.php. En el constructor, el cliente recibirá el url del servidor y para acceder al método que nos devuelve los libros recurriremos al método call(), al cual le pasaremos el nombre del método del servidor al que queremos acceder y los parámetros en forma de array. Además, también controlaremos que no haya errores en la comunicación.
<?php require_once "nusoap.php"; $cliente = new nusoap_client("http://localhost/producto.php"); $error = $cliente->getError(); if ($error) { echo "<h2>Constructor error</h2><pre>" . $error . "</pre>"; } $result = $cliente->call("getProd", array("categoria" => "libros")); if ($cliente->fault) { echo "<h2>Fault</h2><pre>"; print_r($result); echo "</pre>"; } else { $error = $cliente->getError(); if ($error) { echo "<h2>Error</h2><pre>" . $error . "</pre>"; } else { echo "<h2>Libros</h2><pre>"; echo $result; echo "</pre>"; } } ?>Con esto ya tienes una idea múy básica del funcionamiento de un webservice SOAP construído con PHP. Pero claro, nos falta un archivo WSDL para tener un webservice decente. Aunque dicho archivo puede ser escrito a mano, NuSOAP puede generarlo por ti pasándole ciertos parámetros, por lo que lo ideal sería generarlo en el servidor. Así que modifica tu producto.php para que quede tal que así:
<?php require_once "nusoap.php"; function getProd($categoria) { if ($categoria == "libros") { return join(",", array( "El señor de los anillos", "Los límites de la Fundación", "The Rails Way")); } else { return "No hay productos de esta categoria"; } } $server = new soap_server(); $server->configureWSDL("producto", "urn:producto"); $server->register("getProd", array("categoria" => "xsd:string"), array("return" => "xsd:string"), "urn:producto", "urn:producto#getProd", "rpc", "encoded", "Nos da una lista de productos de cada categoría"); $server->service($HTTP_RAW_POST_DATA); ?>Como ves, el cambio en es cuando llamamos a register, ya que en vez de pasarle, como antes, el método en cuestión, le añadimos también varios argumentos para generar el WSDL:
- El primer array nos permite definir el argumento de entrada y su tipo de datos
- El segundo define la función de retorno y su tipo de datos
- urn:producto es la definición del namespace
- urn:producto#getProd es donde definimos la acción SOAP
- Luego viene el tipo de llamada,que puede ser rpc, como en el ejemplo, o document
- Tras esto definimos el valor del atribute use, que puede ser encoded o literal
- Finalmente viene una descripción de qué hace el método al que llamamos
$client = new nusoap_client("libros.wsdl", true);
Fuente
0 comentarios:
Publicar un comentario