SlideShare ist ein Scribd-Unternehmen logo
1 von 47
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

REST API Design & Development
REST API Design & DevelopmentREST API Design & Development
REST API Design & DevelopmentAshok Pundit
 
Introduction to API
Introduction to APIIntroduction to API
Introduction to APIrajnishjha29
 
What is API - Understanding API Simplified
What is API - Understanding API SimplifiedWhat is API - Understanding API Simplified
What is API - Understanding API SimplifiedJubin Aghara
 
Introdução a poo
Introdução a pooIntrodução a poo
Introdução a pooSedu
 
Web Services PHP Tutorial
Web Services PHP TutorialWeb Services PHP Tutorial
Web Services PHP TutorialLorna Mitchell
 
Understanding REST
Understanding RESTUnderstanding REST
Understanding RESTNitin Pande
 
Aula03 - protocolo http
Aula03 -  protocolo httpAula03 -  protocolo http
Aula03 - protocolo httpCarlos Veiga
 
Php pattern matching
Php pattern matchingPhp pattern matching
Php pattern matchingJIGAR MAKHIJA
 
[2018] Java를 위한, Java에 의한 도구들
[2018] Java를 위한, Java에 의한 도구들[2018] Java를 위한, Java에 의한 도구들
[2018] Java를 위한, Java에 의한 도구들NHN FORWARD
 
關於SQL Injection的那些奇技淫巧
關於SQL Injection的那些奇技淫巧關於SQL Injection的那些奇技淫巧
關於SQL Injection的那些奇技淫巧Orange Tsai
 
PHP Aula07 - conexão Com Banco de Dados
PHP Aula07 - conexão Com Banco de DadosPHP Aula07 - conexão Com Banco de Dados
PHP Aula07 - conexão Com Banco de DadosDaniel Brandão
 
Comparativo nagios zabbix
Comparativo nagios zabbixComparativo nagios zabbix
Comparativo nagios zabbixaliguierimb
 

Was ist angesagt? (20)

REST API Design & Development
REST API Design & DevelopmentREST API Design & Development
REST API Design & Development
 
PHP MVC
PHP MVCPHP MVC
PHP MVC
 
API Basics
API BasicsAPI Basics
API Basics
 
Introduction to API
Introduction to APIIntroduction to API
Introduction to API
 
What is API - Understanding API Simplified
What is API - Understanding API SimplifiedWhat is API - Understanding API Simplified
What is API - Understanding API Simplified
 
Linguagem PHP
Linguagem PHPLinguagem PHP
Linguagem PHP
 
Introdução a poo
Introdução a pooIntrodução a poo
Introdução a poo
 
Web Services PHP Tutorial
Web Services PHP TutorialWeb Services PHP Tutorial
Web Services PHP Tutorial
 
RESTful API - Best Practices
RESTful API - Best PracticesRESTful API - Best Practices
RESTful API - Best Practices
 
Understanding REST
Understanding RESTUnderstanding REST
Understanding REST
 
Aula03 - protocolo http
Aula03 -  protocolo httpAula03 -  protocolo http
Aula03 - protocolo http
 
API for Beginners
API for BeginnersAPI for Beginners
API for Beginners
 
Php pattern matching
Php pattern matchingPhp pattern matching
Php pattern matching
 
[2018] Java를 위한, Java에 의한 도구들
[2018] Java를 위한, Java에 의한 도구들[2018] Java를 위한, Java에 의한 도구들
[2018] Java를 위한, Java에 의한 도구들
 
關於SQL Injection的那些奇技淫巧
關於SQL Injection的那些奇技淫巧關於SQL Injection的那些奇技淫巧
關於SQL Injection的那些奇技淫巧
 
PHP Aula07 - conexão Com Banco de Dados
PHP Aula07 - conexão Com Banco de DadosPHP Aula07 - conexão Com Banco de Dados
PHP Aula07 - conexão Com Banco de Dados
 
Api Testing
Api TestingApi Testing
Api Testing
 
gRPC with java
gRPC with javagRPC with java
gRPC with java
 
Comparativo nagios zabbix
Comparativo nagios zabbixComparativo nagios zabbix
Comparativo nagios zabbix
 
Api presentation
Api presentationApi presentation
Api presentation
 

Andere mochten auch

Como implementar APIs RESTful em PHP
Como implementar APIs RESTful em PHPComo implementar APIs RESTful em PHP
Como implementar APIs RESTful em PHPPablo Aguiar
 
Web Services (in portuguese)
Web Services (in portuguese)Web Services (in portuguese)
Web Services (in portuguese)Bruno Pedro
 
Curso de PHP Básico ao Avançado
Curso de PHP Básico ao AvançadoCurso de PHP Básico ao Avançado
Curso de PHP Básico ao AvançadoLuiz Junior
 
Criando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSONCriando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSONAmbiente Livre
 
Direito apostila de criminologia
Direito   apostila de criminologiaDireito   apostila de criminologia
Direito apostila de criminologiaJorginho Jhj
 
Erlang e Elixir por uma web mais feliz
Erlang e Elixir por uma web mais felizErlang e Elixir por uma web mais feliz
Erlang e Elixir por uma web mais felizBruno Henrique - Garu
 
Web Services
Web ServicesWeb Services
Web Servicescodebits
 
Tirando Certificação PHP
Tirando Certificação PHPTirando Certificação PHP
Tirando Certificação PHPFernando Chucre
 
Essay about event driven architecture
Essay about event driven architectureEssay about event driven architecture
Essay about event driven architecturePaulo Victor Gomes
 
Leveraging a distributed architecture to your advantage
Leveraging a distributed architecture to your advantageLeveraging a distributed architecture to your advantage
Leveraging a distributed architecture to your advantageMichelangelo van Dam
 
Creating And Consuming Web Services In Php 5
Creating And Consuming Web Services In Php 5Creating And Consuming Web Services In Php 5
Creating And Consuming Web Services In Php 5Michael Girouard
 
Criando Sites Dinamicos com Joomla php
Criando Sites Dinamicos com Joomla phpCriando Sites Dinamicos com Joomla php
Criando Sites Dinamicos com Joomla phpJackson Meires
 
Joomla! para iniciantes - Djonatan Buss, Jerônimo Medina Madruga
Joomla! para iniciantes - Djonatan Buss, Jerônimo Medina MadrugaJoomla! para iniciantes - Djonatan Buss, Jerônimo Medina Madruga
Joomla! para iniciantes - Djonatan Buss, Jerônimo Medina MadrugaTchelinux
 

Andere mochten auch (20)

Como implementar APIs RESTful em PHP
Como implementar APIs RESTful em PHPComo implementar APIs RESTful em PHP
Como implementar APIs RESTful em PHP
 
Jquery fundamentals-book-pt-br
Jquery fundamentals-book-pt-brJquery fundamentals-book-pt-br
Jquery fundamentals-book-pt-br
 
Web Services (in portuguese)
Web Services (in portuguese)Web Services (in portuguese)
Web Services (in portuguese)
 
Curso de PHP Básico ao Avançado
Curso de PHP Básico ao AvançadoCurso de PHP Básico ao Avançado
Curso de PHP Básico ao Avançado
 
Criando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSONCriando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSON
 
Glosario de terminos tecnologicos
Glosario de terminos tecnologicosGlosario de terminos tecnologicos
Glosario de terminos tecnologicos
 
Abnt -normas
Abnt  -normasAbnt  -normas
Abnt -normas
 
Contenidos Digitales Interactivos
Contenidos Digitales InteractivosContenidos Digitales Interactivos
Contenidos Digitales Interactivos
 
Direito apostila de criminologia
Direito   apostila de criminologiaDireito   apostila de criminologia
Direito apostila de criminologia
 
Links Variados
Links VariadosLinks Variados
Links Variados
 
Erlang e Elixir por uma web mais feliz
Erlang e Elixir por uma web mais felizErlang e Elixir por uma web mais feliz
Erlang e Elixir por uma web mais feliz
 
Web Services
Web ServicesWeb Services
Web Services
 
Tirando Certificação PHP
Tirando Certificação PHPTirando Certificação PHP
Tirando Certificação PHP
 
Essay about event driven architecture
Essay about event driven architectureEssay about event driven architecture
Essay about event driven architecture
 
Leveraging a distributed architecture to your advantage
Leveraging a distributed architecture to your advantageLeveraging a distributed architecture to your advantage
Leveraging a distributed architecture to your advantage
 
Creating And Consuming Web Services In Php 5
Creating And Consuming Web Services In Php 5Creating And Consuming Web Services In Php 5
Creating And Consuming Web Services In Php 5
 
Criando Sites Dinamicos com Joomla php
Criando Sites Dinamicos com Joomla phpCriando Sites Dinamicos com Joomla php
Criando Sites Dinamicos com Joomla php
 
Como Instalar o Joomla no micro
Como Instalar o Joomla no microComo Instalar o Joomla no micro
Como Instalar o Joomla no micro
 
Joomla! para iniciantes - Djonatan Buss, Jerônimo Medina Madruga
Joomla! para iniciantes - Djonatan Buss, Jerônimo Medina MadrugaJoomla! para iniciantes - Djonatan Buss, Jerônimo Medina Madruga
Joomla! para iniciantes - Djonatan Buss, Jerônimo Medina Madruga
 
Joomla! CMS
Joomla! CMSJoomla! CMS
Joomla! CMS
 

Ähnlich wie PHP Web Services Curso

Ähnlich wie PHP Web Services Curso (20)

Web Service - XML
Web Service - XMLWeb Service - XML
Web Service - XML
 
Web Services - Grupo F
Web Services - Grupo FWeb Services - Grupo F
Web Services - Grupo F
 
Web services
Web servicesWeb services
Web services
 
WebServices-XML
WebServices-XMLWebServices-XML
WebServices-XML
 
A Estrutura de um Web Service
A Estrutura de um Web ServiceA Estrutura de um Web Service
A Estrutura de um Web Service
 
Monica vasconcelos
Monica vasconcelosMonica vasconcelos
Monica vasconcelos
 
Monica vasconcelos (1)
Monica vasconcelos (1)Monica vasconcelos (1)
Monica vasconcelos (1)
 
Monica vasconcelos
Monica vasconcelosMonica vasconcelos
Monica vasconcelos
 
SOA e Web Services
SOA e Web ServicesSOA e Web Services
SOA e Web Services
 
Web services
Web  servicesWeb  services
Web services
 
Webservices
WebservicesWebservices
Webservices
 
Web Services
Web ServicesWeb Services
Web Services
 
Web service
Web serviceWeb service
Web service
 
WebServices
WebServicesWebServices
WebServices
 
Maratona JBoss 2010 - JBossWS
Maratona JBoss 2010 -  JBossWSMaratona JBoss 2010 -  JBossWS
Maratona JBoss 2010 - JBossWS
 
04 - Felipe Oliveira - Think Decoupled! (SOA)
04 - Felipe Oliveira - Think Decoupled! (SOA)04 - Felipe Oliveira - Think Decoupled! (SOA)
04 - Felipe Oliveira - Think Decoupled! (SOA)
 
Web Services Xml
Web Services XmlWeb Services Xml
Web Services Xml
 
WebServices intro
WebServices introWebServices intro
WebServices intro
 
Webservices e Xml
Webservices e XmlWebservices e Xml
Webservices e Xml
 
Sistemas Distribuídos - Comunicação Distribuída – Web Services
Sistemas Distribuídos - Comunicação Distribuída – Web ServicesSistemas Distribuídos - Comunicação Distribuída – Web Services
Sistemas Distribuídos - Comunicação Distribuída – Web Services
 

Mehr von elliando dias

Clojurescript slides
Clojurescript slidesClojurescript slides
Clojurescript slideselliando dias
 
Why you should be excited about ClojureScript
Why you should be excited about ClojureScriptWhy you should be excited about ClojureScript
Why you should be excited about ClojureScriptelliando dias
 
Functional Programming with Immutable Data Structures
Functional Programming with Immutable Data StructuresFunctional Programming with Immutable Data Structures
Functional Programming with Immutable Data Structureselliando dias
 
Nomenclatura e peças de container
Nomenclatura  e peças de containerNomenclatura  e peças de container
Nomenclatura e peças de containerelliando dias
 
Polyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better AgilityPolyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better Agilityelliando dias
 
Javascript Libraries
Javascript LibrariesJavascript Libraries
Javascript Librarieselliando dias
 
How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!elliando dias
 
A Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the WebA Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the Webelliando dias
 
Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduinoelliando dias
 
Incanter Data Sorcery
Incanter Data SorceryIncanter Data Sorcery
Incanter Data Sorceryelliando dias
 
Fab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine DesignFab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine Designelliando dias
 
The Digital Revolution: Machines that makes
The Digital Revolution: Machines that makesThe Digital Revolution: Machines that makes
The Digital Revolution: Machines that makeselliando dias
 
Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.elliando dias
 
Hadoop and Hive Development at Facebook
Hadoop and Hive Development at FacebookHadoop and Hive Development at Facebook
Hadoop and Hive Development at Facebookelliando dias
 
Multi-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case StudyMulti-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case Studyelliando dias
 

Mehr von elliando dias (20)

Clojurescript slides
Clojurescript slidesClojurescript slides
Clojurescript slides
 
Why you should be excited about ClojureScript
Why you should be excited about ClojureScriptWhy you should be excited about ClojureScript
Why you should be excited about ClojureScript
 
Functional Programming with Immutable Data Structures
Functional Programming with Immutable Data StructuresFunctional Programming with Immutable Data Structures
Functional Programming with Immutable Data Structures
 
Nomenclatura e peças de container
Nomenclatura  e peças de containerNomenclatura  e peças de container
Nomenclatura e peças de container
 
Geometria Projetiva
Geometria ProjetivaGeometria Projetiva
Geometria Projetiva
 
Polyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better AgilityPolyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better Agility
 
Javascript Libraries
Javascript LibrariesJavascript Libraries
Javascript Libraries
 
How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!
 
Ragel talk
Ragel talkRagel talk
Ragel talk
 
A Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the WebA Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the Web
 
Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduino
 
Minicurso arduino
Minicurso arduinoMinicurso arduino
Minicurso arduino
 
Incanter Data Sorcery
Incanter Data SorceryIncanter Data Sorcery
Incanter Data Sorcery
 
Rango
RangoRango
Rango
 
Fab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine DesignFab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine Design
 
The Digital Revolution: Machines that makes
The Digital Revolution: Machines that makesThe Digital Revolution: Machines that makes
The Digital Revolution: Machines that makes
 
Hadoop + Clojure
Hadoop + ClojureHadoop + Clojure
Hadoop + Clojure
 
Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.
 
Hadoop and Hive Development at Facebook
Hadoop and Hive Development at FacebookHadoop and Hive Development at Facebook
Hadoop and Hive Development at Facebook
 
Multi-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case StudyMulti-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case Study
 

PHP Web Services Curso

  • 1. Minicurso Web Services com PHP Vinícius Costa de Souza viniciuscs@unisinos.br http://www.inf.unisinos.br/~vinicius julho de 2005
  • 2. 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
  • 3. 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
  • 4. 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
  • 5. 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
  • 6. 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
  • 7. Web Services com PHP Web Services Tecnologias Vinícius Costa de Souza - Julho de 2005 / 7
  • 8. 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
  • 9. 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
  • 10. 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
  • 11. Web Services com PHP Tecnologias WSDL  Camadas de descrição dos serviços Vinícius Costa de Souza - Julho de 2005 / 11
  • 12. 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
  • 13. 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
  • 14. 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
  • 15. Web Services com PHP Tecnologias SOAP  Envelope, Cabeçalho e Corpo das mensagens SOAP Vinícius Costa de Souza - Julho de 2005 / 15
  • 16. Web Services com PHP Tecnologias SOAP Invocação do serviço utilizando SOAP Vinícius Costa de Souza - Julho de 2005 / 16
  • 17. 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
  • 18. Web Services com PHP Tecnologias UDDI UDDI utilizado para descobrir um Web Service Vinícius Costa de Souza - Julho de 2005 / 18
  • 19. 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
  • 20. 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
  • 21. 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
  • 22. 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
  • 23. 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
  • 24. 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
  • 25. 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
  • 26. 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
  • 27. 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
  • 28. 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
  • 29. 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
  • 30. 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
  • 31. 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
  • 32. 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
  • 33. 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
  • 34. 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
  • 35. Web Services com PHP Web Services com PHP Vinícius Costa de Souza - Julho de 2005 / 35
  • 36. 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
  • 37. 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
  • 38. 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
  • 39. 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
  • 40. 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
  • 41. 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
  • 42. 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
  • 43. 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
  • 44. 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
  • 45. 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
  • 46. 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
  • 47. 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