STD29006 Sistemas Distribuídos Serviços Web Prof. Emerson Ribeiro de Mello Instituto Federal de Santa Catarina IFSC campus São José mello@ifsc.edu.br http://docente.ifsc.edu.br/mello/std 22 de setembro de 2017 1/31
Arquitetura Orientada a Serviços Service Oriented Architecture SOA Definição Caracterização de sistemas distribuídos que organiza aplicações através de conjunto de interações de serviços que são acessados através de interfaces e protocolos padronizados interfaces são auto-descritivas e baseadas em padrões abertos São definidos três papéis: Diretório para registro de serviços Repositório para publicação e localização de interfaces dos serviços Provedor de Serviços Responsável por publicar interfaces dos serviços que provê, bem como atender requisições dos clientes Cliente Aplicação ou outro serviço que envia requisições a um Serviço 2/31
Arquitetura Orientada a Serviços Service Oriented Architecture SOA Descrição do serviço Registro de serviços Localizar Publicar Cliente Invocar Descrição do serviço Provedor de serviços Serviço 3/31
O que são serviços Neutro à tecnologia Invocado através de tecnologias padrões (protocolos, mecanimos de publicação e de busca) amplamente aceitas Fracamente acoplado Não requer o conhecimento prévio de qualquer estrutura interna presente no lado do cliente ou do serviço Localização transparente Informações sobre a definição e localização são publicadas em um repositório e estão acessíveis a uma variedade de clientes, independente da localizações dos mesmos 4/31
Serviços Web (Web Services) É um tipo específico de serviço identificado por uma URL e que faz uso de padrões abertos e amplamente difundidos (HTTP e XML) Coleção de operações sobre recursos (programas, objetos, banco de dados) que podem ser usadas por clientes através da Internet Facilidade para transpor firewalls baseados em filtros de pacotes (portas 80 e 443) 5/31
Serviços Web (Web Services) É um tipo específico de serviço identificado por uma URL e que faz uso de padrões abertos e amplamente difundidos (HTTP e XML) Coleção de operações sobre recursos (programas, objetos, banco de dados) que podem ser usadas por clientes através da Internet Facilidade para transpor firewalls baseados em filtros de pacotes (portas 80 e 443) Servidor web (web server)!= Serviço Web (Web Service) web server implementa o protocolo HTTP Web Service provê um serviço baseado nas operações que foram definidas em sua interface 5/31
Representação dos dados Revisão das últimas aulas Representação Externa de Dados acordo para representar dados primitivos e estrutura de dados em um formato padrão Representação binária dos dados external Data Represenation (XDR) CORBA IDL Serialização de objetos Java Google Protocol Buffers Representação textual dos dados extensible Markup Language (XML) JavaScript Object Notation (JSON) 6/31
Representação dos dados Revisão das últimas aulas Representação Externa de Dados acordo para representar dados primitivos e estrutura de dados em um formato padrão Representação binária dos dados external Data Represenation (XDR) CORBA IDL Serialização de objetos Java Google Protocol Buffers Representação textual dos dados extensible Markup Language (XML) JavaScript Object Notation (JSON) Empacotamento (marshalling) pegar uma coleção de dados e colocá-la dentro de um formato adequado para transmissão em uma mensagem Desempacotamento (unmarshalling) abrir uma mensagem e gerar a coleção de dados equivalente no destino 6/31
extensible Markup Language (XML) XML permite ser estendida usuários podem criar suas próprias marcações (tags) 1 <pessoa> 2 <nome>alice</nome> 3 <sobrenome>dos Santos</sobrenome> 4 <idade>20</idade> 5 <telefones> 6 <numerotel tipo="residencial">48 3381 2800</numeroTel> 7 <numerotel tipo="celular">48 93381 2800</numeroTel> 8 </telefones> 9 </pessoa> 7/31
JavaScript Object Notation (JSON) 10 { 11 "nome": "Alice", 12 "sobrenome": "dos Santos", 13 "idade": "20", 14 "telefones": [ 15 { 16 "tipo": "residencial", 17 "#valor": "48 3381 2800" 18 }, 19 { 20 "tipo": "celular", 21 "#valor": "48 93381 2800" 22 } 23 ] 24 } Formato bem aceito em aplicações web, principalmente pelo fato dos navegadores possuírem interpretadores JavaScript 8/31
Arquitetura dos Serviços Web Duas abordagens Baseado no protocolo SOAP Possui diversas especificações para segurança, orquestração, etc. Ex: WS-Policy, WS-Security, WS-Trust Baseado no estilo REST Representational State Transfer REST Fundamentado nos conceitos da WWW, que são: métodos HTTP, URI e linguagens de marcação (HTML, XML ou JSON) 9/31
Arquitetura dos Serviços Web Abordagem com SOAP 1 Descrever a interface do serviço para essa aplicação utilizando uma linguagem padrão Web Services Description Language (WSDL) 2 Disponibilizar esse documento (de alguma forma) P.e. Universal Description, Discovery and Integration (UDDI) 3 Troca de mensagens XML SOAP 10/31
Arquitetura dos Serviços Web 2. Consulta 3. Obtém a descrição do serviço WSDL UDDI 1. Publica WSDL Cliente 4. Efetua a invocação Serviço Web 11/31
Web Services Descritpion Language WSDL Descrição dos serviços Quais são os serviços oferecidos? Quais as informações necessárias para invocar um serviço? Como cliente e servidor sabem como processar as requisições? Em qual formato o serviço deve enviar as informações para o cliente? 12/31
Web Services Descritpion Language WSDL Descrição dos serviços Quais são os serviços oferecidos? Quais as informações necessárias para invocar um serviço? Como cliente e servidor sabem como processar as requisições? Em qual formato o serviço deve enviar as informações para o cliente? WDSL Gramática em XML para especificar interfaces de Serviços Web Operações disponíveis Tipos de dados Protocolos utilizados Localização do serviço 12/31
Documento WSDL Um documento WSDL é composto por três elementos principais definição dos tipos de dados (types) especifica a estrutura e o conteúdo das mensagens operações abstratas (messages e operation) descreve as operações que poderão ser executadas associação dos serviços (port) especifica como mapear as operações nos protocolos de rede utilizados para o transporte Documento WSDL Tipos dos dados das mensagens Operações abstratas Associação dos Serviços Transporte 13/31
Exemplo WSDL: Calculadora.java 25 public class Calculadora{ 26 27 public int soma(int i1, int i2){ 28 return i1 + i2; 29 } 30 31 public int subtracao(int i1, int i2){ 32 return i1 - i2; 33 } 34 } 14/31
Documento WSDL 35 <wsdl:definitions targetnamespace="http://localhost/calculadora.jws"> 36 37 <wsdl:message name="subtracaorequest"> 38 <wsdl:part name="i1" type="xsd:int"/> 39 <wsdl:part name="i2" type="xsd:int"/> 40 </wsdl:message> 41 42 <wsdl:message name="somarequest"> 43 <wsdl:part name="i1" type="xsd:int"/> 44 <wsdl:part name="i2" type="xsd:int"/> 45 </wsdl:message> 46 47 <wsdl:message name="subtracaoresponse"> 48 <wsdl:part name="subtracaoreturn" type="xsd:int"/> 49 </wsdl:message> 50 51 <wsdl:message name="somaresponse"> 52 <wsdl:part name="somareturn" type="xsd:int"/> 53 </wsdl:message> 15/31
Documento WSDL 54 <wsdl:porttype name="calculadora"> 55 56 <wsdl:operation name="soma" parameterorder="i1 i2"> 57 <wsdl:input message="impl:somarequest" name="somarequest"/> 58 <wsdl:output message="impl:somaresponse" name="somaresponse"/> 59 </wsdl:operation> 60 61 <wsdl:operation name="subtracao" parameterorder="i1 i2"> 62 <wsdl:input message="impl:subtracaorequest" name="subtracaorequest" /> 63 <wsdl:output message="impl:subtracaoresponse" name=" subtracaoresponse"/> 64 </wsdl:operation> 65 66 </wsdl:porttype> 16/31
Documento WSDL 67 <wsdl:service name="calculadoraservice"> 68 69 <wsdl:port binding="impl:calculadorasoapbinding" name="calculadora" > 70 <wsdlsoap:address location="http://localhost/calculadora.jws"/> 71 </wsdl:port> 72 73 </wsdl:service> 74 75 </wsdl:definitions> 17/31
SOAP - Protocolo para troca de mensagens (RPC) Uma mensagem SOAP consiste de Envelope Elemento raiz no documento XML que representa a mensagem SOAP Header (opcional) Oferece mecanismos para estender a mensagem Informações de roteamento, segurança, coordenação Body Document - A RPC em si faz parte deste elemento Fault (opcional) SOAP Envelope SOAP Header Header Block... Header Block SOAP Body Body Block... Body Block Comunicação pode ser síncrona ou assíncrona. Mensagens SOAP podem ser transportadas sobre HTTP, SMTP, JMS,... 18/31
Pedido SOAP 76 <?xml version="1.0" encoding="utf-8"?> 77 <soapenv:envelope 78 xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 79 xmlns:xsd="http://www.w3.org/2001/xmlschema" 80 xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"> 81 <soapenv:body> 82 <soma soapenv:encodingstyle="http://schemas.xmlsoap.org/soap/ encoding/"> 83 <op1 xsi:type="xsd:int">10</op1> 84 <op2 xsi:type="xsd:int">8</op2> 85 </soma> 86 </soapenv:body> 87 </soapenv:envelope> 88 19/31
Resposta SOAP 89 <?xml version="1.0" encoding="utf-8"?> 90 <soapenv:envelope 91 xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 92 xmlns:xsd="http://www.w3.org/2001/xmlschema" 93 xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"> 94 <soapenv:body> 95 <somaresponse soapenv:encodingstyle= 96 "http://schemas.xmlsoap.org/soap/encoding/"> 97 <somareturn xsi:type="xsd:int">18</somareturn> 98 </somaresponse> 99 </soapenv:body> 100 </soapenv:envelope> 101 20/31
REST: Estilo de arquitetura para Serviços Web 21/31
Definição do REST REpresentational State Transfer REST se baseia no comportamento de aplicações web Recursos estão dispostos em uma rede de páginas (uma máquina de estado virtual), de forma que o usuário progride na aplicação através de links (transições de estado), que resulta na próxima página (estado seguinte da aplicação). 21/31
Definição do REST REpresentational State Transfer REST se baseia no comportamento de aplicações web Recursos estão dispostos em uma rede de páginas (uma máquina de estado virtual), de forma que o usuário progride na aplicação através de links (transições de estado), que resulta na próxima página (estado seguinte da aplicação). 21/31
Definição do REST REpresentational State Transfer fonte: REST in Pratice Webber, J., Parastatidis, S., Robinson, I. Figure 1-7. Example of hypermedia as the engine for application state in action This, in simple terms, is what the famous hypermedia as the engine of application state or 21/31 HATEOAS constraint is all about. We see it in action every day on the Web, when we
Fundamentos do REST 1 Recursos Na web todos os recursos possuem uma URI Exemplos: http://docente.ifsc.edu.br/mello/index.html http://localhost/bloco/a/laboratorio/redes2 2 Ações A web possui uma interface uniforme e restrita para interagir com os recursos Métodos de requisições HTTP: GET, POST, PUT e DELETE 3 Representações Como os dados são retornados e representados para os clientes Ex: HTML, XML, JSON 22/31
Fundamentos do REST 1 Recursos Na web todos os recursos possuem uma URI Exemplos: http://docente.ifsc.edu.br/mello/index.html http://localhost/bloco/a/laboratorio/redes2 2 Ações A web possui uma interface uniforme e restrita para interagir com os recursos Métodos de requisições HTTP: GET, POST, PUT e DELETE 3 Representações Como os dados são retornados e representados para os clientes Ex: HTML, XML, JSON SOAP usa o HTTP como protocolo de transporte. REST usa o HTTP como protocolo de aplicação 22/31
Recursos Qualquer informação pode ser caracterizada como um recurso Ex: página, imagem, coleção de recursos, etc Recursos são identificados por uma URI Identificador único e que permite endereçar um recurso na web Uma URI identifica um único recurso, porém um recurso pode possuir mais de uma URI (relação muitos-para-um) 23/31
Recursos Qualquer informação pode ser caracterizada como um recurso Ex: página, imagem, coleção de recursos, etc Recursos são identificados por uma URI Identificador único e que permite endereçar um recurso na web Uma URI identifica um único recurso, porém um recurso pode possuir mais de uma URI (relação muitos-para-um) Formato da URI scheme://host:port/path?querystring#fragment scheme HTTP, HTTPS, FTP host nome ou IP port impĺıcito ao esquema (p.e. 80 para http) ou expĺıcito path segmentos de texto delimitados por / querystring lista de parâmetros (nome=valor) delimitados por & fragment ponto particular dentro um documento 23/31
Identificação de Recursos http://localhost/campus http://localhost/campus/sj http://localhost/campus/sj/bloco/a http://localhost/campus/sj/bloco/a/laboratorio http://localhost/campus/sj/bloco/a/laboratorio/redes2 Ao percorrer o caminho do mais genérico para o mais específico, você estará navegando pelos dados 24/31
Ações Métodos HTTP (verbos) Como as representações dos recursos são trocadas entre clientes e servidor GET obtém informações de um recurso POST Cria um recurso PUT Atualiza um recurso DELETE Remove um recurso 25/31
Ações Métodos HTTP (verbos) Como as representações dos recursos são trocadas entre clientes e servidor GET obtém informações de um recurso Obter lista com todos campi: GET http://localhost/campus Obtém capacidade do laboratório redes2 GET http://localhost/campus/laboratorio/redes2/capacidade POST Cria um recurso PUT Atualiza um recurso DELETE Remove um recurso 25/31
Ações Métodos HTTP (verbos) Como as representações dos recursos são trocadas entre clientes e servidor GET obtém informações de um recurso POST Cria um recurso Content: {bloco,laboratorio,equipamentos[],capacidade,... } POST http://localhost/campus PUT Atualiza um recurso DELETE Remove um recurso 25/31
Ações Métodos HTTP (verbos) Como as representações dos recursos são trocadas entre clientes e servidor GET obtém informações de um recurso POST Cria um recurso PUT Atualiza um recurso Atualiza informações do laboratório redes2 Content: {bloco,laboratorio,equipamentos[],capacidade,... } PUT http://localhost/campus/laboratorio/redes2 DELETE Remove um recurso 25/31
Ações Métodos HTTP (verbos) Como as representações dos recursos são trocadas entre clientes e servidor GET obtém informações de um recurso POST Cria um recurso PUT Atualiza um recurso DELETE Remove um recurso Remove o laboratório redes2 DELETE http://localhost/campus/laboratorio/redes2 25/31
Pedidos: REST vs SOAP Ex: Serviço Web para obter a capacidade de um laboratório SOAP 102 <?xml version="1.0" encoding="utf-8"?> 103 <soapenv:envelope 104 xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" > 105 <soapenv:body lab="http://localhost/campus/laboratorio"> 106 <lab:getcapacidade> 107 <lab:id>redes2</lab:id> 108 </lab:getcapacidade> 109 </soapenv:body> 110 </soapenv:envelope> REST 111 GET http://localhost/campus/laboratorio/redes2/capacidade 26/31
REST: Pedido e resposta 27/31
REST vs RPC Chamada de Procedimento Remoto (RPC) Foco na diversidade de operações 112 obtercapacidade(int id); 113 definircapacidade(int id, int capacidade); REST Foco na diversidade de recursos 114 GET http://localhost/laboratorio/redes2/capacidade 115 PUT http://localhost/laboratorio 28/31
Resumo: Objetivo dos Serviços Web Permitir a integração e interação de aplicativos dispostos em diferentes locais, escritos em diferentes linguagens e residentes em diferentes arquiteturas. Há espaço para SOAP e REST coexistirem 29/31
Como codificar Serviços Web em Java REST não é um padrão (faz uso de padrões: HTTP, URI, XML, etc.) JSR 311: JAX-RS: The Java API for RESTful Web Services Jersey é a implementação de referência, presente no Java EE 6 SOAP é uma especificação padrão para WS JSR 224: JAX-WS: Java API for XML Web Services Presente desde o Java EE 5 (servidor de aplicação Glassfish) Próxima aula Laboratório para desenvolvimento de Serviços Web (Java e Python) 30/31
Exercícios Não é necessário entregar, mas é necessário fazer antes da próxima aula! 1 O que são Serviços Web RESTful? 2 O que são serviços stateless e stateful? 3 O que é WADL? Seria equivalente a qual especificação apresentada na aula? 4 O que são Anotações Java? (Java Annotations) 5 O que são POJOs em Java? 31/31