Capítulo 2. PHP e NuSOAP

Índice

1. Hello world
2. Deteção de erros ("debugging")
2.1. Visualização do pedido e da resposta
2.2. Visualização da informação resultante das ações executadas
2.3. Teste de falha na chamada SOAP
2.4. Esqueleto base de um cliente
3. NameSpaces
4. Tipos de Dados Simples
5. SOAP Faults
6. SOAP arrays
7. SOAP e produto cartesiano

Tutorial onde se descreve a implementação de Web Services em PHP utilizando a classe NuSoap.

1. Hello world

Comecemos com um exemplo muito simples o "hello world".

Exemplo 2.1. O servidor: serv-hello.php

<?php
// Pull in the NuSOAP code
require_once('./lib/nusoap.php');
// Create the server instance
$server = new soap_server;
// Register the method to expose
$server->register('hello');
// Define the method as a PHP function
function hello($name) {
    return 'Hello, ' . $name;
}
// Use the request to (try to) invoke the service
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);
?>

No exemplo seguinte, mostra-se cliente para este serviço. Existem algumas coisas importantes a serem observadas. Primeiro, quando a instância do soapclient é criada, o parâmetro especificado é a URL para o serviço. No nosso caso, serv-hello.php é acedido a partir de um URL no servidor local http://localhost:8888/nusoap-0.9.5/ (iremos alterar isso nos próximos exemplos publicando os serviços noutro servidor).

Os serviços que consomem estarão, naturalmente, localizados em URLs diferentes. Ao chamar o serviço, o primeiro parâmetro é o nome do serviço. Este deve corresponder ao nome de um método disponível no servidor. Neste exemplo, deve coincidir com o método registado dentro do serv-hello.php. Finalmente, o segundo parâmetro na chamada é um array de parâmetros que serão passados ​​para o método do serviço SOAP. Como o método do serv-hello.php, hello requer um único parâmetro, este array tem apenas um elemento.

Exemplo 2.2. O cliente: client-hello.php

<?php
// Pull in the NuSOAP code
require_once('./lib/nusoap.php');

// Create the client instance
// Server Location
// http://localhost:8888/nusoap-0.9.5/Hello/serv-hello.php

$client = new nusoap_client('http://localhost:8888/nusoap-0.9.5/Hello/serv-hello.php', false);

// Call the SOAP method
$result = $client->call('hello', array('name' => 'José Carlos Ramalho'));

// Display the result
print_r($result);
?>

Nota: em PHP o array global $_REQUEST corresponde a uma união dos arrays $_GET e $_POST; se o usarmos podemos configurar o nosso cliente para receber parâmetros via formulário (get ou post) ou através do URL (get).

O nosso cliente poderia ficar assim.

Exemplo 2.3. O cliente: client-hello2.php

<?php
// Pull in the NuSOAP code
require_once('../lib/nusoap.php');

// Create the client instance
// Server Locations
// $location = 'http://localhost:8888/nusoap-0.9.5/Hello/serv-hello.php';
$location ='http://epl.di.uminho.pt/~jcr/jcrbin/php-projects/nusoap-0.9.5/Hello/serv-hello.php';

$client = new nusoap_client( $location, false);

$name = $_REQUEST['name'];

// Call the SOAP method
$result = $client->call('hello', array('name' => $name));

// Display the result
print_r($result);
?>

E poderia ser invocado da seguinte forma:

Figura 2.1. Invocação do cliente com passagem de parâmetros no URL

Invocação do cliente com passagem de parâmetros no URL

1.1. Exercícios

  1. Crie uma página HTML adicional que é um formulário para receber o parâmetro do método e coloque o cliente a responder ao formulário;

  2. Usando o exemplo apresentado crie um serviço que realiza vários cálculos numéricos (tem registados vários métodos):

    • Somar 2 números;

    • Subtrair 2 números;

    • Multiplicar 2 números;

    • Dividir 2 números.