Web Services SOAP - FACOM › ~bacala › SOA › SOA05- Web Services SOAP.pdf · Web Services SOAP...

Post on 28-Jun-2020

21 views 0 download

Transcript of Web Services SOAP - FACOM › ~bacala › SOA › SOA05- Web Services SOAP.pdf · Web Services SOAP...

Web Services SOAP

Introdução

1

Cenários Problemáticos

Soluções para aplicações corporativas avançadas

– Cenário 1: Portal de Turismo

– Cenário 2: Compra Automática

– Cenário 3: Supply Chain Management

– Cenário 4: Pesquisa Google via Programa

2

Cenário 1: Portal de Turismo

Implementar um portal realmente automático em que: – O cliente lista seus desejos via HTML – O portal

• pesquisa alternativas

• escolhe as melhores

• faz todas as reservas

• fatura o cartão de crédito do cliente

• efetua todos os pagamentos

• ... automaticamente, sem intervenção humana

Ou seja, queremos que programas naveguem na Web, não só humanos

3

Cenário 2: Compra automática

Implementar uma aplicação para um distribuidor regional de remédios que:

– Automaticamente detecte estoque baixo

– Procure o melhor lugar no mundo para comprar os produtos

• Preço, prazo de entrega, etc.

– Emita a ordem de compra eletronicamente

4

Cenário 3: Supply Chain

Management

Implementar aplicações de SCM que integrem sistemas de várias empresas (fornecedores, parceiros, clientes, ...)

5

Cenário 4: Pesquisa Google via

Programa

Escrever um programa que recupere as primeiras 10 ocorrências de “web services” retornadas pelo Google

6

Características comuns aos

cenários Todos são sistemas distribuídos

Todos funcionam na Internet

Vários envolvem achar (navegar) o que se quer antes de usar

Todos envolvem domínios administrativos diferentes (empresas diferentes)

– Não temos controle sobre a plataforma, linguagem, etc. do outro lado

– O outro lado é essencialmente um sistema legado no qual não podemos mexer

7

Problemas técnicos resultantes

1. Como trocar informação em ambiente heterogêneo para que ambos os lados entendam?

2. Como acessar a funcionalidade remota?

3. Como achar o “outro lado”?

4. Como driblar firewalls na comunicação?

8

Uma Solução – Web Services

1. Como trocar informação em ambiente heterogêneo para que ambos os lados entendam? • Usar XML para toda a comunicação

• Usar SOAP fazer RPC

2. Como saber que “métodos” podem ser chamados e com que parâmetros? – Usar uma arquitetura orientada a serviços – Descrever o serviço remoto usando WSDL – Definir ontologias

3. Como achar o “outro lado”? – Usar UDDI para localizar serviços

4. Como driblar firewalls na comunicação? • Usar binding de SOAP para HTTP

9

Modelo de dados que

representa um

conjunto de conceitos

de um domínio e os

relacionamentos

entre estes.

Usada para realizar

inferência sobre os

objetos do domínio.

Uma imagem vale 1000 palavras

10

Vamos descrever melhor a

solução ...

11

Usar uma arquitetura orientada a

serviços Serviço oferece uma API na Internet

12

Usar XML para toda a

comunicação Extended Markup Language (XML) Oferece um formato ASCII para trocar qualquer tipo de

informação estruturada Usa o “estilo” HTML de markup com tags

– <pessoa nome=”João”> <frutasFavoritas> <fruta>Manga</fruta> <fruta>Maçã</fruta> <fruta>Uva</fruta> </frutasFavoritas> </pessoa>

Os tags podem ser definidos para criar uma “Aplicação XML” ou “Linguagem XML”

13

Usar SOAP fazer RPC

SOAP é uma forma de fazer Remote Procedure Call (RPC) usando documentos XML

14

Descrever o serviço remoto

usando WSDL

WSDL = Web Services Description Language

Pronunciado “wisdle”

É uma linguagem XML que contém informação sobre a interface, a semântica, e outros detalhes de chamadas a um Web Service

15

Descrição WSDL inclui

Descrição/formato de mensagens que podem ser passadas – Elementos <types>, <message>

Semântica da passagem de mensagens (Request-only, request-response, response-only) – Dentro do elemento <portType>

Uma codificação usando um transporte particular – Elemento <binding>

O endpoint do serviço (uma URL) – Dentro do elemento <service>

Veremos um exemplo logo

16

Definir ontologias

Precisamos saber o que as coisas significam

Exemplo: como mandar uma ordem de serviço se não sei o que cada campo deve conter?

Várias organizações definem e padronizam ontologias – ebXML

– Oasis

17

Usar UDDI para localizar serviços

UDDI = Universal Description, Discovery, and Integration

Permite cadastrar serviços e localizá-los

Não é necessário usar UDDI se o cliente já tiver o documento WSDL

– Não usaremos UDDI no exemplo que segue

18

Usar binding de SOAP para HTTP

O binding sobre HTTP, SMTP, etc. permite driblar firewalls com mais facilidade

Qualquer outro protocolo de transporte pode ser usado

19

Finalmente ... O que é um Web Service?

Um Web Service é um ponto de acesso a funcionalidade que pode ser

– Localizado dinamicamente

– Ter sua interface descoberta automaticamente, porque o serviço sabe se descrever

– Ser chamado na Web

20

21

Situações de uso de SOAP

Processamento e chamadas assíncronos:

– aplicação precisa de um nível garantido de confiabilidade e segurança para a troca de mensagens;

Contratos formais:

– ambos os lados (fornecedor e consumidor) têm que concordar com o formato de intercambio de dados, onde SOAP fornece especificações rígidas para esses tipo de interação;

Operações stateful:

– a aplicação precisa de informação contextual e gerenciamento de estado com coordenação e segurança

22

Web Service SOAP

Tecnologias Relacionadas

Web Services

SOAP (Simple Object Access Protocol)

HTTP (HyperText Markup Language)

UDDI (Universal Description, Discovery and Integration)

XML (eXtensible Markup Language)

XSD (XML Schema Documents)

SOAP

Protocolo elaborado para facilitar a chamada remota de funções via Internet, permitindo que dois programas se comuniquem de uma maneira tecnicamente muito semelhante à invocação de páginas Web.

25

SOAP

Vantagens sobre outras maneiras de chamar funções remotamente como DCOM, CORBA ou diretamente no TCP/IP:

– simples de implementar, testar e usar

– padrão da indústria

– Usa mesmos padrões da Web :

• comunicação via HTTP;

• mesmos protocolos de autenticação e encriptação;

• manutenção de estado da mesma forma;

• normalmente implementado pelo próprio servidor Web.

26

SOAP

Vantagens sobre outras maneiras de chamar funções remotamente como DCOM, CORBA ou diretamente no TCP/IP:

– Atravessa “firewalls” e roteadores, que “pensam” que é uma comunicação HTTP.

– Tanto os dados como as funções são descritas em XML, o que torna o protocolo não apenas fácil de usar como também muito robusto.

– É independente do sistema operacional e CPU.

– Pode ser usado tanto de forma anônima como com autenticação (nome/senha).

27

Pedidos SOAP

Os pedidos SOAP podem ser feitos em três padrões: GET, POST e SOAP.

– GET e POST idênticos aos pedidos feitos por navegadores Internet.

– SOAP padrão semelhante ao POST, mas com pedidos em XML que permitem recursos mais sofisticados como passar estruturas e arrays.

As respostas são sempre em XML.

O XML descreve perfeitamente os dados em tempo de execução e evita problemas causados por mudanças nas funções, já que os objetos chamados têm a possibilidade de sempre validar os argumentos das funções, tornando o protocolo muito robusto.

28

WSDL

Web Services Definition Language

29

WSDL

Uma definição:

– A WSDL é uma especificação que permite descrever Web Services segundo um formato XML.

Descrição dos Serviços

Através da descrição do Web Services o provedor de serviços publica as especificações necessárias para o cliente invocar um serviço.

Independência de plataforma

O cliente não precisa saber qual a linguagem do programação ou plataforma de execução em que o provedor de serviços está baseado.

A descrição do serviço em conjunto com a infra-estrutura SOAP adjacente encapsula detalhes tanto no lado do cliente quanto no lado do provedor.

Em suma...

Um documento WSDL é um documento XML que descreve Web Services como um conjunto de pontos de serviço (endpoints) que operam baseados em trocas de mensagens.

As operações e mensagens relativas a um serviço são descritas de forma abstrata e em seguida ligados a protocolos de rede e formatos de mensagens concretos como o objetivo de definir um ponto de serviço .

WSDL é extensível

WSDL é uma linguagem extensível e permite a descrição de pontos de serviço e suas mensagens independentemente de que formato de mensagens ou protocolo de rede é utilizado na comunicação.

Linguagem para definição de web

service - WSDL

Descreve perfeitamente os objetos e métodos disponíveis, através de páginas XML acessíveis através da Web.

Quem publicar um serviço, cria também estas páginas.

Quem quiser chamar o serviço, pode usar estas páginas como “documentação” de chamada e também usadas antes de chamar as funções para verificar se alguma coisa mudou.

35

WSDL – Web Services Definition Language

A camada de integração introduzida pela estrutura de web services estabelece um padrão, reconhecido e com interface programática suportada.

WSDL permite a comunicação entre essas camadas ao fornecer descrições padronizadas.

36

WSDL – definiçao de serviços

Uma definição de serviço, tal como é expressa pelo construtor definitions

37

Arquitetura WS

Camadas

– Descoberta

– Publicação (UDDI /direta)

– Descrição dos serviços (WSDL)

– Troca de Mensagens baseadas em XML (SOAP)

– Rede (HTTP, SMTP, FTP)

Interface e Implementação

O uso de WSDL na arquitetura de Web Services é em geral dividido em duas partes:

– interface do serviço

– implementação do serviço.

Cada parte pode ser definida de maneira independente e conseqüentemente reutilizada por outras aplicações.

Interface de Serviço

Especificação de interface de serviço é uma descrição de serviço reutilizável que pode ser instanciada e implementada por diferentes implementações de serviços.

Semelhante a IDL (CORBA).

Elementos da Interface de Serviço

Tipos (types) – Definem os tipos de dados que são utilizados para

descrever as mensagens. Para melhor interoperabilidade e independência de plataforma indica-se o uso de XSD (XML Schema Documents)

<types>

<schema targetNamespace="http://example.com/stockquote.xsd“

xmlns="http://www.w3.org/2000/10/XMLSchema">

<element name="TradePriceRequest">

<complexType>

<all>

<element name="tickerSymbol" type="string"/>

</all>

</complexType>

</element>

<element name="TradePrice">

...

</element>

</schema>

</types>

Mensagens (message)

– Representam uma definição abstrata dos dados que serão transmitidos. Uma mensagem é composta por diferentes partes lógicas que estão associadas com uma definição contida em um sistema de tipos.

<message name=“itemInformation”>

<part name=“theElement” element=“aliarForItem” />

</message>

Elementos da Interface de Serviço

Tipos de portas (portType)

– São conjuntos de operações abstratas, cada uma contendo mensagens de entrada e saída.

.... >

<portType name="StockQuotePortType">

<operation name="GetLastTradePrice">

<input message="tns:GetLastTradePriceInput"/>

<output message="tns:GetLastTradePriceOutput"/>

</operation>

</portType> ...

Elementos da Interface de Serviço

Operações (operation)

– Definição abstrata de uma ação que um serviço pode executar

.... >

<portType name="StockQuotePortType">

<operation name="GetLastTradePrice">

<input message="tns:GetLastTradePriceInput"/>

<output message="tns:GetLastTradePriceOutput"/>

</operation>

</portType> ...

Elementos da Interface de Serviço

Ligações (binding) – Especificam protocolos concretos além de especificações

de formatação de dados para as operações e mensagens definidas em um tipo de porta particular.

<binding name="StockQuoteSoapBinding“

type="tns:StockQuotePortType">

<soap:binding style="document“

transport="http://schemas.xmlsoap.org/soap/http"/>

<operation name="GetLastTradePrice">

<soap:operation

soapAction="http://example.com/GetLastTradePrice"/>

<input>

<soap:body use="literal"/>

</input>

<output>

<soap:body use="literal"/>

</output>

</operation>

</binding>

Elementos da Interface de Serviço

Implementação do Serviço

A implementação de serviço é um documento WSDL que descreve como uma interface particular é implementada por um determinado provedor de serviços. Os elementos que fazem parte da implementação do serviço são ports e services.

Implementação do Serviço

Porta (port)

– Especifica um endereço para uma ligação, definindo então um endpoint único.

<port name="StockQuotePort“

binding="tns:StockQuoteBinding">

<soap:address

location="http://example.com/stockquote"/>

</port>

Implementação do Serviço

Serviço (service)

– Modela um Web Service agregando um conjunto de portas relacionados entre si.

<wsdl:definitions .... >

<wsdl:service name="nmtoken">

<wsdl:port .... />

</wsdl:service>

</wsdl:definitions>

WSDL

As definições de interface e implementação de serviços podem fazer parte de um mesmo documento WSDL .

Um documento WSDL contém elementos que possuem significado para um Web Service.

Elementos da WSDL para seu

XSD

definitions documentation message portType input output fault operation service binding port

Estrutura de um Documento WSDL

• Um documento WSDL é um conjunto de

definições. Há um elemento “definitions”

na raiz e outras definições no interior

This example uses a fixed XML format instead of the SOAP encoding

Example 1 SOAP 1.1 Request/Response via HTTP [2]

<?xml version="1.0"?>

<definitions name="StockQuote"

targetNamespace="http://example.com/stockquote.wsdl“

xmlns:tns="http://example.com/stockquote.wsdl“

xmlns:xsd1="http://example.com/stockquote.xsd“

xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/“

xmlns="http://schemas.xmlsoap.org/wsdl/">

<types>

<schema targetNamespace="http://example.com/stockquote.xsd“

xmlns="http://www.w3.org/2000/10/XMLSchema">

<element name="TradePriceRequest">

<complexType>

<all>

<element name="tickerSymbol" type="string"/>

</all>

</complexType>

</element>

<element name="TradePrice">

Definitions:

Define a raiz do

documento WSDL

types:

Define os tipos de dados

que serão utilizados para

trocar mensagens

types:

Indica-se

o padrão

XSD

Cont.

<element name="TradePrice">

<complexType>

<all>

<element name="price" type="float"/>

</all>

</complexType>

</element>

</schema>

</types>

<message name="GetLastTradePriceInput">

<part name="body" element="xsd1:TradePriceRequest"/>

</message>

<message name="GetLastTradePriceOutput">

<part name="body" element="xsd1:TradePrice"/>

</message>

<portType name="StockQuotePortType">

<operation name="GetLastTradePrice">

<input message="tns:GetLastTradePriceInput"/>

<fault name= “..... />

<output message="tns:GetLastTradePriceOutput"/>

</operation>

</portType>

message:

Definição abstrata

dos dados enviados

e recebidos

portType:

Define um conjunto de

operações disponíveis em

uma determinada porta operation:

Nomeia as operações de

entrada e saída e ainda

podem descrever erros

(fault)

fault:

Leyout de retorno

de qualquer falha

Cont.

<binding name="StockQuoteSoapBinding“

type="tns:StockQuotePortType">

<soap:binding style="document“

transport="http://schemas.xmlsoap.org/soap/http"/>

<operation name="GetLastTradePrice">

<soap:operation

soapAction="http://example.com/GetLastTradePrice"/>

<input>

<soap:body use="literal"/>

</input>

<output>

<soap:body use="literal"/>

</output>

</operation>

</binding>

<service name="StockQuoteService">

<documentation>My first service

</documentation>

<port name="StockQuotePort" binding="tns:StockQuoteBinding">

<soap:address location="http://example.com/stockquote"/>

</port>

</service>

</definitions>

binding:

Especifica o protocolo e o

formato de dados para

operações e mensagens

definidas por uma portType Input/output:

Descreve os elementos que

uma operação usa como

parâmetros de entrada e

saída

service:

Modela um Web Services

agregando um conjunto de

portas relacionadas

documentation:

Textos ou elementos

adicionais, informativos,

utilizados para documentação

port:

Especifica o

endereço de um

binding

Referências

[1] Seely, Scott. SOAP: Cross Platform, Web Services Development, Using XML. New York: Prentice Hall, 2002.

[2] W3C. Web Services Description Language (WSDL) 1.1, [online], 05/06/2002, http://www.w3.org/tr/2001/NOTE=wsdl-20010315.

Criando um Web Service SOAP

56

Criando Web Services em SOAP

Serviços Web são definidos por classes.

Um Web Service pode oferecer várias operações, cada uma representada por um método de classe.

Uma prática importante: dividir a interface de um serviço da sua implementação.

– interface de um serviço: SEI (Service Endpoint Interface) e

– a implementação: SIB (Service Implementation Bean).

Criando o Web Service ALO

Crie a interface do serviço

@Webservice: avisa ao compilador Java que o arquivo atual

corresponde à definição SEI de um serviço Web

@WebMethod indica que um determinado método corresponde a uma operação de serviço e assim pode ser invocado por um cliente

@SOAPBinding indica que o serviço utilizará a abordagem SOAP

@WebService

@SOAPBinding(style = SOAPBinding.Style.RPC)

public interface Alo {

@WebMethod public String alo (@WebParam(name = "nome") String

txt);

}

Criando a Implementação do Serviço

ALO Criar a implementação da interface: a SEI onde serão

implementados os métodos definidos anteriormente

@WebService(endpointInterface = "alo.Alo")

public class AloServer implements Alo{

public String alo (@WebParam(name = "nome") String txt) {

return "Olá " + txt + " !";

}

}

Publicando o Serviço

Endpoint : permite publicar um serviço em um servidor. Parâmetros:

– o endereço do servidor e

– a instância do SIB do serviço a ser publicado.

– O serviço é publicado na porta 9875.

public class AloPublish {

public static void main(String[] args) {

Endpoint.publish("http://localhost:9875/alo", new AloServer());

}

}

Usando o serviço

indicando o WSDL onde o serviço poderá ser encontrado

public class AloClient {

public static void main(String args[]) throws Exception {

URL url = new URL("http://127.0.0.1:9875/alo?wsdl");

QName qname1 = new QName("http://alo/", "AloServerService");

Service ws1 = Service.create(url, qname1);

Alo cS = ws1.getPort(Alo.class);

System.out.println("Resultado " + cS.alo("Macacada"));

}

}

Usando o serviço

Nome qualificado em XML para QName.

Indica uma URI (namespace) e o nome do serviço.

– Namespace: fornecido pela WSDL do serviço, e

– Nome local: classe SIB acrescida da palavra “Service”. O nome local aparece na última seção do documento WSDL (seção service).

public class AloClient {

public static void main(String args[]) throws Exception {

URL url = new URL("http://127.0.0.1:9875/alo?wsdl");

QName qname1 = new QName("http://alo/", "AloServerService");

Service ws1 = Service.create(url, qname1);

Alo cS = ws1.getPort(Alo.class);

System.out.println("Resultado " + cS.alo("Macacada"));

}

}

Usando o serviço

retorna uma referência a um objeto que pode invocar as operações oferecidas pelo serviço

public class AloClient {

public static void main(String args[]) throws Exception {

URL url = new URL("http://127.0.0.1:9875/alo?wsdl");

QName qname1 = new QName("http://alo/", "AloServerService");

Service ws1 = Service.create(url, qname1);

Alo cS = ws1.getPort(Alo.class);

System.out.println("Resultado " + cS.alo("Macacada"));

}

}

Usando o serviço

Acesso a interface de ponto final (endpoint)

– tipo SEI do serviço, sendo capaz de acessar seus métodos.

O cliente poderia ter sido implementado em qualquer linguagem de programação como C, C++, PERL ....

public class AloClient {

public static void main(String args[]) throws Exception {

URL url = new URL("http://127.0.0.1:9875/alo?wsdl");

QName qname1 = new QName("http://alo/", "AloServerService");

Service ws1 = Service.create(url, qname1);

Alo cS = ws1.getPort(Alo.class);

System.out.println("Resultado " + cS.alo("Macacada"));

}

}

65

Exercício: Calculadora

www.linhadecodigo.com.br

Desenvolvendo e usando web services em java

66

Exemplo: Calculadora @WebService

@SOAPBinding(style = Style.RPC)

public interface CalculadoraS {

@WebMethod

float soma(float num1, float num2);

@WebMethod

float subtracao(float num1, float num2);

@WebMethod

float multiplicacao(float num1, float num2);

@WebMethod

float divisao(float num1, float num2);

}

Exemplo: Calculadora @WebService(endpointInterface = "calc.CalculadoraS")

public class CalculadoraSImpl implements CalculadoraS {

public float soma(float num1, float num2) {

return num1 + num2;

}

public float subtracao(float num1, float num2) {

return num1 - num2;

}

public float multiplicacao(float num1, float num2) {

return num1 * num2;

}

public float divisao(float num1, float num2) {

return num1 / num2;

}

}

Exemplo: Calculadora public class CalculadoraSPublish {

public static void main(String[] args) {

Endpoint.publish("http://localhost:9876/calc",

new CalculadoraSImpl());

}

}

Exemplo: Calculadora class CalculadoraClient {

public static void main(String args[]) throws Exception {

URL url = new URL("http://127.0.0.1:9876/calc?wsdl");

QName qname = new

QName("http://calc/","CalculadoraSImplService");

Service ws = Service.create(url, qname);

CalculadoraS calc = ws.getPort(CalculadoraS.class);

System.out.println("Soma (5+1): " + calc.soma(5,1));

System.out.println("Subtracao (5-1): " + calc.subtracao(5,1));

System.out.println("Multiplicacao (5*1): " + calc.multiplicacao(5,1));

System.out.println("Divisao (5/1): " + calc.divisao(5,1));

}

}