restful web services
DESCRIPTION
Disponibilizando serviços e integrando aplicações sem complicar a vida de ninguém.TRANSCRIPT
Globalcode – Open4Education
RestFul WebServices
Rafael NunesArquiteto de Software / Instrutor Globalcode
Globalcode – Open4Education
Integrando aplicações e disponibilizando serviços sem complicar a vida de ninguém.
REST
Globalcode – Open4Education
Agenda
> Integrando Aplicações> Um caso verídico
Globalcode – Open4Education
Agenda
> REST> Evitando complexidade desnecessária> REST> JSR 311> Exemplos de implementação> Mobile REST
Globalcode – Open4Education
Agenda
> Conclusão> Perguntas & Respostas
Globalcode – Open4Education
REST – O Início
> Integrando Aplicações> Um caso verídico
Globalcode – Open4Education
Integrando Aplicações
> Era uma vez um desenvolvedor
Globalcode – Open4Education
• Que adorava desenvolver.
Integrando aplicações
Globalcode – Open4Education
> E como era descolado e desenvolvia em muitas plataformas, ele precisava integrálas de alguma forma
Integrando aplicações
Globalcode – Open4Education10
> Aí ele descobriu os padrões para integração
Integrando aplicações
Globalcode – Open4Education11
> Além de adorar desenvolver, ele também adorava a web.
Integrando aplicações
Globalcode – Open4Education12
> E foi então que ele descobriu os Web Services
Integrando aplicações
Globalcode – Open4Education13
> E todos os seus padrões.
Integrando aplicações
Globalcode – Open4Education14
> Aí ele morreu. Fim.
Integrando aplicações
Globalcode – Open4Education15
Plataformas Distintas
Globalcode – Open4Education16
Padrões para integração
Globalcode – Open4Education17
Web Services
Globalcode – Open4Education18
> Mentira. Ele não morreu.
Integrando aplicações
Globalcode – Open4Education19
> Mas perdeu um pouco de sua sanidade entendendo todos aqueles padrões e toda aquela complexidade.
Integrando aplicações
Globalcode – Open4Education20
• Por que o protocolo HTTP, Google têm sucesso?
• FTP, SMTP, NNTP, SFTP, TFTP
?
Globalcode – Open4Education21
• Imaginem se fosse assim…
Simplicidade!!!
Globalcode – Open4Education22
• HTTP – Transferência de Hiper Texto
• Google – Um campo de texto, dois botões e três radio buttons
?
Globalcode – Open4Education23
REST
REST
Globalcode – Open4Education24
> Surgiu da tese de doutorado de Roy T. Fielding
> Um dos principais autores da especificação do protocolo HTTP
> Cofundador do Apache HTTP Server
> Diretor da Apache Software Foundation
REST
Globalcode – Open4Education25
> REST (Representation State Transfer)
> Não é um framework, uma biblioteca, um servidor.
> É um estilo arquitetural(diz respeito ao design da aplicação)
REST
Globalcode – Open4Education26
> Comunicação stateless. Sem estado.
> Performance(não há todo o overhead de SOAP).
> Forma simples de se criar um cliente.
> Possibilidade de cache
> Sem necessidade de contrato formal
REST (Quando usar?)
Globalcode – Open4Education27
REST
> REST usa os métodos já definidos no protocolo HTTP
> GET, POST, PUT, DELETE, HEAD…
> Em REST, seus serviços/recursos têm uma identificação.
> Descrição do serviço via WADL( similar ao WSDL)
Globalcode – Open4Education28
WADL
<resources base="http://servidor:8988/rest/repositorio/"><resource uri=“reservas">
<method href="#reservar"/></resource>
<resources><method name="GET" id=“reservar">
<request> <query_variable name=“quarto" type="xsd:string" required="true"/> <query_variable name=“numero" type="xsd:int"/></request><response> <representation mediaType=“application/xml” element=“mn:Response"/> <fault id=“reservaErro status="400" mediaType=“application/xml” element=“mn:Error"/></response>
</method>
Globalcode – Open4Education29
REST
> JSR 311(Apache, BEA, Google, Jboss, Sun…)
> Jersey é a implementação de referência
> Diversos frameworks já implementam
> Axis2, CXF, RestEasy, JAXWS, Restlet
> @PATH, @GET, @POST, @ProductMime, @Param, @QueryParam
> Cases: Google, Yahoo, Amazon S3, Flickr, del.icio.us
Globalcode – Open4Education30
Requisição SOAP
> Requisição SOAP:<?xml version='1.0' ?><soap:Envelope
xmlns:soapenv="http://www.w3.org/2003/05/soapenvelope" xmlns:h="http://meuws.com.br/ws"> <soap:Header> <h:reserva xmlns:p="http://meuws.com.br/ws” soap:mustUnderstand=“1”>5</h:reserva> </soap:Header> <soap:Body> <h:reservarQuarto xmlns:m="http://meuws.com.br">
<quarto>52</quarto> </h:reservarQuarto> </soap:Body></soap:Envelope>
Globalcode – Open4Education31
Requisição REST
> Requisição REST:http://appserver:8080/apphotel/reservar/quarto/52
ou
http://appserver:8080/apphotel/reservar?quarto=52
Globalcode – Open4Education32
> Exemplo de código de uma aplicação com serviço REST
> Reserva de vagas em Hotel
Mão na massa
Globalcode – Open4Education33
> Exemplo de código client com REST
> HttpClient, Flex, Python, Browser
Isso Funciona?
Globalcode – Open4Education34
> Implementa a ultima especificação JSR 311
> Segurança(@RolesAlowed, @DenyAll)
> Forma simples de integração(mapeamento de Servlet)
> Mapeamento de parâmetros de request para atributos
> Integração com EJB (Bean Stateless como serviço)
> Framework Client(Proxy para requeisições HTTP)
JBoss RestEasy
Globalcode – Open4Education35
> Não há um contrato(WSDL)
> Não há ferramentas
> Recente, earlyadopters
Desvantagens
Globalcode – Open4Education36
> Mobile REST e KSOAP
REST
Globalcode – Open4Education37
> Migração de Portais(Websphere Portal, Plone, Oracle)
> ESB e SOA baseados em REST (Jboss ESB, Oracle SOA Suite, Websphere, Weblogic)
> Serviços do Google baseados em REST(Ajax Search, Charts, Maps, Earth, Open Social)
Futuro
Globalcode – Open4Education38
Comparação
SOAP REST
Complexidade Padrões em excesso HTTP
Criar Serviços Possui frameworks e bibliotecas para geração
Possui frameworks e bibliotecas para geração
Criar Cliente Geração através de ferramentas ou manualmente
Geração de forma simples, não há necessidade de ferramentas
Performance Além da requisição HTTP, overhead do parse de XML
Requisição HTTP simples. (Possibilidade de cache)
Arquivo Descritor WSDL WADL(Não adotado oficialmente)
Comunicação Stateless e Stateful Stateless (possível mas não recomendado Stateful)
Globalcode – Open4Education39
?Perguntas e Respostas
Globalcode – Open4Education41
Fim v.2!
Obrigado!
(Desenhos/Imagens by Rafael Nunes)
(Obrigado Paint!!!!)