sca & sdo - uma introdução
TRANSCRIPT
SCA(Service Component Architecture)
SDO(Service Data Objects)
&
Uma Introdução
(Service Component Architecture) (Service Data Objects)
Silvano Girardi [email protected]://www.silvano.pro.br
SCA & SDO – Uma Introdução
Apresentação
N l d Ri A l P á• Natural de Rio Azul, Paraná• Morando em Florianópolis há 8 anos• Gerente de Desenvolvimento de Aplicações
da InPhonex.com, empresa americana , pprovedora de serviço VoIP
• Membro do PHPSCMembro do PHPSC• Contribuições para PEAR e SCA_SDO
Silvano Girardi Jr. – PHPSC Conf - 2008 2
SCA & SDO – Uma Introdução
Agenda
Vi ã g l• Visão geral• História• SCA • SDO• Avaliação• Referências• Perguntas?• Agradecimentos
Silvano Girardi Jr. – PHPSC Conf - 2008
Agradecimentos
3
SCA & SDO – Uma Introdução
O que é isso?! • SCA
S i C t A hit t– Service Component Architecture– Arquitetura de Componentes de Serviço“SCA possibilita ao desenvolvedor PHP criar componentes SCA possibilita ao desenvolvedor PHP criar componentes reutilizáveis que podem ser chamados de diversas maneiras, com mínimo esforço.”
• SDO– Service Data Object– Objeto de Dados de Serviço“SDO possibilita que uma aplicação trabalhe com dados de diferentes fontes (como exemplos: um arquivo XML um banco de
Silvano Girardi Jr. – PHPSC Conf - 2008 4
diferentes fontes (como exemplos: um arquivo XML, um banco de dados, uma planilha) utilizando uma única interface.”
SCA & SDO – Uma Introdução
Agenda
Vi ã g l• Visão geral• História• SCA • SDO• Avaliação• Referências• Perguntas?• Agradecimentos
Silvano Girardi Jr. – PHPSC Conf - 2008 5
Agradecimentos
SCA & SDO – Uma Introdução
História – SCA & SDO
• SOA – Service Oriented Architecture
• Versão 0.9 – Novembro de 2005• OSOA – Open Service Oriented Architecturep• Zend, IBM, Sybase, Oracle, BEA, entre outros.
• Versão 1.0 – Março de 2007• OASIS - Organization for the Advancement of Structured Information
Standards
Silvano Girardi Jr. – PHPSC Conf - 2008
Standards
6
SCA & SDO – Uma Introdução
História – SCA & SDO Para PHP
Julho 2005 Implementação de SDO em PHP enviada para o PHP PECL pela IBM• Julho 2005 – Implementação de SDO em PHP enviada para o PHP PECL pela IBM
• Novembro 2005 – Um grupo de empresas, incluindo IBM, anunciam união para desenvolvimento das especificações para SCA e SDO
• Março 2006 – PHP SDO v1.0.0 (primeira versão estável)
• Agosto 2006 – PHP SDO v1.0.3 (agora depende da implementação SDO Tuscany C++ do Apache
• Setembro 2006 – PHP SCA v0.1.0 (primeira versão lançada)
• Novembro 2006 – PHP SCA_SDO v1.1.0 (combinados SDO e SCA)
• Maio 2007 – PHP SCA_SDO v1.2.0 (com bindings plugáveis)
• Junho 2007 – PHP SCA_SDO v1.2.2 (binding para eBay SOAP)
Silvano Girardi Jr. – PHPSC Conf - 2008
• Março 2008 – PHP SCA_SDO v1.2.4 (versão atual)
7
SCA & SDO – Uma Introdução
Agenda
Vi ã g l• Visão geral• História• SCA • SDO• Avaliação• Referências• Perguntas?• Agradecimentos
Silvano Girardi Jr. – PHPSC Conf - 2008 8
Agradecimentos
SCA & SDO – Uma Introdução
SCA
E i á i i d i b i SOAP REST JSON RPC • Existem várias maneiras de criar webservices: SOAP, REST, JSON-RPC, ATOM, XMLRPC, e muitas outras. (Cada uma com seus pontos fortes e fracos)
• Disponibiliza uma maneira consistente de trabalhar com diferentes “estilos” de webservices
• Uma linha de código pode significar a diferença entre disponibilizar um serviço via SOAP, JSON-RPC ou REST, por exemplo
• Uma linha de código também pode significar a diferença de como uma dependência (serviço) será chamada
Silvano Girardi Jr. – PHPSC Conf - 2008
p ( ç )
9
SCA & SDO – Uma Introdução
Separe as preocupaçõesSepare as preocupações(Reusabilidade!)
M h d ó i d d “ ”Mantenha a regra de negócio separada das “amarras”
1. Mantenha a regra de negócio independente de como ela será encontrada e i i drequisitada
◦ Disponibilize quantos “bindings” forem necessários – certifique-se de quesua regra de negócio não precisa saber como ela foi chamada.
2. Mantenha a regra de negócio independente de como chamar os serviços dos quais que ela depende
Declare as dependências mas certifiq e se de q e s a regra de negócio◦ Declare as dependências – mas certifique-se de que sua regra de negócionão precisa saber como resolvê-las
◦ De preferência, use alguma outra maneira para “amarrar” os componentes. (Padrões como Inversão de Controle Injeção de Dependências)
Silvano Girardi Jr. – PHPSC Conf - 2008
(Padrões como Inversão de Controle, Injeção de Dependências)
10
SCA & SDO – Uma Introdução
Entendendo os diagramas
Serviço Componente
Referência Amarras (wires)
Pode ser Composite
Um componentelocal
local, soap, json, rest,
etc.
Pode ser local, soap, json, rest,
etcUm componente
com a regra de negócio
Um Webservice
etc.
Silvano Girardi Jr. – PHPSC Conf - 2008 11
SCA & SDO – Uma Introdução
Um Componente PHP Simples
<?php <?php<?php
/*** Componente Saudação*/
<?php
require_once 'Saudacao.php';
$saudacao = new Saudacao();*/class Saudacao{
/**@ $
$saudacao new Saudacao();echo $saudacao->digaOla('Santa Catarina');
?>
* @param string $nome* @return string*/
public function digaOla($nome) {return 'Ola ' . $nome;
}}
Silvano Girardi Jr. – PHPSC Conf - 2008
?>
12
SCA & SDO – Uma Introdução
Um Componente PHP Simples com SCA
<?php <?phpp p
include ‘SCA/SCA.php’;
/*** Componente Saudação
<?php
include ‘SCA/SCA.php';
$ d SCA g tS i ('S d h ') Componente Saudação* * @service*/
class Saudacao{
$saudacao = SCA::getService('Saudacao.php');echo $saudacao->digaOla(‘Santa Catarina');
?>{
/*** @param string $nome* @return string*/public function digaOla($nome) {public function digaOla($nome) {
return 'Ola ' . $nome;}
}
?>
Silvano Girardi Jr. – PHPSC Conf - 2008 13
SCA & SDO – Uma Introdução
Um Serviço SOAP com SCA
<?php <?phpp p
include ‘SCA/SCA.php’;
/*** Componente Saudação
<?php// consumindo com SCAinclude ‘SCA/SCA.php';
$ d Componente Saudação* * @service* @binding.soap*/
class Saudacao
$saudacao = SCA::getService('http://www.exemplo.org/Saudacao.php?wsdl');echo $saudacao->digaOla(‘Santa Catarina');
class Saudacao{
/*** @param string $nome* @return string*/
// consumindo com a extensão PHP SOAP$saudacao = newSoapClient('http://www.exemplo.org/Saudacao.php?wsdl');
h $ d >dig Ol ( (' ' > ‘S t C t i '))/public function digaOla($nome) {
return 'Ola ' . $nome;}
}
echo $saudacao->digaOla(array('nome' => ‘Santa Catarina'))->digaOlaReturn;
?>
Silvano Girardi Jr. – PHPSC Conf - 2008
?>
14
SCA & SDO – Uma Introdução
Bindings – Os Diversos Estilos
Como provedor de serviços, clientes diferentes preferem ou precisam de “estilos” diferentes.p ç , p p
Como consumidor de serviços, não existe um único “estilo” suportado por todos os provedores de serviços.
• Service-oriented
– soap
– jsonrpc
– xmlrpc
– restrpc (GET+/methodname?param)
– local
• Resource-oriented
– restresource (GET/PUT/POST/DELETE)
t– atom
– rss
• Other
– message
Silvano Girardi Jr. – PHPSC Conf - 2008
– ebaysoap
– simpledb
15
SCA & SDO – Uma Introdução
Serviços SOAP + JSON-RPC com SCA
<?php <?phpp p
include ‘SCA/SCA.php’;
/*** Componente Saudação
<?php
include ‘SCA/SCA.php';
// i i SOAP Componente Saudação* * @service* @binding.soap* @binding.jsonrpc*/
// consumir serviço SOAP$saudacao = SCA::getService('http://www.exemplo.com/Saudacao.php?wsdl');echo $saudacao->digaOla(‘Santa Catarina');
/class Saudacao{
/*** @param string $nome* @return string
// consumir serviço JSON-RPC$saudacao = SCA::getService('http://www.exemplo.com/Saudacao.php?smd');
h $ d >dig Ol (‘S t C t i ') @return string*/public function digaOla($nome) {
return 'Ola ' . $nome;}
}
echo $saudacao->digaOla(‘Santa Catarina');
?>
Silvano Girardi Jr. – PHPSC Conf - 2008
}
?>
16
SCA & SDO – Uma Introdução
Referenciando outros Serviços
<?php <?phpp p
include 'SCA/SCA.php';
/*** Greeting Component
<?php
include 'SCA/SCA.php';
/*** Saluto Componente Greeting Component
* * @service* @binding.xmlrpc*/class Greeting
* Saluto Componente* * @service* @binding.restrpc*/class Salutoclass Greeting
{/*** @param string $name* @return string*/
class Saluto{
/*** @param string $nome* @return string*//
public function sayHello($name) {return 'Hello' . $name;
}
?>
*/public function direCiao($nome) {
return 'Ciao ' . $nome;}
}
Silvano Girardi Jr. – PHPSC Conf - 2008 17
?>?>
SCA & SDO – Uma Introdução
Referenciando outros Serviços
Serviço
ServiçoSaudação
Saluto
saudar.php
‘Santa Catarina’, ‘en’
ServiçoGreeting
‘Hello Santa Catarina’
Greeting
Silvano Girardi Jr. – PHPSC Conf - 2008 18
SCA & SDO – Uma Introdução
<?php
Referenciando outros Serviçosp p
include 'SCA/SCA.php';
/*** Componente Saudação* * @service* @binding.soap /**g p* @binding.jsonrpc*/
class Saudacao{
/*** @reference* @binding.xmlrpc http://www.example.org/Greeting.php*/
/* @reference* @binding.xmlrpc http://www.example.org/Greeting.php*/public $saudacao_en;
/public $saudacao_en;
/*** @reference* @binding.restrpc http://www.esempio.org/Saluto.php*/
public $saudacao_it;
/*** @reference* @binding.restrpc http://www.esempio.org/Saluto.php*/
/*** @param string $nome* @param string $idioma* @return string*/
public function digaOla($nome, $idioma) {
switch ( $idioma ) {
/public $saudacao_it;
case ‘en’:return $this->saudacao en->sayHello($nome);
case ‘en’:return $this->saudacao_en->sayHello($nome);break;
case ‘it’:return $this->saudacao_it->direCiao($nome);break;
default:return 'Ola ' . $nome;
return $this >saudacao_en >sayHello($nome);break;
case ‘it’:return $this->saudacao_it->direCiao($nome);break;
Silvano Girardi Jr. – PHPSC Conf - 2008
}}
}?>
19
Serviço deCatálogo
Serviço CallbackDe Pagamento
SOAP
PHP
Serviço deCarrinho de Compras
Serviço dePagamentoSOAP
eServiceWallet(Java Impl)
SOAPPHP
Serviço de
Serviço deLogin
PedidosApp
Dashboardde Negócios
PHP Atom feedPHP
Processamento dePedidos
çLog de Eventos App
JMS
eServiceStoreServiço de
Status de Pedido
CallbackProcessamento de
Pedidos
JMS
PHP SOAP
JSON
eServiceStore
Warehouse Local
Warehouse Warehouse
PHP
Warehouse broker
App
JMS Warehouse RemotaSOAP
SCA & SDO – Uma Introdução
Agenda
Vi ã g l• Visão geral• História• SCA • SDO• Avaliação• Referências• Perguntas?• Agradecimentos
Silvano Girardi Jr. – PHPSC Conf - 2008 21
Agradecimentos
SCA & SDO – Uma Introdução
Mas só posso usar escalares com SCA?
(escalar é uma variável que aceita um único valor por vez exemplo: inteiro string float)(escalar é uma variável que aceita um único valor por vez, exemplo: inteiro, string, float)
Respondendo à pergunta:
NÃO!NÃO!
Solução: SDO
Silvano Girardi Jr. – PHPSC Conf - 2008 22
SCA & SDO – Uma Introdução
SDO
“SDO possibilita que uma aplicação trabalhe com dados de diferentes fontesSDO possibilita que uma aplicação trabalhe com dados de diferentes fontes(como exemplos: um arquivo XML, um banco de dados, uma planilha)
utilizando uma única interface.”
Formado por 4 partes:• Service Data Objects (SDO)
– O objeto de dados manipulado dentro de um script PHP• Data Access Service (DAS)
– Disponibiliza meios de ler e escrever dados de/em uma fonte de dados• Type Model
– Descreve tipos de SDOs e tipos primitivos que podem aparecer (válidos) na estrutura do SDO. Pode ser criado através de uma API ou pela leitura de um XSD (no caso de um XML DAS)
• Change Summary– Registra as alterações de dados que ocorrem durante a execução do script. É utilizado pelo DAS
para escrever dados de volta à fonte de dados.
Silvano Girardi Jr. – PHPSC Conf - 2008 23
SCA & SDO – Uma Introdução
SDO
Dados Type Model
SDO_DataObject SDO_DAS_Relational BDBD
ChangeSummary
Silvano Girardi Jr. – PHPSC Conf - 2008 24
SCA & SDO – Uma Introdução
SDO
Dados Type Model
SDO_DataObject SDO_DAS_XML XML
ChangeSummary
Silvano Girardi Jr. – PHPSC Conf - 2008 25
SCA & SDO – Uma Introdução
SDO no SCA
• Utilizado para trabalhar com tipos complexos• Utilizado para trabalhar com tipos complexos– Ex: um pedido de compra, um endereço, etc.
• Suporte nativoSuporte nativo– Criação de SDO_DataObjects utilizando o método
createDataObject() diretamente em um serviço criado via SCA::getService()
• Não fica restrito apenas à utilização do SDO pelo método nativo do SCA. É possível utilizar o SDO de forma independente
• Utiliza SDO_DAS_XML como interface e XSD (XML SchemaDefinition) para descrever os tipos complexos
Silvano Girardi Jr. – PHPSC Conf - 2008 26
SCA & SDO – Uma Introdução
Vejamos na prática
O serviço de Saudação recebeu uma atualização e agora O serviço de Saudação recebeu uma atualização e agora não trabalha mais com um parâmetro string “nome”.
Agora é necessário enviar como parâmetro um tipo complexo “Pessoa” cuja estrutura é a seguinte:complexo Pessoa , cuja estrutura é a seguinte:
Tipo: Pessoa
Propriedades:nomenomesobrenomeemail
Silvano Girardi Jr. – PHPSC Conf - 2008
lista de telefones
27
SCA & SDO – Uma Introdução
O XSD
<?xml version="1.0" encoding="UTF-8"?>g<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="urn://Pessoa" xmlns:tns="urn://Pessoa">
<xs:element name="Pessoa"><xs:complexType>
<xs:sequence>xs:sequence<xs:element name="nome" type="xs:string" /><xs:element name="sobrenome" type="xs:string" /><xs:element name="email" type="xs:string" /><xs:element name="telefone" type="tns:telefone" maxOccurs="unbounded" />
</xs:sequence></xs:sequence></xs:complexType>
</xs:element>
<xs:complexType name="telefone"><xs:sequence><xs:sequence>
<xs:element name="ddd" type="xs:string" /><xs:element name="numero" type="xs:string" />
</xs:sequence></xs:complexType>
Silvano Girardi Jr. – PHPSC Conf - 2008
</xs:schema>
28
SCA & SDO – Uma Introdução
O Serviço Saudação Atualizado<?php
include ‘SCA/SCA.php’;
/*** Componente Saudação* * @service @service* @binding.soap* @types urn://Pessoa Pessoa.xsd*/
class Saudacao{
/*** @param Pessoa $Pessoa urn://Pessoa* @return string*/public function digaOla($Pessoa) {
return 'Ola ' . $Pessoa->nome . ‘ ‘ . $Pessoa->sobrenome;}
Silvano Girardi Jr. – PHPSC Conf - 2008 29
}
?>
SCA & SDO – Uma Introdução
Script saudar.php Atualizado<?phpinclude ‘SCA/SCA.php';
$saudacao = SCA::getService('http://www exemplo com/Saudacao php?wsdl');$saudacao = SCA::getService( http://www.exemplo.com/Saudacao.php?wsdl );
// criar SDO pessoa$pessoa = $saudacao->createDataObject('urn://Pessoa', 'Pessoa');$pessoa->nome = ‘Silvano’;$pessoa->sobrenome = ‘Girardi Jr.’;$pessoa->email = ‘[email protected]’;
// criar SDO telefone, dentro do SDO pessoa$telefone $pessoa >createDataObject('telefone');$telefone = $pessoa->createDataObject('telefone');$telefone->ddd = ‘48’;$telefone->numero = ‘5555 5555’;
// adicionando outro SDO telefone dentro da lista de telefones do SDO pessoa$telefone = $pessoa->createDataObject('telefone');$telefone->ddd = ‘48’;$telefone->numero = ‘9999 9999’;
h $ d dig Ol ($ )
Silvano Girardi Jr. – PHPSC Conf - 2008 30
echo $saudacao->digaOla($pessoa);
?>
SCA & SDO – Uma Introdução
Agenda
Vi ã g l• Visão geral• História• SCA • SDO• Avaliação• Referências• Perguntas?• Agradecimentos
Silvano Girardi Jr. – PHPSC Conf - 2008 31
Agradecimentos
SCA & SDO – Uma Introdução
Avaliação• Custo– Gratuitos e open source
• Instalação licença e contribuições• Instalação, licença e contribuições– Disponível no PECL– Licença Apache 2.0– É fácil contribuir
• Através da lista de discussãoAtravés de produção de código• Através de produção de código
– Para contribuir com código é preciso assinar um termo: CLA – Contributor’s License Agreement
• Nem tudo são flores– Documentação escassa e desatualizada, além de estar parte no manual do PHP, parte no site OSOA
á ã f– Algumas áreas não finalizadas– Desenvolvimento atual está lento
• Prós– O ganho em produtividade é indiscutível– Cumprem muito bem o papel ao qual se propõem– Possibilidade de criar outros bindings
• Futuro– SCA: http://www.osoa.org/display/PHP/SCA+Wish+List– SDO: http://www.osoa.org/display/PHP/SDO+Wish+List
Silvano Girardi Jr. – PHPSC Conf - 2008
• E vale a pena citar– O feedback dos desenvolvedores através do grupo phpsoa é excelente
32
SCA & SDO – Uma Introdução
Agenda
Vi ã g l• Visão geral• História• SCA • SDO• Avaliação• Referências• Perguntas?• Agradecimentos
Silvano Girardi Jr. – PHPSC Conf - 2008 33
Agradecimentos
SCA & SDO – Uma Introdução
Quero instalar!
• Disponível no PECL.p– http://pecl.php.net– pecl install SCA_SDO
Silvano Girardi Jr. – PHPSC Conf - 2008 34
SCA & SDO – Uma Introdução
Onde encontro mais informações?
• SCA e SDO para PHP• SCA e SDO para PHP– http://.osoa.org/display/PHP/SOA+PHP+Homepage
• Grupo de discussãohtt //g g gl /g / h– http://groups.google.com/group/phpsoa
• Manual do PHP para SCA– http://www.php.net/SCAp // p p /
• Manual do PHP para SDO– http://www.php.net/SDO
• Meu Blog– http://www.silvano.pro.br
Silvano Girardi Jr. – PHPSC Conf - 2008
• Ferramentas de busca :)
35
SCA & SDO – Uma Introdução
Agenda
Vi ã g l• Visão geral• História• SCA • SDO• Avaliação• Referências• Perguntas?• Agradecimentos
Silvano Girardi Jr. – PHPSC Conf - 2008 36
Agradecimentos
SCA & SDO – Uma Introdução
Perguntas!?
??
Silvano Girardi Jr. – PHPSC Conf - 2008 37
SCA & SDO – Uma Introdução
Agenda
Vi ã g l• Visão geral• História• SCA • SDO• Avaliação• Referências• Perguntas?• Agradecimentos
Silvano Girardi Jr. – PHPSC Conf - 2008 38
Agradecimentos
SCA & SDO – Uma Introdução
Agradecimentos
PHPSC ( i l El Mi )• PHPSC (em especial Elton Minetto)• UNOCHAPECÓ• Desenvolvedores SCA_SDO– Matthew PetersMatthew Peters– Caroline Maynard– Graham ChartersGraham Charters
• Você!MUITO OBRIGADO!
Silvano Girardi Jr. – PHPSC Conf - 2008
• MUITO OBRIGADO!
39