Título da
  Apresentação
        Web Services e
  Computação em Nuvem
          com PHP


Palestrante: Flávio Gomes da Silva Lisboa



                                            00/00/0000
Palestrante



Bacharel  em  Ciência  da  Computação  com  pós­graduação  em 
Aplicações  Corporativas  usando  Orientação  a  Objetos  e  Tecnologia 
Java  pela  Universidade  Tecnológica  Federal  do  Paraná.  Já  atuou 
como  programador  em  empresas  privadas  de  informática  e 
funcionário de carreira do Banco do Brasil, onde chegou a analista na 
diretoria  internacional.  Atualmente  é  consultor  tecnológico  da 
Coordenação  Estratégica  de  Tecnologia  do  Serviço  Federal  de 
Processamento de Dados (Serpro). Foi professor na pós­graduação da 
UNICID e é instrutor de cursos técnicos na Tempo Real Eventos. Foi 
membro  do  time  oficial  de  tradução  do  Zend  Framework  e  autor  de 
três  livros  sobre  o  tema.  Tem  experiência  na  área  de  Ciência  da 
Computação, com ênfase em Software Livre, atuando principalmente 
nos  seguintes  temas:  Java,  PHP,  padrões,  frameworks,  MVC  e 
objetos.
Introdução
Questão




    Espere aí, Web Services e
 Computação em Nuvem com PHP?
Mito



Mas PHP é coisa de sobrinho!
Mito


Realmente, mas de sobrinho do 
       Tio Patinhas!
PHP


       O pensamento por trás do PHP
A  web  está  mudando. É  mais  dinâmica  e  mais 
programável do que nunca. Essa novo web programável 
precisa  de  ferramentas  e  sistemas  rápidos,  seguros  e 
escaláveis que podem falar uns com os outros de uma 
maneira  que  é  tanto  útil  quanto  acessível. A  curva  de 
aprendizagem  tem  que  ser  rasa  e  os  resultados 
imediatos.
Rasmus Lerdorf
PHP


O pensamento por trás do PHP
PHP


http://streaming.serpro.gov.br/cisl/php.html




  CISL
Fatos do PHP


              PHP é uma linguagem
●   De alta performance   ●   Multiparadigma
●   Robusta               ●   Que permite 
●   Com muitas                 separação em 
     funcionalidades           camadas
●   Com extensões em C
                          ●   Tem baixo custo de 
                               treinamento
●   Multiplataforma
                          ●   Não requer doutorado 
●   Compilada                  para usar
     dinamicamente
Fatos do PHP


PHP tem várias extensões, para diversos propósitos
●   Manipulação de formatos de    ●   Banco de dados
     áudio                        ●   Sistema de arquivos
●   Serviços de autenticação      ●   Linguagem humana
●   Calendário e eventos          ●   Processamento e geração de 
                                         imagens
●   Linha de comando
                                  ●   E­mail
●   Compressão de arquivos
                                  ●   Matemática
●   Processamento de cartão de 
      crédito                     ●   Controle de Processo
●   Criptografia                  ●   Processamento de texto

●   Web services
                                  ●   etc
Fatos do PHP

Muitas Bibliotecas e Farta Documentação
Fatos do PHP

  Domínios com PHP no mundo




                                                      14/12/2010
                   http://phpadvent.org/2010/usage­statistics­by­ilia­alshanetsky
Fatos do PHP

      Quem usa PHP
Fato

         OK, JÁ ENTENDI!




PODEMOS IR PARA OS WEB SERVICES?
Reflexão


A ideia de software como produto perde sentido em um mundo 
onde não é preciso instalar programas para utilizá­los.




   Fonte: http://silvacarvalho.net
Reflexão

A metáfora de escrever software não se aplica a um mundo onde 
você precisa construir aplicações a partir de sistemas que já 
existem.
Reflexão


O modelo de lucro baseado em venda de licenças de software foi 
sobrepujado pelo modelo de venda de serviços.
O que é um serviço?

É  uma  função  independente,  sem  estado  (stateless)  que  aceita 
uma  ou  mais  requisições  e  devolve  uma  ou  mais  respostas 
através  de  uma  interface  padronizada  e  bem  definida. 

Serviços podem também realizar partes discretas de um processo 
tal  como  editar  ou  processar  uma  transação. 

Serviços  não  devem  depender  do  estado  de  outras  funções  ou 
processos.

A  tecnologia  utilizada  para  prover  o  serviço,  tal  como  uma 
linguagem de programação, não pode fazer parte da definição do 
serviço.
O que é um serviço?



Web service é uma solução utilizada na integração de sistemas e 
na comunicação entre aplicações diferentes. Com esta tecnologia 
é  possível  que  novas  aplicações  possam  interagir  com  aquelas 
que  já  existem  e  que  sistemas  desenvolvidos  em  plataformas 
diferentes sejam compatíveis.                                                               
                                                       
Os  Web  services  são  componentes  que  permitem  às  aplicações 
enviar e receber dados em formato XML. Cada aplicação pode ter 
a  sua  própria  "linguagem",  que  é  traduzida  para  uma  linguagem 
universal, o formato XML.
O que é um serviço?



      Você fala XML?

                              SIM!



                  Ah, bom, 
                   então 
                 podemos 
                 conversar.
O que é um serviço?




          XML
                      XML
O que é um serviço?




  C               XML           XML         .NET




 PHP                                        Ruby
                          XML
                                      XML


                  XML
Python                                      Java
Implicação




Não é preciso ter uma aplicação escrita 
 na mesma linguagem daquela cujos 
     serviços se deseja consumir
PHP



PHP 5 tem 13 extensões para XML.
PHP


 Existem várias classes para construir 
           webservices...




269
PHP



 Mas qual usar?
PHP



      Sugestão:
Uma infraestrutura completa para criar 
           aplicações PHP

      Zend Framework é uma poderosa 
       biblioteca de classes para PHP 
E também uma biblioteca de classes PHP 
       com baixo acoplamento
E também uma biblioteca de classes PHP 
       com baixo acoplamento




               Acoplamento das classes Zend Framework
Baixo acoplamento é importante!
Zend Framework possui classes para expor 
e consumir webservices em vários formatos




By Pixar
                                                      By Pixar
                         By Pixar




  Zend_XmlRpc              Zend_Soap                        Zend_Rest



                   Referência: Zend Framework versão 1.11
Zend_XmlRpc



XML­RPC é descrito como uma "... chamada de 
procedimento remoto usando HTTP como transporte e 
XML como codificação. XML­RPC foi projetado para ser o 
mais simples possível, permitindo que estruturas 
complexas de dados sejam transmitidas, processadas e 
devolvidas. "
Zend_XmlRpc_Client


  Chamada de método remoto

$client = new
Zend_XmlRpc_Client('http://framework.zend.com/xmlrpc');

echo $client->call('test.sayHello');
Zend_XmlRpc_Client


 Chamada de método remoto com passagem de parâmetros
$client = new
Zend_XmlRpc_Client('http://framework.zend.com/xmlrpc');

$arg1 = 1.1;
$arg2 = 'foo';

$result = $client->call('test.sayHello', array($arg1,
$arg2));
Zend_XmlRpc_Client


  Chamada de método remoto com o uso de um proxy



$client = new
Zend_XmlRpc_Client('http://framework.zend.com/xmlrpc');


$service = $client->getProxy();
$hello = $service->test->sayHello(1, 2);
Zend_XmlRpc_Client


    Exceções



●Zend_XmlRpc_Client_HttpException
●Zend_XmlRpc_Client_FaultException
Zend_XmlRpc_Server


Criando um servidor XML­RPC

$server = new Zend_XmlRpc_Server();

$server->setClass('My_Service_Class');
echo $server->handle();
Zend_XmlRpc_Server


 Namespaces

$server->setClass('My_Service_Class', 'myservice');

$server->addFunction('somefunc', 'funcs');
Zend_XmlRpc

Observação:  não  exige  descritor  de  serviços  nem  qualquer 
documentação do código PHP.




                          By Fox
Zend_Soap


SOAP, originado do acrônimo inglês Simple Object Access 
Protocol, e em português Protocolo Simples de Acesso a Objetos, 
é um protocolo para troca de informações estruturadas em uma 
plataforma descentralizada e distribuída. 
Ele se baseia na Linguagem de Marcação Extensível (XML) para 
seu formato de mensagem, e normalmente baseia­se em outros 
protocolos da Camada de aplicação, mais notavelmente em 
Chamada de Procedimento Remoto (RPC) e Protocolo de 
Transferência de Hipertexto (HTTP), para negociação e 
transmissão de mensagens. 
Zend_Soap


SOAP # SOA (Service Oriented Architecture).




                            juddi.apache.org
Zend_Soap




    De que adianta ter 
    funcionalidades se 
ninguém as conhece nem 
   sabe como usá­las?




                          Calvin, by Bill Watterson
Zend_Soap
Zend_Soap_Client


 Chamada de métodos remotos

$client = new Zend_Soap_Client("MyService.wsdl");

$result1 = $client->method1(10);

$result2 = $client->method2(22, 'some string');
Zend_Soap_Server


 Criando um servidor SOAP

$soap = new
Zend_Soap_Server("http://example.com/soap.php?wsdl");

$soap->setClass('HelloWorldService');

$soap->handle();
Zend_Soap_Server


 Gerando o WSDL automaticamente

$autodiscover = new Zend_Soap_AutoDiscover();

$autodiscover->setClass('HelloWorldService');

$autodiscover->handle();
Zend_Soap


Observação:  exige  as  tags  PHPDocumentor  @param  e  @return 
para a geração do WSDL

              /**
               *
               * @param unknown_type $arg
               * @return unknown_type
               */
Zend_Rest


REST  (Representational  State  Transfer)  é  um  estilo 
arquitetural  para  sistemas  hipermídia  distribuídos.  Teve 
origem na tese de doutorado de Roy T. Fielding.


 A  REST    é  pretendida  como  uma  imagem  do  design  da  aplicação  se 
 comportará:  uma  rede  de  websites  (um  estado  virtual),  onde  o  usuário 
 progride  com  uma  aplicação  selecionando  as  ligações  (transições  do 
 estado),  tendo  como  resultado  a  página  seguinte  (que  representa  o  estado 
 seguinte da aplicação) que está sendo transferida ao usuário e apresentada 
 para seu uso.




                                                          Roy Thomas Fielding
Zend_Rest


O  termo  REST  (...)  na  atualidade  se  usa  no  sentido  mais  amplo 
para  descrever  qualquer  interface  web  simples  que  utiliza  XML  e 
HTTP  (ou  YAML,  JSON,  ou  texto  puro),  sem  as  abstrações 
adicionais  dos  protocolos  baseados  em  padrões  de  trocas  de 
mensagem como o protocolo de serviços web SOAP.




                  SOAP                       REST
Zend_Rest_Client


  Chamada de métodos remotos

$client = new
Zend_Rest_Client('http://framework.zend.com/rest');

echo $client->sayHello('Davey', 'Day')->get();
// "Hello Davey, Good Day"
Zend_Rest_Client


 Chamada de métodos remotos



$client = new
Zend_Rest_Client('http://framework.zend.com/rest');

$client->sayHello('Davey', 'Day');
echo $client->get();
Zend_Rest_Client


    Verificação de sucesso


$result = $client->sayHello('Davey', 'Day')->get();
if ($result->isSuccess()) {

echo $result; // "Hello Davey, Good Day"

}
Zend_Rest_Server


Criando um servidor REST



$server = new Zend_Rest_Server();
$server->setClass('My_Service_Class');
$server->handle();
Zend_Rest_Server


Expondo funções



$server = new Zend_Rest_Server();
$server->addFunction('sayHello');
$server->handle();
Zend_Rest_Server


Observação: exige as tags PHPDocumentor @param e @return


             /**
              *
              * @param unknown_type $arg
              * @return unknown_type
              */
Zend_Json


Quase esquecemos do JSON!
Zend_Json_Server


Criando um servidor JSON



$server = new Zend_Json_Server();
$server->setClass('My_Service_Class');
$server->handle();
Zend Framework também inclui classes 
  prontas para consumir webservices


         Zend_Cloud     Zend_Feed       Zend_GData




     Zend_Service
Zend_Service


Zend_Service  é  uma  classe  abstrata  que  serve  como  base  para 
implementações de serviços Web, como SOAP ou REST.



As  implementações  de  Zend_Service  que  vem  com  Zend 
Framework provêem suporte para webservices populares.
Zend_Service_Akismet


O  serviço  Akismet  é  usado  para  determinar  se  dados  de  entrada 
constituem­se em um potencial spam.
Zend_Service_Amazon


Permite utilizar os webservices da Amazon
Zend_Service_Amazon_Ec2


Amazon  Elastic  Cloud  Computing  (EC2),  um  webservice  que 
permite  lançar  e  gerenciar  instâncias  de  servidores  nos  data 
centers da Amazon.




                                                   Green Lantern, by DC Comics
Zend_Service_Amazon_S3


Amazon Simple Storage Service (S3), webservices para armazenar 
e  recuperar  qualquer  quantidade  de  dados,  a  qualquer  hora,  de 
qualquer lugar.
Zend_Service_Amazon_Sqs


Amazon  Simple  Queue  Service  (SQS)  é  um  sistema  de  filas  de 
mensagens hospedadas.
Zend_Service_Audioscrobbler


Provê  acesso  ao  banco  de  dados  de  usuários,  artistas,  aĺbuns, 
faixas, tags, grupos e fóruns da Audioscrobbler.
Zend_Service_Delicious

       Registro de bookmarks
Zend_Service_DeveloperGarden


DeveloperGarden  é  a  comunidade  de  desenvolvedores  da 
Deutsche  Telekom,  que  oferece  serviços  de  chamada  de  voz  e 
SMS via APIs abertas.
Zend_Service_Ebay




Optimus Prime by Hasbro                   Bumblebee by Hasbro
Zend_Service_Flickr
Zend_Service_LiveDocx

LiveDocx  permite  gerar  documentos  a  partir  de  um  template. 
Templates  em  DOCX,  DOC,  RTF  e  TXD  podem  gerar  saída  em 
HTML, PDF e TXT. Imagens BMP, GIF, JPG, PNG e TIFF podem ser 
intercambiadas para qualquer um desse formatos, incluindo WMF.
Zend_Service_Nirvanix


Provê  um  Internet  Media  File  System  (IMFS),  um  serviço  de 
armazenamento de arquivos via Internet.




                   Asterix, Obelix, Ideiafix and Panoramix, by Goscinny and Uderzo
Zend_Service_Recaptcha




       X XXX
Zend_Service_ShortUrl
Zend_Service_Slideshare
Zend_Service_Strikeiron




Provê serviços de verificação de e­mail, verificação de endereços, 
verificação  de  número  de  telefones,  cálculo  de  taxa  de  entrega, 
alertas e notificações SMS.




Mas...
                                      Captain America and Alpha Weapon/Vindix/Guardian, by Marvel
Zend_Service_Technorati


Technorati é um mecanismo de busca de blogs
Zend_Service_Twitter
Zend_Service_WindowsAzure


WindowsAzure  é  o  ambiente  de  gerenciamento,  hospedagem  e 
desenvolvimento de serviços em nuvem da Microsoft.
Zend_Service_Yahoo
Zend_Feed


RSS (Really Simple Syndication) também é um serviço
Zend_GData
Computação em Nuvem
Computação em Nuvem




       web services
Zend_GData
Zend_Cloud


Serviço de Documentos                          Serviço de Filas




                        Serviço de Armazenamento
Zend_Cloud


  Serviço de Documentos
                          Zend_Cloud_Adapter Serviço de Filas

Serviço de documentos     Serviço de filas   Serviço de armazenamento




                                Serviço de Armazenamento
Zend_Cloud




Escolha a nuvem!
Dica: para brincar
Mais informações


                            Zend Framework




http://framework.zend.com/manual                   http://devzone.zend.com



                    Computação em Nuvem com PHP



http://www.ibm.com/developerworks/web/library/os­php­
cloud1/index.html
http://www.ibm.com/developerworks/opensource/library/os­cloud­
realities1/index.html
Literatura Zend Framework




      Amazon.com: 70 resultados para Zend Framework
ALGUMA 
      Questões

PERGUNTA
    ?
Contato


         flavio.lisboa@serpro.gov.br
                     @fgsl
                 www.fgsl.eti.br
http://romocavaleirodoespaco.blogspot.com

FISL12. Web Services e Computação em Nuvem com PHP