crear un webservice básico con php y java

27
Crear un webservice básico con PHP y SOAP SOAP es un protocolo de intercambio para servicios web basado en XML, sobre el que puedes leer en esta entrada de la wikipedia. Para no liarnos con preámbulos, vamos con la chicha ¿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 realiad podrías acceder a una base de datos y dar muchas más funcionalidades). 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 <?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

Upload: raudel-arteaga

Post on 01-Dec-2015

398 views

Category:

Documents


0 download

TRANSCRIPT

Crear un webservice básico con PHP y SOAPSOAP es un protocolo de intercambio para servicios web basado en XML, sobre el que puedes leer en esta entrada de la wikipedia. Para no liarnos con preámbulos, vamos con la chicha ¿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 realiad podrías acceder a una base de datos y dar muchas más funcionalidades).12345678910111213141516171819

<?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.12345

<?php    require_once "nusoap.php";    $cliente = new nusoap_client("http://localhost/producto.php");          $error = $cliente->getError();    if ($error) {

678910111213141516171819202122232425262728

        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 tipasá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í:1234567891011121314151617181920

<?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",

212223242526272829

        "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 llamamosAhora basta con que en el navegador accedas a producto.php?wsdl y verás el WSDL generado. Ya puedes copiarlo y añadirlo a tu directorio web (crea un archivo y llámalo, por ejemplo, libros.wsdl). Para que el cliente lo utilice debes modificar el código, y en el constructor, en vez del url le pasas el nombre del archivo, de forma que quede como en el ejemplo:1 $client = new nusoap_client("libros.wsdl", true);

Ahora sí, ya tienes montado un pequeño servicio web. El ejemplo es simplón, pero piensa en todas las funcionalidades que podrías incorporarle.

Cómo crear servicios web en JAVA– IDE NetBeans

 17:13   Fabián Bermeo Pérez[MSP]

Hola a todos, bienvenidos a otro curso de desarrollo web, esta vez vamos a aprender

cómo crear servicios web en java con el IDE NetbBeans.

Antes de implementarlo, quiero recordarles que usamos servicios web en sistemas

distribuidos donde necesitamos integrar diferentes plataformas como .NET, JAVA etc.

Abrimos nuestro NetBeans, en mi caso uso una versión 6.9.1 full que me funciona

muy bien sobre windows 7 Ultimate x64

Nos dirigimos a archivo y le damos clic en nuevo proyecto

Buscamos el proyecto llamado java Web y dentro de él clic en aplicación web

A continuación le damos un nombre a nuestro proyecto, y los demás valores los

dejamos por defecto

En la siguiente pantalla debemos escoger el servidor, en nuestro caso usaremos

GlassFish Server 3 y la versión de java EE la dejamos como JAVA EE 6 Web

la ventana a continuación la dejamos como está. No seleccionamos ningún valor

de los checkbox

Luego de configurar, veremos un entorno como el siguiente, que es código puro de

HTML, y el conocidísimo “Hello World!“

Damos clic en ejecutar, para levantar los servicios

seamos un poco pacientes, lleva de 2 a 3 minutos

al finalizar veremos en nuestro explorador el “Hello World!”

De seguido necesitamos crear un nuevo paquete en donde se alojará el servicio

web que vamos a construir

damos clic derecho en fuente de paquetes, luego clic en nuevo y seleccionamos

paquete de java

Obviamente le tenemos que dar un nombre, siempre usen pack_ + el nombre que

le deseen asignar para llevar una jerarquía en cuanto  nombres en el desarrollo de

aplicaciones

ahora ubicamos a nuestro paquete, y le damos clic derecho

seleccionamos nuevo y escogemos “servicio web”

le asignamos ahora un nombre a nuestro servicio web, que servirá para

identificarlo dentro de netbeans

Concluido el proceso, seleccionamos modo diseñador, clic en agregar operación,

le asignamos un nombre que en nuestro caso lo denominé

multiplicar_dos_números

con clic en agregar, inserto 3 parámetros dos de tipo int y uno de tipo string que me

servirá para mostrar el resultado

cambio de nombres a cada una de las variables, según nuestra necesidad

Volvemos a modo código y agregamos las sentencias que busquemos sean

ejecutadas por el servicio web

en mi caso estoy declarando una nueva variable para multiplicar do números que

ingrese el usuario

y devuelvo un texto concatenado con el resultado

para probar nuestro servicio web, buscamos la carpeta servicios web en el árbol de

contenidos de la izquierda

ingresamos en él y ubicamos a nuestro servicio web que creamos

le damos clic derecho y probar servicio web

En el navegador veremos algo como esto, en donde debemos ingresar las

variables que definimos en el servicio web

solo necesitamos ingresar dos valores porque la tercera variable la usamos como

retorno de la operación

así que le damos los valores del número 1 y del número 2 para multiplicarlos

y clic en el botón que indica la operación a realizar

lo que devolverá será el valor de las variables que ingresamos y su multiplicación o

resultado que se procesó dentro del servicio web

de esta manera se manejan los servicios web, en próximas publicaciones les enseñaré

como invocar este mismo servicio web desde .NET

JAVA: Crear un servicio web básico con NetBeans 7.x

Una forma muy sencilla de desarrollar un servicio web en Java es haciendo uso de la plataforma de desarrollo NetBeans 7.x que nos permite además desplegarlos en un servidor web local para pruebas como es GlassFish.

Para descargarnos NetBeans iremos a https://netbeans.org/downloads/. De todas las opciones que nos indica, os recomiendo descargar el paquete Java EE o All para asegurarnos de tener instalado GlassFish. En mi caso he escogido el paquete All para curarme en salud ;-).

De la instalación voy a comentar poco, ya que simplemente hay que seguir el asistente con la técnica de “siguiente siguiente siguiente”, estando bien seguros que instalamos GlassFish.

Desarrollo del servicio webEn NetBeans 7.x, para crear un servicio web deberemos crear un proyecto de aplicación web.

En el asistente se nos preguntará por el servidor que usaremos, y es aquí donde seleccionaremos el GlassFish que hemos instalado.

Una vez creado el proyecto, añadiremos un nuevo WebService desde el menú contextual New > WebService….

Se nos abrirá un asistente en el que rellenaremos el nombre de la clase y su paquete.

Y con esto ya tenemos el servicio creado.

@WebService(serviceName = "WSDemo")

public class WSDemo {

    /**

     * This is a sample web service operation

     */

    @WebMethod(operationName = "hello")

    public String hello(@WebParam(name = "name") String txt) {

        return "Hello " + txt + " !";

    }

}

Analizando su código, vemos que el servicio publica una función llamada hello. Sabemos que la clase es un servicio por @WebService y que es una función publicada en el WS por@WebMethod. Si queremos añadir una nueva función, simplemente tendremos que copiar la anterior y cambiar lo que queramos ;-)

Para publicar el servicio simplemente seleccionaremos deploy en el menú contextual sobre el proyecto.

Es posible que nos pida permiso para arrancar GlassFish.

En el output del IDE nos mostrará que se ha generado correctamente y que GlassFish está iniciado.

En la pestaña de GlassFish podremos ver la ruta para acceder al servicio web.

Probando el servicio webAccedemos a la URL que nos indica para ver el servicio. Para consultar su WSDL solo tenemos que añadir ?WSDL al final de la URL.

Esto nos valdrá en el caso de querer probarlo con herramientas como SoapUI(http://www.soapui.org/), al que deberemos indicarle el WSDL para que genere la invocación.

Este nos generará la invocación, y simplemente pulsado el botón de run, obtendremos el resultado en el lateral derecho de la request.

Simple, ¿verdad?

Crear un simple servicio web SOAP en Java con NetBeans es re-fácil

21.12.08. Por ooscarr (ooscarr)

A través de un video tutorial (mencionado al final de este documento), aprendí a crear un simple servicio web con NetBeans.

Según leí, Sun removió el soporte para el   WSDK  (aunque igual se sigue distribuyendo) para reemplazarlo por GlassFish. Así que ni modo. Pero estas instrucciones también funcionan con Tomcat.

Crear nuevo proyecto

Lo primero es crear un nuevo proyecto, así que...

1. Creamos un Nuevo proyecto, en mi caso de tipo Aplicación Web

2. Elijo un nombre para la aplicación web. Yo le llamé Holaste.

3. En los ajustes del servidor, elijo GlassFish o Tomcat, como siempre.

4. Y Terminar

¿Código?

Como toda apliación web, me aparece el típico index.jsppredeterminado en el que puedo aprovechar de describir el Servicio Web (puedo poner cualquier cosa, en realidad, porque esto no es parte del servicio web).

index.jsp

<%-- Document : index Created on : 21-dic-2008, 12:06:37 Author : ooscarr--%><%@page contentType="text/html" pageEncoding="UTF-8"%><?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es-cl"><head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Servicio web</title></head><body> <h1>Este es el Servicio web</h1> <p>Este servicio lo que hace es decir "Hola, [nombre]" a cambio de un parámetro [nombre] de tipo <code>String</code>.</p></body></html>

Creación del Servicio Web

Mmm... Bueno, en NetBeans es muy sencillo crear un Servicio Web, sólo basta seleccionar el nombre del proyecto (Holaste en mi caso) y poner Archivo Nuevo. Ahi también hay una opción llamada Web Service.

Y le damos un nombre, por ejemplo, ServicioWeb.

Aproveché de agregarlo a un paquete llamado hola.

Añadir operaciones

Para añadir operaciones hay que sólo posicionarse sobre el Servicio Web y poner Add Operation...

De otra forma, en el modo Design existe el botón Add Operation....

Ahí le pongo un nombre, puedo añadir parámetros y elegir si lo quiero de tipo String, boolean, int, etc.

ServicioWeb.java

Con eso se generará automáticamente el código esqueleto que puedo modificar para que me retorne "Hola, " + nombre;. Así:

package hola;

import javax.jws.WebMethod;import javax.jws.WebParam;import javax.jws.WebService;

/** * * @author ooscarr */@WebService()public class ServicioWeb {

/** * Web service operation */ @WebMethod(operationName = "diHola") public String diHola(@WebParam(name = "nombre") String nombre) {

//TODO write your implementation code here: return "Hola, " + nombre; }

}

Probémoslo

Ya. Probémoslo. Para eso primero hay que armar el proyecto con el menú contextual del proyecto, opción Deploy.

GENERACIÓN CORRECTA (tiempo total: 7 segundos)

Y probar el servicio web, seleccionando el Servicio web, opción Test Web Service.

INFO: Dynamically creating request wrapper Class hola.jaxws.DiHolaINFO: Dynamically creating response wrapper bean Class hola.jaxws.DiHolaResponseINFO: parsing WSDL...INFO: generating code...INFO: compiling code...INFO: Invoking wsimport with http://localhost:8080/Holaste/ServicioWebService?WSDLINFO: wsimport successfulINFO: parsing WSDL...INFO: generating code...INFO: compiling code...INFO: Invoking wsimport with http://localhost:8080/Holaste/ServicioWebService?WSDLINFO: wsimport successful

Si todo está bien instalado, se debería abrir una ventana del navegador más o menos así.

Aquí, por ejemplo, si pongo Oscar en el formulario, se puede ver el código que entrega el servicio Web al cliente.

WSDL

También es bueno hacer notar que NetBeans genera automáticamente el archivo WSDL (y su XML Schema también) para ser usado en las implementaciones de los Clientes.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.5-hudson-$BUILD_NUMBER-. --><definitions targetNamespace="http://hola/" name="ServicioWebService" xmlns:tns="http://hola/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns="http://schemas.xmlsoap.org/wsdl/"> <types> <xsd:schema> <xsd:import namespace="http://hola/" schemaLocation="ServicioWebService_schema1.xsd"/> </xsd:schema> </types> <message name="diHola"> <part name="parameters" element="tns:diHola"/> </message> <message name="diHolaResponse"> <part name="parameters" element="tns:diHolaResponse"/> </message> <portType name="ServicioWeb"> <operation name="diHola"> <input message="tns:diHola"/> <output message="tns:diHolaResponse"/>

</operation> </portType> <binding name="ServicioWebPortBinding" type="tns:ServicioWeb"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/> <operation name="diHola"> <soap:operation soapAction=""/> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> </operation> </binding> <service name="ServicioWebService"> <port name="ServicioWebPort" binding="tns:ServicioWebPortBinding"> <soap:address location="REPLACE_WITH_ACTUAL_URL"/> </port> </service></definitions>

Fuente

Todo lo que dije lo saqué de un video hecho por un desarrollador de Sun. Lo puedes ver (en inglés) desde el siguiente link, por si te quedó alguna duda.