Nube de tags

Con la colaboración de ...

Preferimos Linux

Síguenos en Facebook

Diario informal de K-nábora

jun 13
2009

Creando WebService en PHP5 con una Clase

Enviado por K-nábora Bufete Tecnológico en programación

En la version 5 de PHP se incorporan las clases necesarias para la creacion de webservices y su invocacion desde clientes remotos, a continuacion se ilustra como crear un webservice en PHP que ejecute un metodo dentro de una clase definida por el usuario en el servidor.

Implementar la Clase a Utilizar :

  • Ir al directorio web donde se quiere crear el servicio
  • Utilizando su editor favorito crear un archivo donde se implemente la clase y sus metodos :
    (utilizaremos una clase Calculadora con el metodo sumar que recibe dos numero y retorna su suma)
  • Crear el archivo Calculadora.php
 
<?php
// Clase que implementa los servicios
class Calculadora
{
// Metodo a utilizar como servicio
public function sumar($x, $y)
{
return $x + $y;
}
}
?>
 

Implementar el Servicio Web :

  • Utilizando su editor favorito crear un archivo donde se cree el servidor
  • Crear el archivo servicio.php
  • Incluir la clase Calculadora a utilizar dentro del webservice
  • No se utilizara WSDL ya que toca generarlo a mano para el servicio
  • Al no utilizar WSDL se debe suministrar el namespace, en este caso uri:webservices
  • Al momento de asignar la clase al webservice se debe suministrar el nombre.
 
<?php
// Incluir la Clase
require_once('Calculadora.php');
 
// Crear servidor de Soap
$server = new SoapServer(
null, // No utilizar WSDL
array('uri' => 'urn:webservices') // Se debe especificar el URI
);
 
// Asignar la Clase
$server->setClass('Calculadora');
 
// Atender los llamados al webservice
$server->handle();
?>
 
  • Abrir la pagina PHP en su navegador favorito, debe salir en blanco sin reportar errores
    http://<servidor>/<ruta>/servicio.php

Implementar el Cliente :

  • En este caso implementaremos un cliente en el lenguaje PHP para consumir el servicio.
  • Utilizando su editor favorito crear un archivo cliente.php
 
<?php
// Crear el cliente suministrado la ruta del servicio
// Utilizar el uri
$client = new SoapClient(null,
array(
'location' => 'http://localhost/~marlonj/servicio.php',
'uri' => 'urn:webservices',
));
 
// Llamar el metodo como si fuera del cliente
echo $client->sumar(3,4);
?>
 
  • Abrir la pagina PHP del cliente en su navegador favorito, debe salir en blanco sin reportar errores
    http://<servidor>/<ruta>/cliente.php

De esta forma podemos crear una clase que contenga los metodos a ser utilizados como webservices, de esta forma el servidor crea una instancia de la clase Calculadora cada vez que se invoca un servicio.

Tambien es posible asignar un objeto al servicio para esto podemos crear una instancia del objeto a utilizar como servicio web y enlazarlo con el webservice, asi :

 
<?php
// Incluir la Clase
require_once('Calculadora.php');
 
// Crear servidor de Soap
$server = new SoapServer(
null, // No utilizar WSDL
array('uri' => 'urn:webservices') // Se debe especificar el URI
);
 
// Crear el objeto a utilizar como webservice
$calculadora = new Calculadora();
 
// Asignar el Objeto
$server->setObject($calculadora);
 
// Atender los llamados al webservice
$server->handle();
?>

Comentarios (4)add
Re: Error al probar codigo
escrito por Antonio Alexis Sánchez de Vega , noviembre 12, 2010
Hola, buenas tardes,

El ejemplo debe funcionar perfectamente si lo prueba en un servidor web con el intérprete PHP >= 5.0.1.

Puede que el problema esté a la hora de instanciar la clase SoapClient, asegúrese que ha indicado correctamente la dirección del servidor SOAP en el parámetro 'location' del constructor de SoapClient.

En dicho parámetro debe especificar la url del php que actua como servidor en la forma: http:////servicio.php. Si, por ejemplo, tiene dicho php guardado en el directorio 'wstest' del DocumentRoot de un apache local, debe indicar dicha url como: http://localhost/wstest/servicio.php.

Reciba un cordial saludo.
Reporte el abuso
Voto negativo
Voto positivo
Votos: +0
Error al probar codigo
escrito por Alfredo , octubre 31, 2010
Hola buenas tardes... primero gracias por el articulo esta muy bueno, pero al ejecutarlo me sale el siguiente error:
Fatal error: Uncaught SoapFault exception: [HTTP] Not Found in .....

Como puedo solucionar esto??

Gracias!!
Reporte el abuso
Voto negativo
Voto positivo
Votos: +0
Gracias a ti
escrito por K-nábora Bufete Tecnológico , enero 13, 2010
por leernos
Reporte el abuso
Voto negativo
Voto positivo
Votos: +0
gracias
escrito por juanma , enero 10, 2010
buen artículo.
Reporte el abuso
Voto negativo
Voto positivo
Votos: +0
Escribir comentario

security image
Escribe los caracteres de la imagen


busy