Você está na página 1de 37

Arquitetura REST

Servidor REST com Framework Java Spring

Renan Guedes Maidana


Revisão da aula anterior
● Desenvolvimento de aplicações Java

└─ src
└─ main
└─ java
└─ hello
└─ Greeter.java
└─ HelloWorld.java
Revisão da aula anterior
● Desenvolvimento de aplicações Java
Revisão da aula anterior
● Desenvolvimento de aplicações Java
build.gradle
Revisão da aula anterior
● Introdução ao framework Java Spring
http://spring.io/projects/spring-framework
Framework para http://github.com/spring-projects/spring-framework
desenvolvimento e controle
de aplicações Java, incluindo
módulos para:

● Acesso a bancos de dados


● Segurança
● Web services
● Etc.
Arquitetura REST
● REpresentational State Transfer
○ Proposta na tese de doutorado de Roy Fielding,
em 2000.

● Um modelo de arquitetura de comunicação


cliente-servidor, baseada em requisições
(request) e respostas (response), utilizando
verbos HTTP.
Arquitetura REST
Arquitetura REST
● Comunicação baseada em representações
de recursos (resources).
○ Qualquer informação auto-contida (e.g.,
documentos, imagens, objetos, etc.)

● A identificação destes recursos no servidor


REST é feita através de Uniform Resource
Identifiers (URI).
Arquitetura REST
● A identificação destes recursos no servidor
REST é feita através de Uniform Resource
Identifiers (URIs)

http://universidade.com/alunos
http://universidade.com/alunos/renan
http://universidade.com/alunos/11111
http://universidade.com/alunos/renan/22222
Arquitetura REST
● O modelo REST consiste em um conjunto de
cinco diretrizes (ou restrições) principais.
○ Web services ou APIs que seguem fielmente
todas as diretrizes são ditas “RESTful”.

● Adesão às restrições REST traz benefícios


em escalabilidade, flexibilidade e
comunicação, entre outros.
Arquitetura REST
● Diretriz 1: Separação Cliente-Servidor
● Tem como objetivo separar o
desenvolvimento e
responsabilidades do serviço em
dois ambientes.

● Interações entre os dois


ambientes é realizada através de
requisições e respostas, no
formato HTTP.
Arquitetura REST
● Diretriz 1: Separação Cliente-Servidor
● Confere grande escalabilidade à
aplicação

● Permite que o cliente e servidor


sejam desenvolvidos de forma
independente
○ Ex: Servidor é responsável
por manipulação de dados;
○ Ex: Cliente é responsável pela
interface gráfica;
Arquitetura REST
● Diretriz 2: Comunicação stateless
Interações entre cliente e servidor devem assumir que o servidor
não possui conhecimento do estado atual do cliente, ou de
requisições anteriores.
○ O servidor não deve “lembrar” o que algum cliente estava
fazendo;
○ O cliente deve sempre passar todas as informações
relevantes para que o servidor consiga realizar suas
operações e fornecer uma resposta válida;
Arquitetura REST
● Diretriz 2: Comunicação stateless
http://universidade.com/proximaPagina
Não é stateless, pois o servidor precisa lembrar a página atual do
cliente.

http://universidade.com/pagina?num=3
Stateless, pois o cliente indica a página desejada.
Arquitetura REST
● Diretriz 3: Comunicação cacheável
Clientes podem manter cópias locais de respostas.
○ O servidor indica quais respostas devem ser armazenadas ou
não (cacheável ou não-cacheável), e por quanto tempo;
○ Reduz o número de requisições repetidas, evitando
processamento desnecessário e aumentando a performance
do serviço;
Arquitetura REST
● Diretriz 4: Interface uniforme
Conjunto de regras e métodos para promover a refatoração e
entendimento de mensagens em dispositivos diferentes.
○ Métodos HTTP (POST, GET, PUT, DELETE…)
○ Uniform Resource Identifiers (URI)
○ Representação de recursos com metadados (header)
○ Representação uniforme dos recursos (XML, JSON, HTML)
Arquitetura REST
● Diretriz 5: Sistemas em camadas
Aplicações RESTful podem conter diversas camadas de hardware
e software, que podem ser acessadas por clientes e servidores.
Desenvolvendo um servidor REST

● Utilizando o framework Spring, devemos desenvolver um


servidor REST para gerenciar contas poupança em um
banco, que deve permitir:
○ Criação de novas contas
○ Consulta de contas (geral e individual)
○ Depósitos e resgates das contas individuais

● As contas devem possuir os atributos “número da conta”, “nome


do titular” e “saldo”.
Desenvolvendo um servidor REST
● Abstração do recurso “Conta” como classe Java:
Desenvolvendo um servidor REST
● Controlador REST:
Desenvolvendo um servidor REST

● Deve-se implementar os métodos HTTP desejados:


○ POST
○ GET
○ PUT
Desenvolvendo um servidor REST
● Exemplo 1: Criação de novas contas (POST)
Desenvolvendo um servidor REST
● Exemplo 1: Criação de novas contas (POST)
Desenvolvendo um servidor REST
● Exemplo 1: Criação de novas contas (POST)
Desenvolvendo um servidor REST
● Exercício 1: Consulta de contas geral/individual (GET)
Desenvolvendo um servidor REST
● Exercício 1: Consulta de contas geral (GET)
Desenvolvendo um servidor REST
● Exercício 1: Consulta de conta individual (GET)
Desenvolvendo um servidor REST
● Para um serviço ou
API ser considerado
RESTful, deve-se
padronizar as
respostas do servidor.

● Para isso, utiliza-se os


controles de
hypermedia
Desenvolvendo um servidor REST

● Além da padronização, os controles de


hypermedia descrevem relações entre recursos
de um servidor REST através de Hyperlinks.
○ A partir da requisição de um recurso, é
possível saber quais outros recursos estão
disponíveis com relação ao chamado.
Desenvolvendo um servidor REST
● No framework Spring, controles de hypermedia
são suportados pelo projeto “Hypermedia As The
Engine Of Application State” (HATEOAS)
Desenvolvendo um servidor REST
● Exemplo 2: Criação de novas contas (Hypermedia)
Desenvolvendo um servidor REST
Desenvolvendo um servidor REST
● Exercício 2: Consulta de contas (Hypermedia)
Desenvolvendo um servidor REST
Desenvolvendo um servidor REST
Desenvolvendo um servidor REST
Material adicional
Leituras Complementares
● Tutorial: Building a RESTful Web Service
https://spring.io/guides/gs/rest-service/
● Richardson Maturity Model
https://martinfowler.com/articles/richardsonMaturityModel.html
● REST: Princípios e boas práticas
http://blog.caelum.com.br/rest-principios-e-boas-praticas/

Você também pode gostar