Mini Curso Web Services com PHP
Upcoming SlideShare
Loading in...5
×
 

Mini Curso Web Services com PHP

on

  • 25,627 views

 

Statistics

Views

Total Views
25,627
Views on SlideShare
25,567
Embed Views
60

Actions

Likes
11
Downloads
801
Comments
2

1 Embed 60

http://www.slideshare.net 60

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Mini Curso Web Services com PHP Mini Curso Web Services com PHP Presentation Transcript

  • Minicurso Web Services com PHP Vinícius Costa de Souza viniciuscs@unisinos.br http://www.inf.unisinos.br/~vinicius julho de 2005
  • Web Services com PHP Apresentações  Nome  Conhecimentos sobre Web Services  Conhecimentos sobre PHP  Expectativas referentes ao curso Vinícius Costa de Souza - Julho de 2005 / 2
  • Web Services com PHP Programa  Introdução  Web Services  O que são?  Arquitetura  Tecnologias  XML  WSDL  SOAP  UDDI  Web Services com PHP  XML-RPC  NuSOAP  PEAR SOAP  REST  PHP Extension Vinícius Costa de Souza - Julho de 2005 / 3
  • Web Services com PHP Introdução  Por que surgiram os Web Services ?  Reutilização  Disponibilidade  Interoperabilidade  3.300 projetos em 2002  15,2 milhões de dólares até 2007 Vinícius Costa de Souza - Julho de 2005 / 4
  • Web Services com PHP Web Services O que são? Web Services são componentes de software que independem de implementação ou de plataforma e podem ser descritos, publicados e invocados sobre uma rede através de mensagens padrão XML. Vinícius Costa de Souza - Julho de 2005 / 5
  • Web Services com PHP Web Services Arquitetura Registro Descriçã de o do Serviços serviço encontrar publicar serviço Solicitante cliente Provedor de de Serviços interagir Descrição Serviços do serviço Vinícius Costa de Souza - Julho de 2005 / 6
  • Web Services com PHP Web Services Tecnologias Vinícius Costa de Souza - Julho de 2005 / 7
  • Web Services com PHP Tecnologias XML  No contexto de Web Services, a XML não é apenas utilizada como formato para troca de mensagens, mas também como a forma através da qual os serviços são definidos  Permite superar as limitações do HTML  Possibilita criar qualquer número de elementos (tags) com significado associado às informações Vinícius Costa de Souza - Julho de 2005 / 8
  • Web Services com PHP Tecnologias XML  Através de XML esquemas é possível validar as informações separadamente e descrever os atributos e características dos dados  Duas partes só podem trocar informações em XML e entender os elementos da mesma forma se compartilharem uma mesma definição sobre quais e como os elementos podem ser utilizados Vinícius Costa de Souza - Julho de 2005 / 9
  • Web Services com PHP Tecnologias WSDL  A WSDL é a linguagem padrão XML utilizada para descrever interfaces de Web Services  A WSDL é dividida em três elementos principais:  definições de tipo de dados - determinam a estrutura e o conteúdo das mensagens.  operações abstratas - determinam as operações possíveis  protocolos de ligação - determinam as formas de transmissão das mensagens pela rede até os destinatários Vinícius Costa de Souza - Julho de 2005 / 10
  • Web Services com PHP Tecnologias WSDL  Camadas de descrição dos serviços Vinícius Costa de Souza - Julho de 2005 / 11
  • Web Services com PHP Tecnologias SOAP  O SOAP é um protocolo para troca de informações em ambiente descentralizado e distribuído que permite comunicação entre aplicações de forma simples e completamente independente de sistema operacional, linguagem de programação ou plataforma  A comunicação é realizada através de trocas de mensagens, transmitidas em formato XML, incluindo os parâmetros usados na chamada, bem como os dados de resultados.  Também pode ser utilizado para invocar, publicar e localizar Web Services no registro UDDI Vinícius Costa de Souza - Julho de 2005 / 12
  • Web Services com PHP Tecnologias SOAP  O SOAP pode ser utilizado em combinação com uma variedade de outros protocolos, como HTTP, SMTP, FTP, dentre outros. Também suporta Remote Procedure Call  O modelo de dados SOAP oferece definições para tipos de dados como string, integer, float, double e date Vinícius Costa de Souza - Julho de 2005 / 13
  • Web Services com PHP Tecnologias SOAP Um pacote SOAP possui as seguintes partes:  Envelope: define o início e o fim das mensagens, quem poderá tratá-las e se o tratamento é obrigatório ou opcional  Cabeçalho: contém atributos opcionais das mensagens  Corpo: contém os dados em XML  Anexo: consiste de um ou mais documentos anexados a mensagem principal  RPC: define como o modelo RPC (Remote Procedure call) interage com o SOAP, com o objetivo de invocar procedimentos em um sistema remoto.  Codificação: define como representar dados simples e complexos a serem transmitidos nas mensagens Vinícius Costa de Souza - Julho de 2005 / 14
  • Web Services com PHP Tecnologias SOAP  Envelope, Cabeçalho e Corpo das mensagens SOAP Vinícius Costa de Souza - Julho de 2005 / 15
  • Web Services com PHP Tecnologias SOAP Invocação do serviço utilizando SOAP Vinícius Costa de Souza - Julho de 2005 / 16
  • Web Services com PHP Tecnologias UDDI  Para que um serviço seja utilizado é necessário que o cliente consiga localizá-lo, e esta localização pode ser feita através do UDDI, que é uma especificação técnica para descrever, descobrir e integrar Web Services  Para isso, existe um registro global público, chamado UDDI business registry, no qual toda a informação está disponível para consultas em geral. Entretanto, um registro privado pode adicionar controle de segurança para proteger os dados e prevenir acessos não autorizados Vinícius Costa de Souza - Julho de 2005 / 17
  • Web Services com PHP Tecnologias UDDI UDDI utilizado para descobrir um Web Service Vinícius Costa de Souza - Julho de 2005 / 18
  • Web Services com PHP Web Services com PHP Possibilidades  XML-RPC  NuSOAP  PEAR SOAP  REST  SOAP Extension Vinícius Costa de Souza - Julho de 2005 / 19
  • Web Services com PHP Web Services com PHP XML-RPC  Remote Procedure Calls – RPC são utilizadas para estabelecer e facilitar transações entre dois sistemas remotos  XML-RPC é uma implementação de RPC que possibilita o transporte de dados em XML entre dois servidores utilizando o protocolo HTTP  XML-RPC tollkit disponível em: http://sourceforge.net/projects/phpxmlrpc  Versão 1.1.1 de 30/06/2005 Vinícius Costa de Souza - Julho de 2005 / 20
  • Web Services com PHP Web Services com PHP XML-RPC Classes  xmlrpc_client – clientes  xmlrpc_server - servidores  xmlrpcmsg – requisições ao servidor  xmlrpcresp – respostas do servidor  xmlrpcval – encapsula valores para XML-RPC Arquivos  xmlrpc.inc  xmlrpcs.inc Vinícius Costa de Souza - Julho de 2005 / 21
  • Web Services com PHP Web Services com PHP XML-RPC xmlrpc_server.php <?php include ("xmlrpc.inc"); include ("xmlrpcs.inc"); function CalculaICMS ($objeto){ $valor = $objeto->GetParam(0); $valor_escalar = $valor->scalarval(); $valorICMS = $valor_escalar * 1.5; return new xmlrpcresp (new xmlrpcval($valorICMS, "string")); } $servidor = new xmlrpc_server (array("valorICMS.CalculaICMS"=>array("function"=>"CalculaICMS"))); ?> Vinícius Costa de Souza - Julho de 2005 / 22
  • Web Services com PHP Web Services com PHP XML-RPC xmlrpc_client.php <?php include ("xmlrpc.inc"); $valor_nf = "15.000"; $format = new xmlrpcmsg('valorICMS.CalculaICMS', array(new xmlrpcval($valor_nf, "double"))); $client = new xmlrpc_client("xmlrpc_server.php", "localhost", 80); $request = $client->send($format); $resp = $request->value(); echo $value->scalarval(); ?> Vinícius Costa de Souza - Julho de 2005 / 23
  • Web Services com PHP Web Services com PHP Exercícios 1. Baixar as classes XML-RPC http://sourceforge.com 3. Baixar os exemplos xmlrpc_server.php e xmlrpc_client.php em www.inf.unisinos.br/~vinicius e testar. Simular alguns erros com e sem a opção de debug. 5. Criar um Web Service que recebe um nome (string) e retorna como resposta a frase “Olá nome!”. Vinícius Costa de Souza - Julho de 2005 / 24
  • Web Services com PHP Web Services com PHP PEAR  PHP Extension and Application Repository  http://pear.php.net  Repositório de classes em PHP  Licença livre  Grande comunidade  PEAR SOAP Client/Server for PHP  implementação do protocolo SOAP e serviços  versão 0.9.1 Beta de 31/05/2005. Vinícius Costa de Souza - Julho de 2005 / 25
  • Web Services com PHP Web Services com PHP PEAR pear-server1.php <?php require_once 'SOAP/Server.php'; $server = new SOAP_Server; class SOAP_Example_Server { var $method_namespace = 'urn:SOAP_Example_Server'; function echoString($inputString) { return $inputString; } } $soapclass = new SOAP_Example_Server(); $server->addObjectMap($soapclass); $server->service($HTTP_RAW_POST_DATA); ?> Vinícius Costa de Souza - Julho de 2005 / 26
  • Web Services com PHP Web Services com PHP PEAR pear-client1.php <?php require_once 'SOAP/Client.php'; $soapclient = new SOAP_Client('http://localhost/pear-server1.php'); $result = $soapclient->call('echoStringSimple', array('inputString' => 'this is a test string'), array('namespace' => 'urn:SOAP_Example_Server'); ?> Vinícius Costa de Souza - Julho de 2005 / 27
  • Web Services com PHP Web Services com PHP NuSOAP  API desenvolvida em PHP  Permite a criação de clientes e servidores  Possui suporte embutido a WSDL.  Instalação simplificada  servidor Web com suporte a PHP  biblioteca de classes nusoap.php  http://sourceforge.ner/projects/nusoap  A última versão estável é a 0.7.0 de 3/6/2005 Vinícius Costa de Souza - Julho de 2005 / 28
  • Web Services com PHP Web Services com PHP NuSOAP (exemplo 1 – Hello World) nusoap_server1.php <?php // inclusão do arquivo de classes NuSOAP require_once('nusoap.php'); // criação de uma instância do servidor $server = new soap_server; // registro do método $server->register('hello'); // definição do método como uma função do PHP function hello($name) { return 'Hello '.$name; } // requisição para uso do serviço $HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : ''; $server->service($HTTP_RAW_POST_DATA); ?> Vinícius Costa de Souza - Julho de 2005 / 29
  • Web Services com PHP Web Services com PHP NuSOAP (exemplo 1 – Hello World) nusoap_client1.php <?php // inclusão do arquivo de classes NuSOAP require_once('nusoap.php'); // criação de uma instância do cliente $client = new soapclient('http://localhost/server1.php'); // chamada do método SOAP $result = $client->call('hello',array('V SDSL')); // exibe o resultado print_r($result); ?> Vinícius Costa de Souza - Julho de 2005 / 30
  • Web Services com PHP Web Services com PHP NuSOAP (exemplo 2 - debug) nusoap_client2.php <?php require_once('nusoap.php'); $client = new soapclient('http://localhost/server1.php'); // verifica se ocorreu erro na criação do objeto $err = $client->getError(); if ($err){ echo "<h2>Erro no construtor</h2><pre>".$err."</pre>"; } // chamada do método SOAP $result = $client->call('hello',array('V SDSL')); // verifica se ocorreu falha na chamada do método if ($client->fault){ echo "<h2>Falha</h2><pre>"; print_r($result); echo "</pre>"; Vinícius Costa de Souza - Julho de 2005 / 31
  • Web Services com PHP Web Services com PHP NuSOAP (exemplo 2 - debug) }else{ // verifica se ocorreu erro na execução do método $err = $client->getError(); if ($err){ echo "<h2>Erro</h2><pre>".$err."</pre>"; }else{ // exibe o resultado echo "<h2>Result</h2><pre>".print_r($result)."</pre>"; } } // exibe a requisição e a resposta echo '<h2>Requisição</h2>'; echo '<pre>'.htmlspecialchars($client->request).'</pre>'; echo '<h2>Resposta</h2>'; echo '<pre>'.htmlspecialchars($client->response).'</pre>'; // Exibe mensagens para debug echo '<h2>Debug</h2>'; echo '<pre>'.htmlspecialchars($client->debug_str).'</pre>' ?> Vinícius Costa de Souza - Julho de 2005 / 32
  • Web Services com PHP Web Services com PHP NuSOAP (exemplo 2 - debug) Requisição POST server1.php HTTP/1.0 User-Agent: NuSOAP/0.6.7 (1.75) Host: localhost Content-Type: text/xml; charset=ISO-8859-1 SOAPAction: "" Authorization: Basic dmluaWNpdXM6dW5pc2lub3M= Content-Length: 538 <?xml version="1.0" encoding="ISO-8859-1"?> <SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:si="http://soapinterop.org/xsd"> <SOAP-ENV:Body> <ns1:hello xmlns:ns1="http://testuri.org"> <soapVal xsi:type="xsd:string">III SDSL</soapVal> </ns1:hello> </SOAP-ENV:Body> </SOAP-ENV:Envelope> Vinícius Costa de Souza - Julho de 2005 / 33
  • Web Services com PHP Web Services com PHP NuSOAP (exemplo 3 - WSDL) server2.php <?php require_once('nusoap.php'); $server = new soap_server; // inicializa o suporte a WSDL $server->configureWSDL('server2','urn:server2'); $server->wsdl->schemaTargetNamespace = 'urn:server2'; // registra o método a ser oferecido $server->register('hello', //nome do método array('name' => 'xsd:string'), //parâmetros de entrada array('return' => 'xsd:string'), //parâmetros de saída 'urn:server2', //namespace 'urn:server2#hello', //soapaction 'rpc', //style 'encoded', //use 'Says hello to the caller' //documentação do WS ); ... Vinícius Costa de Souza - Julho de 2005 / 34
  • Web Services com PHP Web Services com PHP Vinícius Costa de Souza - Julho de 2005 / 35
  • Web Services com PHP Web Services com PHP Exercícios 1. Baixar as classes do NuSOAP http://sourceforge.net Baixar e testar os três exemplos apresentados http://www.inf.unisinos.br/~vinicius 2. Alterar o nusoap-server2.php para que o mesmo forneça um novo serviço além do hello. Este novo serviço deve ser chamado de Media e deve receber como parâmetros de entrada dois números reais (num1 e num2) e retornar como saída um parâmetro (resultado), que deve ser o resultado do cálculo da média entre os dois números. 3. Criar um cliente para acessar o novo serviço implementado Vinícius Costa de Souza - Julho de 2005 / 36
  • Web Services com PHP Web Services com PHP Exercícios 1. Criar um cliente para acessar um Web Service disponibilizado pela Amazon.com através da API NuSOAP O web service disponibilizado pela Amazon (http: //soap.amazon.com) permite a realização de consultas em sua base de dados. Dessa forma, podemos incluir fomulários para pesquisas na Amazon em nossos próprios sites. Vinícius Costa de Souza - Julho de 2005 / 37
  • Web Services com PHP Web Services com PHP Dicas 1. URL para acesso ao serviço da Amazon.com http://soap.amazon.com/schemas3/AmazonWebServices.wsdl 2. Parâmetros a serem passados 5. Array Details 'keyword' => $palavra, 'Url‘ 'page' => $pagina, 'ImageUrlSmall' 'mode' => 'books', 'ProductName‘ 'tag' => 'melonfire-20', 'Authors‘ 'sort' => '+pmrank', 'OurPrice' 'type' => 'lite', 'devtag' => 'YOUR-TOKEN-HERE‘ 3. Nome do método a ser chamado KeywordSearchRequest 4. Retorno $result['Details']; $result['TotalResults']; Vinícius Costa de Souza - Julho de 2005 / 38
  • Web Services com PHP Web Services com PHP REST  O REST difere bastante do SOAP e do XML-RPC.  não é um padrão  não existem classes pré-construídas  não exige nenhuma extensão especial ou biblioteca de classes  O protocolo HTTP faz o envio e recebimento de mensagens padrão XML.  uso de métodos padrão HTTP como o GET, POST e PUT para enviar e recuperar dados XML.  Necessário utilizar ferramentas como PHP DOM, SAX, ou também XSL para fazer o parsing. Vinícius Costa de Souza - Julho de 2005 / 39
  • Web Services com PHP Web Services com PHP REST rest-server.php <?php // obtém o valor do parâmetro passado. $amount = $_GET["amount"]; // efetua o cálculo do imposto $taxcalc = $amount*0.15; // monta o XML de resposta echo "<?xml version="1.0"?>"; echo "<taxinfo>"; echo "<result>".$taxcalc."</result>"; echo "</taxinfo>"; ?> Vinícius Costa de Souza - Julho de 2005 / 40
  • Web Services com PHP Web Services com PHP REST rest-client.php <?php $rs = "http://localhost/rest-server.php"; $qs = ""; $param = array('amount' => "15.00"); foreach($param as $key=>$value){ $qs = $qs."$key=".urlencode($value)."&"; } $url = "$rs?$qs"; $xml = file_get_contents($url); echo $xml; ?> Vinícius Costa de Souza - Julho de 2005 / 41
  • Web Services com PHP Web Services com PHP SOAP Extension  A extensão SOAP do PHP 5 é a primeira implementação do protocolo SOAP para PHP em C  Possui algumas vantagens em relação a outras implementações escritas em PHP, sendo a principal delas a velocidade.  Essa extensão, ainda definida como experimental, pode ser utilizada para implementar servidores e clientes SOAP com suporte a SOAP 1.1, SOAP 1.2 e WSDL 1.1.  Possui uma série de funções pré-definidas Vinícius Costa de Souza - Julho de 2005 / 42
  • Web Services com PHP Web Services com PHP SOAP Extension soap-server1.php <?php //criação de uma instância do servidor $server = new SoapServer(null, array('uri' => "http://localhost/ws/")); //definição do serviço function helloWorld($name) { return "Hello ".$name; } //registro do serviço $server->addFunction("helloWorld"); //chamada do método para atender as requisição do serviço $server->handle(); ?> Vinícius Costa de Souza - Julho de 2005 / 43
  • Web Services com PHP Web Services com PHP SOAP Extension soap-client1.php <?php // criação de uma instância do cliente $client = new SoapClient(null, array( 'location' => 'http://localhost/ws/soap-server1.php', 'uri' => 'http://localhost/ws/', 'trace' => 1); // chamada do serviço SOAP $result = $client->helloWorld('Vinícius'); // verifica erros na execução do serviço e exibe o resultado if (is_soap_fault($result)){ trigger_error("SOAP Fault: (faultcode: {$result->faultcode}, faultstring: {$result->faulstring})", E_ERROR); }else{ print_r($result); } ?> Vinícius Costa de Souza - Julho de 2005 / 44
  • Web Services com PHP Web Services com PHP Exercício 1. Implementar e testar o exemplo Vinícius Costa de Souza - Julho de 2005 / 45
  • Web Services com PHP Referências  http://www.w3.org/2002/ws/ W3C - Web Services Activity  http://sourceforge.net/projects/nusoap/ NuSOAP project page  http://www.xmlrpc.com Site oficial do XML-RPC  http://pear.php.net/package/SOAP SOAP Package  http://br.php.net/manual/pt_BR/ref.soap.php Site oficial do PHP  http://www.w3.org/TR/soap/ SOAP  http://www.w3.org/TR/wsdl WSDL  http://www.w3.org/XML/ XML  http://www.uddi.org/ Vinícius Costa de Souza - Julho de 2005 / 46
  • Web Services com PHP OBRIGADO! Vinícius Costa de Souza viniciuscs@unisinos.br www.inf.unsinos.br/~vinicius São Leopoldo, julho de 2005 Vinícius Costa de Souza - Julho de 2005 / 47