RESTful Web Services são serviços que podem ser publicados na internet para que clientes espalhados ao redor do mundo possam ter acesso aos seus recursos disponibilizados. Estes serviços são construídos com base na arquitetura REST (Representational State Transfer ou, em português, Transferência de Estado Representativo), a qual fornece um estilo de aplicação cliente-servidor para a transferência de representações de recursos sobre o protocolo HTTP.
Nesta arquitetura, dados e funcionalidades são considerados recursos e são acessados via URIs (Uniform Resource Identifiers ou, em português, Identificador Uniforme de Recursos); os tão conhecidos links na web. Um recurso pode ser qualquer informação, como dados de uma pessoa, de uma tarefa ou mesmo um post em um blog. Por exemplo, podemos considerar a previsão do tempo de uma determinada cidade como um recurso.
Na internet, este tipo de informação é normalmente representado como uma página HTML, um arquivo de imagem ou mesmo um documento XML. Um cliente qualquer na web pode acessar este recurso e, dependendo do caso, pode solicitar a alteração ou a remoção do mesmo. Esta manipulação de informações é normalmente baseada nas operações GET, PUT, POST e DELETE do protocolo HTTP, onde PUT e POST são as operações que criam e alteram recursos, GET é a responsável por buscar as informações e DELETE por removê-las.
É importante destacar que na arquitetura REST os recursos são completamente desacoplados de sua representação, de forma que um mesmo recurso pode possuir diversas representações. Entre as mais utilizadas atualmente estão: JSON, XML, páginas HTML, documentos PDF e arquivos JPG.
Esta diversidade de representações de um mesmo recurso facilita a integração de diferentes tipos de clientes, como web browsers, smartphones, tablets, aplicativos desktop, entre outros.
Diferentemente dos web services tradicionais que trafegam envelopes SOAP (Simple Object Access Protocol ou, em português, Protocolo Simples de Acesso a Objetos) sobre qualquer protocolo de comunicação, RESTful Web Services foram desenhados para trafegar principalmente sobre o protocolo HTTP. A grande vantagem disto é que estes web services podem se beneficiar de padrões amplamente utilizados e consolidados na internet.
Dentre eles estão o suporte a cache de recursos, autenticação, segurança da informação, entre outros. Além disto, por possuir um conteúdo normalmente menor do que os tradicionais envelopes SOAP, estes web services são considerados “leves” (lightweight).
O tempo de transferência dos dados na rede e a quantidade de processamento necessário para empacotar/desempacotar as mensagens também é menor do que os baseados em SOAP. Ainda mais, como foi mencionado anteriormente, RESTful Web Services podem se beneficiar de várias funcionalidades já providas pelo protocolo HTTP, fazendo com que sua implementação seja mais simples e livre de complexidades desnecessárias.
O acesso de um cliente a um web service publicado na arquitetura REST também é mais simples do que o acesso aos web services tradicionais. Isto é, basta ter um browser ou a API básica de uma linguagem de programação e pronto. É só fazer a requisição HTTP e analisar a resposta.
Em contra partida, para acessar ou testar web services baseados em SOAP é necessário ter ferramentas e frameworks complexos, os quais devem atender a todas as normas da especificação de tal solução.
É importante destacar que REST é apenas um estilo arquitetural e não, como muitos pensam, um modelo formalmente definido. Por este motivo, não existe uma definição detalhada e padronizada de como a troca de mensagens entre cliente e servidor deve ocorrer. Isto varia de acordo com a interpretação de cada pessoa. Em outras palavras, cada empresa/desenvolvedor pode definir seus serviços com um estilo próprio.
Por este motivo, apesar de serem serviços mais “leves” que os baseados em SOAP, muitas empresas preferem continuar utilizando os web services tradicionais para obter o padrão e formalismo desejado.
No Java, o suporte para a implementação de RESTful Web Services foi adicionado em 2008 pela especificação JSR-311, a qual recebeu o nome JAX-RS. Esta especificação foi criada para simplificar o desenvolvimento de aplicações REST e, rapidamente, se tornou de extrema importância, pois foi um dos primeiros frameworks baseados em classes POJO e anotações capaz de publicar serviços RESTful.
Agora, cinco anos depois, o JAX-RS 2.0 foi lançado juntamente com a especificação Java EE 7. A nova versão, baseada na JSR-339, adicionou uma porção de melhorias importantes que simplificam ainda mais o desenvolvimento e permitem a criação de aplicações mais robustas e sofisticadas. São elas:
- Suporte aprimorado a negociação de conteúdo. Negociação de conteúdo é o processo de seleção da melhor representação de uma resposta do servidor quando múltiplas opções são disponíveis. Com o intuito de permitir priorizar certas representações durante este processo, a anotação @Produces foi enriquecida com a adição do fator relativo de qualidade do servidor (o qs-value);
- Criação de uma API para o cliente. A API do JAX-RS 1.0 era voltada estritamente para o lado do servidor, forçando o desenvolvedor a abrir conexões HTTP “na mão” ou utilizar alguma implementação de terceiros no lado do cliente. O JAX-RS 2.0, por sua vez, adicionou construtores (builders) para invocar um RESTful Web Service a partir do cliente. Esta nova API, além de simplificar o desenvolvimento, padroniza com uma forma elegante os acessos a este tipo de web service;
- Adição de Filtros e Interceptadores. A nova API fornece a capacidade de encadear filtros de Servlets de acordo com o padrão Chain of Responsibility. Isso é útil para implementar funcionalidades ortogonais na aplicação, como o clássico logging e customizações de autenticação e autorização.
Os interceptadores são similares aos filtros, exceto pela capacidade de “embrulhar” (wrap) uma invocação de método em um ponto de extensão especificado. No JAX-RS 2.0 mais especificamente, os interceptadores são usados para manipular e enriquecer os dados do corpo de uma mensagem;
- Suporte a especificação JSR 349: Bean Validation 1.1. O framework Bean Validation está integrado ao novo JAX-RS, agindo como facilitador para especificar metadados de validação de parâmetros. Por exemplo, a anotação @NotNull indica que o parâmetro anotado não pode ser nulo. É possível também utilizar outras anotações pré-definidas ou customizadas para garantir a “corretude” dos dados sendo manipulados;
- Suporte a chamadas assíncronas. No JAX-RS 1.0 o cliente tinha que esperar o servidor responder suas requisições uma vez que a API não suportava chamadas assíncronas. Já, na versão 2.0, o suporte assíncrono foi introduzido para permitir que um cliente faça uma chamada RESTful e, opcionalmente, obtenha uma referência de Future para ser notificado quando a resposta estiver completa;
-
Quer ler esse conteúdo completo? Tenha acesso completo
Confira outros conteúdos:
Introdução ao JDBC
Novidades do Java
Teste unitário com JUnit
Por Fernando Em 2013Promoção de Natal
Oferta exclusiva de Natal!
Pagamento anual
12x no cartão
De: R$ 69,00
Por: R$ 59,90
Total: R$ 718,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- 12 meses de acesso
Pagamento recorrente
Cobrado mensalmente no cartão
De: R$ 79,00
Por: R$ 59,90 /mês
Total: R$ 718,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- Fidelidade de 12 meses
- Não compromete o limite do seu cartão
<Perguntas frequentes>
Nossos casos de sucesso
Eu sabia pouquíssimas coisas de programação antes de começar a estudar com vocês, fui me especializando em várias áreas e ferramentas que tinham na plataforma, e com essa bagagem consegui um estágio logo no início do meu primeiro período na faculdade.
Estudo aqui na Dev desde o meio do ano passado! Nesse período a Dev me ajudou a crescer muito aqui no trampo.
Fui o primeiro desenvolvedor contratado pela minha empresa. Hoje eu lidero um time de desenvolvimento!
Minha meta é continuar estudando e praticando para ser um Full-Stack Dev!Economizei 3 meses para assinar a plataforma e sendo sincero valeu muito a pena, pois a plataforma é bem intuitiva e muuuuito didática a metodologia de ensino. Sinto que estou EVOLUINDO a cada dia. Muito obrigado!
Nossa! Plataforma maravilhosa. To amando o curso de desenvolvimento front-end, tinha coisas que eu ainda não tinha visto. A didática é do jeito que qualquer pessoa consegue aprender. Sério, to apaixonado, adorando demais.
Adquiri o curso de vocês e logo percebi que são os melhores do Brasil. É um passo a passo incrível. Só não aprende quem não quer. Foi o melhor investimento da minha vida!
Foi um dos melhores investimentos que já fiz na vida e tenho aprendido bastante com a plataforma. Vocês estão fazendo parte da minha jornada nesse mundo da programação, irei assinar meu contrato como programador graças a plataforma.
Wanderson Oliveira
Comprei a assinatura tem uma semana, aprendi mais do que 4 meses estudando outros cursos. Exercícios práticos que não tem como não aprender, estão de parabéns!
Obrigado DevMedia, nunca presenciei uma plataforma de ensino tão presente na vida acadêmica de seus alunos, parabéns!
Eduardo Dorneles
Aprendi React na plataforma da DevMedia há cerca de 1 ano e meio... Hoje estou há 1 ano empregado trabalhando 100% com React!
Adauto Junior
Já fiz alguns cursos na área e nenhum é tão bom quanto o de vocês. Estou aprendendo muito, muito obrigado por existirem. Estão de parabéns... Espero um dia conseguir um emprego na área.
Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.
Aceitar