Rest
Agradecimentos
Muitas pessoas colaboraram direta ou indiretamente para a realização deste livro.
Gostaria de agradecer, primeiramente, à minha esposa e minha família pela paciência e compreensão. Muitas vezes não pude sair de casa ou comparecer a compromissos porque estava ocupado com mais esta missão, e agradeço muito a compreensão de todos durante este período.
Também gostaria de agradecer ao Felipe Oliveira e à equipe da SOA|EXPERT, pelo aprendizado proporcionado e pela confiança no meu trabalho. Acredito que muitos não sabem, mas REST é apenas uma das facetas de SOA e é algo que eu leciono há quase dois anos na SOA|EXPERT. Obviamente, houve muito que aprendi neste processo, e sou realmente muito grato à SOA|EXPERT por isso.
Gostaria de agradecer também a várias pessoas com quem já conversei (ou ainda converso) sobre REST e me ajudaram muito a entender os conceitos e práticas. Algumas dessas pessoas são o já citado Felipe Oliveira, da SOA|EXPERT, Bruno Pereira, da Rivendel, Luca Bastos, da Thoughtworks (que, aliás, me deu a honra de escrever o prefácio deste livro) e Victor Nascimento, da Concrete Solutions. Tenho certeza de que estou esquecendo de algumas pessoas, mas saibam que, de qualquer forma, sou muito grato a todos.
Também gostaria de agradecer ao Adriano Almeida e ao Paulo Silveira pela oportunidade e pela enorme paciência em me ajudar com a escrita deste.
Finalmente, gostaria de agradecer à comunidade de desenvolvimento como um todo. Sem o apoio desta, este livro com certeza não seria possível.
Prefácio
Por Luca Bastos
Este livro lotado de exemplos em Java é na verdade um guia de boas práticas para construir e compartilhar serviços REST na web. Serviços que escalem, que possam ser reutilizados e cuja manutenção não seja o mesmo pesadelo dos web services tradicionais.
Espero que meu resumo meio árido não desanime o leitor porque o livro é muito bom. Na verdade o Alexandre Saudate consegue explicar as coisas de forma bem mais clara. A didática é o forte dele.
Este livro se destina a todos que querem conhecer mais sobre REST de uma forma prática. Um exercício interessante para o leitor seria experimentar refazer os muitos exemplos em Java, usando outras linguagens e frameworks.
Fiquei orgulhoso quando o Alexandre me convidou para escrever estas palavras de apresentação. Admiro sua disposição de compartilhar conhecimento desde os tempos do GUJ, onde suas respostas sempre foram generosas e esclarecedoras. Nisto temos completa identificação. Eu também sempre fui adepto de compartilhar aprendizados e aprender tentando ensinar os outros.
Não perguntei ao Alexandre o motivo de me ter convidado mas tenho cá minhas suposições. Trabalhamos por um tempo juntos. Na época já sabia da paixão dele por integração de aplicações, web services, SOA e afins. Ele estava escrevendo o primeiro livro e já era instrutor. E ele sabia que desde há muito compartilho dos mesmos interesses. Já dei tutoriais sobre web services tradicionais mas por algumas dores no meu caminhar, prefiro usar a alternativa REST sempre que possível. Mesmo no caso de transações financeiras, caso que alguns dizem ser somente possível com os web services tradicionais.
Quando trabalhei junto com o Alexandre, volta e meia o assunto integração aparecia, dados os nossos interesses comuns. Eram conversas bem enriquecedoras em que ambos aprendíamos bastante.
Eu segui por outros caminhos mais generalistas e ele permaneceu fiel. Transformou sua paixão por integração de sistemas em livros. Este seu segundo usa Java nos exemplos mas a maior parte do seu conteúdo pode ser seguido com facilidade, mesmo pelos que não conhecem Java a fundo. Os três primeiros capítulos formam a base teórica do livro. Gostei muito de o Alexandre ter dedicado um capítulo inteiro ao protocolo HTTP. Em várias empresas pelas quais passei, adotei como missão pessoal convencer os desenvolvedores web da necessidade de conhecer HTTP. No caso do uso de REST, isto é praticamente indispensável.
Descontem o fato de eu ter sido apaixonado pelo tema quando digo que gostei muito de ler este livro. Mas de todo modo acredito que muito mais gente gostará tanto quanto eu. Parabéns Alexandre. Nós estávamos precisando de um texto claro assim em português. E parabéns à Casa do Código por propiciar oportunidade aos nossos especialistas de compartilhar conhecimento na nossa própria língua.
Luca Bastos é engenheiro, desenvolve sistemas desde 1968 e foi empreendedor por 17 anos vendendo serviços de TI. Hoje é consultor na ThoughtWorks.
Introdução
Estou certo de que você, leitor, ao comprar este livro, esperava descobrir o que é REST. REST é uma revolução. É um antagonismo ao status quo que já era previamente estabelecido antes de sua adoção em massa, ao estilo de RPC (Remote Procedure Call) e web services tradicionais.
E como nasceu, então? Oras, como toda revolução, nasce do desejo de mudar, de melhorar as coisas e de trazer contrapontos a pontos de vista preestabelecidos.
Este é um dos maiores desafios que este livro procura solucionar. Como instrutor do assunto na SOA|EXPERT, é sempre desafiador explicar a meus alunos a diferença entre modelos RPC tradicionais e a proposta de REST.
A proposta, claro, é mais do que oferecer uma simples overview; é dar ao leitor a noção dos princípios e teorias que regem REST para depois apresentar casos reais de desenvolvimento.
Praticamente todos os exemplos são feitos em Java. No entanto, por ser uma linguagem executada na JVM, acredito que este modelo seja o mais abrangente possivel. Se você não programa em Java, não se preocupe – como disse anteriormente, a ideia é apresentar não somente como fazer, mas por quê. Com o conhecimento que você adquirir lendo este livro, tenho certeza de que será fácil reproduzir os exemplos em outras linguagens.
Conteúdo do livro
Este livro possui dez capítulos:
O capítulo um trata de dar uma visão rápida de quais são os desafios que REST procura vencer e como construir um primeiro serviço e um cliente REST. Ainda que bem básicos, os exemplos mostram algumas técnicas de desenvolvimento tanto no lado do cliente quanto no lado do servidor.
O capítulo dois mostra a fundo o protocolo HTTP, que é a base sobre a qual todo serviço REST funciona. Este capítulo é um alicerce sobre o qual o restante do livro será baseado.
O capítulo três vai utilizar os conceitos apresentados no capítulo anterior para entrar a fundo nas idéias por trás de REST.
O capítulo quatro vai dar mais informações a respeito de possíveis formatos de dados utilizados em transferência de informações utilizando REST. Este capítulo vai prover informações a respeito de estruturas de dados, validação geração destes dados.
No capítulo cinco, serão produzidos serviços utilizando servlets Java, ou seja, a API mais básica por trás de aplicações Java para web.
No capítulo seis, será apresentada a especificação Java para construção de serviços, a JAX-RS. Abordo neste livro a versão 2 desta API, que acrescenta uma série de novas facilidades à versão anterior.
No capítulo sete, serão apresentados modelos de construção de clientes REST. Serão mostrados como desenvolver estes clientes utilizando a API padrão da JAX-RS 2 com a implementação de referência (o Jersey), o framework RESTEasy e JavaScript puro.
No capítulo oito, falarei sobre sistemas de segurança aplicados a REST. Estão compreendidos proteção com HTTPS, autenticação Basic
e Digest
e então, autenticação com o protocolo OAuth. No capítulo nove, serão apresentados tópicos avançados de desenvolvimento em REST. Como desenvolver serviços que passam por acessos simultâneos? Como transformar complexas funções baseadas em RPC para o modelo REST? Como realizar testes automatizados destes serviços?
Finalmente, o capítulo dez apresenta uma seção de dúvidas frequentes. Posso utilizar REST em larga escala? Quando devo utilizar REST ao invés de WS-* (e vice-versa) ?
Com esta disposição de capítulos, espero que os leitores consigam orientar seu próprio aprendizado. Se você já trabalha com REST em Java, e está apenas procurando maneiras de solucionar certos problemas corriqueiros, sugiro realizar a leitura do capítulo 8 em diante.
Caso você já trabalhe com REST, mas não em Java, e quer migrar para esta linguagem, leia do capítulo cinco em diante.
Se você não trabalha com REST, mas não quer adotar a plataforma Java, sugiro descartar a leitura apenas dos capítulos cinco e seis.
Caso você não trabalhe com REST e quer adotar a plataforma Java para seus exercícios, leia todos os capítulos.
Recursos do livro
Caso você tenha quaisquer dúvidas a respeito do conteúdo deste, acesse o repositório de código-fonte do livro: https://github.com/alesaudate/rest . Você também pode tirar suas dúvidas e entrar em contato comigo no fórum oficial: https://groups.google.com/forum/#!forum/rest-construa-apis-inteligentes-de-maneira-simples .
Boa leitura!
Sumário
- 1 - Por que utilizar REST?
- 1.1 - HTML tradicional versus REST
- 1.2 - Web services
- 1.3 - REST
- 1.4 - Como elaborar a URL
- 1.5 - Desenvolvendo um protótipo de web service REST
- 1.6 - Avançando o protótipo de web service REST
- 1.7 - Conclusão
- 2 - O protocolo HTTP
- 2.1 - Os fundamentos do HTTP
- 2.2 - Métodos HTTP
- 2.3 - Idempotência: o efeito de sucessivas invocações
- 2.4 - Segurança dos métodos
- 2.5 - Tipos de passagem de parâmetros
- 2.6 - Cabeçalhos HTTP
- 2.7 - Media Types
- 2.8 - Códigos de status
- 2.9 - Conclusão
- 3 - Conceitos de REST
- 3.1 - Semânticas de recursos
- 3.2 - Interação por métodos
- 3.3 - Representações distintas
- 3.4 - Uso correto de status codes
- 3.5 - HATEOAS
- 3.6 - Boas práticas de passagem de parâmetros
- 3.7 - Conclusão
- 4 - Tipos de dados
- 4.1 - Aprenda a lidar com XML
- 4.2 - Ferramental XML: conhecendo os XML Schemas
- 4.3 - Trabalhando com XML utilizando JAXB
- 4.4 - Testando o XML gerado
- 4.5 - Utilizando JAXB sem um XML Schema
- 4.6 - JSON
- 4.7 - Trabalhando com JSON utilizando JAXB
- 4.8 - Validação de JSON com JSON Schema
- 4.9 - Conclusão
- 5 - Implementando serviços REST em Java com Servlets
- 5.1 - Uma implementação com Servlets
- 5.2 - Implementando negociação de conteúdo
- 5.3 - Implementando a busca por uma cerveja específica
- 5.4 - Implementando a criação de um recurso
- 5.5 - Implementando negociação de conteúdo na criação do recurso
- 5.6 - Conclusão
- 6 - Explore o JAX-RS
- 6.1 - Configurando o JAX-RS
- 6.2 - Criando o primeiro serviço JAX-RS
- 6.3 - O que aconteceu?
- 6.4 - Desenvolvendo os métodos de consulta de Cervejas
- 6.5 - Implementando o método de criação de novas cervejas
- 6.6 - Métodos para atualizar e apagar recursos
- 6.7 - Implementando links HATEOAS
- 6.8 - Implementando paginação na consulta
- 6.9 - Adaptando o código para retornar JSON
- 6.10 - Implementando retorno de dados binários
- 6.11 - Implementando consumo de dados binários
- 6.12 - Conclusão
- 7 - REST, client-side
- 7.1 - JavaScript
- 7.2 - JAX-RS
- 7.3 - Implementação dos clientes com o RESTEasy
- 7.4 - WADL
- 7.5 - Conclusão
- 8 - Segurança REST
- 8.1 - Segurança contra o quê?
- 8.2 - Proteção contra interceptação com HTTPS
- 8.3 - Implantando SSL no nosso servidor
- 8.4 - HTTP Basic
- 8.5 - Modificando o cliente
- 8.6 - HTTP Digest
- 8.7 - OAuth
- 8.8 - Implementando acesso ao Twitter através do Jersey
- 8.9 - Construindo um servidor OAuth
- 8.10 - Conclusão
- 9 - Tópicos avançados de serviços REST
- 9.1 - Busca por exemplos
- 9.2 - Transformação de funções em REST — validação de CPF/CNPJ
- 9.3 - Transformação de funções em REST — envio de e-mails
- 9.4 - Serviços assíncronos
- 9.5 - Atualizações concorrentes
- 9.6 - Cacheamento de resultados
- 9.7 - Testes automatizados de serviços REST
- 9.8 - Criando parsers customizados de dados
- 9.9 - Conclusão
- 10 - Perguntas frequentes sobre REST
- 10.1 - É possível usar REST em larga escala?
- 10.2 - Como gerenciar múltiplas versões de serviços?
- 10.3 - Quantos e quais links HATEOAS devo inserir nos meus recursos?
- 10.4 - Quando eu devo preferir utilizar REST ao invés de WS-*?
- 10.5 - Quando eu devo preferir utilizar REST ao invés de comunicação nativa da minha linguagem de programação?
- 11 - Conclusão
Dados do produto
- Número de páginas:
- Data publicação: