REST - padrões e melhores práticas
-
Upload
sensedia-company -
Category
Technology
-
view
712 -
download
0
description
Transcript of REST - padrões e melhores práticas
![Page 1: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/1.jpg)
© Copyright | www.sensedia.com 1
[ Empowering Business. Architecting IT ]
![Page 2: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/2.jpg)
© Copyright | www.sensedia.com 2
REST: Padrões & Melhores Práticas
![Page 3: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/3.jpg)
© Copyright | www.sensedia.com 3
Quem somos nós
@aro1976
@felipe_firmo
![Page 4: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/4.jpg)
© Copyright | www.sensedia.com 4
Público Alvo
API Designer
Arquiteto
ProgramadorGerente
Diretor
![Page 5: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/5.jpg)
© Copyright | www.sensedia.com 5
Agenda
• Sobre a Sensedia
• SOAP vs. REST
• Elegibilidade de REST
• Desafios de REST
• Padrões e Melhores Práticas REST
• Ferramentas
• Q & A
![Page 6: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/6.jpg)
© Copyright | www.sensedia.com 6
[ Sobre a Sensedia ]
Nosso core é Arquitetura de TI:
Serviços & Ferramentas.
Ajudamos empresas a serem
Mais Ágeis, Flexíveis e Inovadoras
Crescimento consistente:
63% CAGR 2007-2011
![Page 7: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/7.jpg)
© Copyright | www.sensedia.com 7
[ Sobre a Sensedia ]
Profundo conhecimento em:
√ SOA (Service Oriented Architechture)
√ Governança
√ Enterprise Architecture
√ Cloud Computing
![Page 8: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/8.jpg)
© Copyright | www.sensedia.com 8
Posicionado como Visionário no Quadrante Mágico do Gartner(1)
Criada a partir de iniciativa conjunta entre Ci&T e Laboratório de Inovação da Unicamp.
[ Sobre a Sensedia ]
![Page 9: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/9.jpg)
© Copyright | www.sensedia.com 9
Philadelphia, EUA São Paulo, BR Campinas, BR
Sede em Campinas, SP e escritórios em São Paulo, SP e Philadelphia, EUA
[ Sobre a Sensedia ]
![Page 10: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/10.jpg)
© Copyright | www.sensedia.com 10
[ Quem tem experimentado a proposta de valor da Sensedia ]
![Page 11: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/11.jpg)
© Copyright | www.sensedia.com 11
SOAP vs. REST
![Page 12: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/12.jpg)
© Copyright | www.sensedia.com 12
SOAP vs. REST
• SOAP: Simple Object Access Protocol • Baseado em XML
• Padronizado pelo W3C
• Soluções de diversos fabricantes
• Compatibilidade com diversas linguagens e plataformas
• Maior consumo de banda e complexidade na implementação
• Contratos fortemente tipados
• JSR 224: JavaTM API for XML-Based Web Services (JAX-WS) 2.0
![Page 13: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/13.jpg)
© Copyright | www.sensedia.com 13
Exemplo de Requisição SOAP POST /Stock HTTP/1.1
Host: www.stockexchange.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 299
SOAPAction: "http://www.w3.org/2003/05/soap-envelope"
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Header>
</soap:Header>
<soap:Body>
<m:GetStockPrice xmlns:m="http://www.stockexchange.org/stock">
<m:StockName>ORCL</m:StockName>
</m:GetStockPrice>
</soap:Body>
</soap:Envelope>
![Page 14: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/14.jpg)
© Copyright | www.sensedia.com 14
SOAP vs. REST
• REST: REpresentational State Transfer • É um estilo arquitetural, portanto, não necessariamente
um PADRÃO • Fortemente baseado na semantica do HTTP
Operações: GET, POST, PUT, PATCH, DELETE
• Virtualmente suportado por qualquer cliente HTTP Hypertext Transfer Protocol HTTP 1.1 - http://tools.ietf.org/html/rfc2616 PATCH Method for HTTP - http://tools.ietf.org/html/rfc5789
• Menor consumo de banda e overhead de processamento • Contratos Fracos
![Page 15: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/15.jpg)
© Copyright | www.sensedia.com 15
Exemplo de uma requisição REST
GET /stocks?name=ORCL HTTP/1.1
![Page 16: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/16.jpg)
© Copyright | www.sensedia.com 16
Desafios REST
![Page 17: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/17.jpg)
© Copyright | www.sensedia.com 17
Desafios REST
• Talvez o REST como um estilo arquitetural seja MUITO ABSTRATO
• Padronização é necessária?
• Os designers de API podem utilizar diversas abordagens para cada tema
• Cada opção possui prós e contras, que precisam ser ponderados durante a fase de design
• A governança pode se tornar muito complexa
![Page 18: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/18.jpg)
© Copyright | www.sensedia.com 18
Elegibilidade REST
![Page 19: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/19.jpg)
© Copyright | www.sensedia.com 19
Elegibilidade REST vs. SOAP Aspect SOAP REST
Público Alvo Interno/Parceiros Qualquer Um
Volume de Processamento Moderado Alto, com Picos
Transação Distribuida / Orquestração WS-* / BPEL Não Padronizado
Semântica de Consistência de Dados Comumente ACID Comumente
Eventual
Contratos Fortemente Tipados Yes / WSDL / XSD WADL? / Não
Padronizado
Segurança Basic / Digest /
WS-Security
Basic / Digest /
OAuth / OpenID
Ferramentas Automatizadas Bastante maduras Não são maduras
Suporte de Linguagens de Programação Boa Excelente
Interoperabilidade entre implementações Bastante maduras Não são maduras
![Page 20: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/20.jpg)
© Copyright | www.sensedia.com 20
Padrões REST
![Page 21: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/21.jpg)
© Copyright | www.sensedia.com 21
Grupos dos Padrões REST
• Estratégia de
Implementação
• Segurança
• Formato de Dados
• Respostas Parciais
• Design
![Page 22: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/22.jpg)
© Copyright | www.sensedia.com 22
• Construir tudo do zero
• Reutilizar o legado
Estratégia de Implementação
![Page 23: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/23.jpg)
© Copyright | www.sensedia.com 23
Construir Tudo do Zero • Cenário
Infraestrutura atual inexistente ou obsoleta
• Solução
Criação de uma arquitetura de referência
Avaliar a utilização de diversos tipos de banco de dados
Utilização de cache distribuído
Utilização de JMS para operações assíncronas
• Impactos
Necessária a avaliação de diversas opções
Análise de impacto de cada escolha
![Page 24: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/24.jpg)
© Copyright | www.sensedia.com 24
Reutilizar o Legado • Cenário
Já existem sistemas que provem todas as informações a serem publicadas
• Solução
Modificação da arquitetura de referência atual para acomodar novos requisitos
Utilização de JMS para operações assíncronas
• Impactos
Risco de sobrecarga nos sistemas legados
Menor flexibilidade no design da solução
Maior latência em consultas
![Page 25: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/25.jpg)
© Copyright | www.sensedia.com 25
• Recurso Público
• Autenticação no Recurso
• Autenticação por Terceiros
• Autorização pelo Recurso
• Autorização Centralizada
• Criptografia das Requisições/Respostas
• Criptografia do Canal
Segurança
![Page 26: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/26.jpg)
© Copyright | www.sensedia.com 26
JavaEE Container
Autenticação no Recurso • Cenário
Restrição de acesso a um conjunto de usuários conhecidos
• Solução
Utilizar uma base LDAP, SQL, chave/valor
Criptografia de senhas usando algoritmos one-way usando salt
• Impactos
Risco na proteção da base de senhas
Overhead na autenticação
Usuário
Identificado
Recurso
LDAP
JAAS
![Page 27: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/27.jpg)
© Copyright | www.sensedia.com 27
Autenticação por Terceiros • Cenário
Usuários não são conhecidos previamente pelo recurso
Informações de identidade são de propriedade de terceiros
• Solução
Configurar autenticação utilizando plataforma de terceiros, tais como:
• Impactos
Dependência de fatores externos
Usuário
Identificado
Resource
Owner Facebook
Base de
Usuários
Recurso API
![Page 28: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/28.jpg)
© Copyright | www.sensedia.com 28
Segurança autenticação por terceiros
Referência: https://developers.facebook.com/docs/concepts/login/login-architecture/
![Page 29: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/29.jpg)
© Copyright | www.sensedia.com 29
• Versionamento de Recursos
• Multiplos formatos
Formato de Dados
![Page 30: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/30.jpg)
© Copyright | www.sensedia.com 30
Versionamento de Recursos • Cenário
É necessário fazer alterações incompatíveis no recurso
Não é possível assegurar a migração de todos os clientes ao mesmo tempo
• Solução
Manter por um período determinado mais de uma versão do recurso em operação
• Impactos
Complexidade de Governança
Aumento de custos de operação e desenvolvimento
/pedidos
V 1.0 V 2.0
V 1.1
![Page 31: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/31.jpg)
© Copyright | www.sensedia.com 31
Versão Única
Versionamento de Recursos • Nenhum Versionamento
Funciona como se o recurso estivesse sempre na versão 1
Impede a inclusão de novos atributos obrigatórios
Impede a retirada de atributos
Tende a deixar os recursos muito complexos
Ao longo do tempo pode ser insustentável
/pedidos
V 1.0
V 1.1
V 1.2
![Page 32: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/32.jpg)
© Copyright | www.sensedia.com 32
Versionamento de Recursos
• Versionamento na URI Ex: http://api.sensedia.com/v1/pedidos
Viola HATEOAS
Fácil roteamento entre servidores
Fácil manutenção de código
Não requer a utilização de cabeçalhos
/pedidos
/v1/pedidos /v2/pedidos
![Page 33: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/33.jpg)
© Copyright | www.sensedia.com 33
Versionamento de Recursos • Versionamento na Query String
Ex: http://api.sensedia.com/pedidos?_version=1
Viola HATEOAS
Parâmetro é opcional ou obrigatório?
Difícil manutenção de código
Não requer a utilização de cabeçalhos
/pedidos
/pedidos?
_version=1
/pedidos?
_version=2
![Page 34: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/34.jpg)
© Copyright | www.sensedia.com 34
Versionamento de Recursos
• Versionamento no Media Type Ex: http://api.sensedia.com/pedidos
– Accepts: vnd.sensedia.com.pedidos+json; version=1
Dificulta a implementação de clientes
Dificulta o acesso via browser (não deve ter versão default, certo?)
Moderada complexidade na manutenção de código
![Page 35: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/35.jpg)
© Copyright | www.sensedia.com 35
Versionamento de Recursos Nenhum URI Query String VND
Twitter até 2009 Twitter após 2009 Facebook Azure
Flickr Foursquare Google Data GitHub (v 3)
Dropbox Netflix *
GitHub (v 2) PayPal
Yammer EBay
Delicious
Last FM
Twillio
![Page 36: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/36.jpg)
© Copyright | www.sensedia.com 36
Múltiplos Formatos • Cenário
Dependendo do recurso, talvez seja importante representá-lo de diversas formas.
• Solução
Possibilitar que o cliente passe no header Accept, o formato desejado.
Prover diversas alternativas de renderização dependendo do tipo do recurso
• Impactos
Flexibilidade do uso pelos clientes
Aumento de complexidade na implementação
/pedidos/ABCD-1234
JSON XML
ICAL PDF
![Page 37: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/37.jpg)
© Copyright | www.sensedia.com 37
• Paginação de Consultas
• Subconjunto de Atributos
Respostas Parciais
![Page 38: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/38.jpg)
© Copyright | www.sensedia.com 38
/pedidos Paginação de Consultas
• Cenário
Os resultados de pesquisas são muito grandes, sendo desnecessário ou inviável o acesso de uma única vez
Necessário a redução de custos de rede principalmente em mobile
• Solução
Dividir o conjunto de recursos em páginas minimizando o tamanho de cada requisição
• Impactos
O sistema provedor das informações precisa suportar paginação
Necessário a utilização de caches para consultas
Cliente
Página 2
Página 1
Página 3
Página 4
![Page 39: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/39.jpg)
© Copyright | www.sensedia.com 39
Paginação de Consultas
• Sem Paginação Ex: http://api.sensedia.com/v1/pedidos
Resultados potencialmente muito grandes
Inviável para mobile
Pode demandar muita infraestrutura de rede
Simples para implementar, independente da estratégia de implementação utilizada
![Page 40: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/40.jpg)
© Copyright | www.sensedia.com 40
Paginação de Consultas
• Paginação na URI – Ex 1: http://api.sensedia.com/v1/pedidos/3/50
» Página 3 com 50 registros
– Ex 2: http://api.sensedia.com/v1/pedidos/3
» Página 3
– Confunde com a URI para acesso a um elemento do conjunto:
» http://api.sensedia.com/v1/pedidos/ABCD-12345
![Page 41: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/41.jpg)
© Copyright | www.sensedia.com 41
Paginação de Consultas
• Paginação na Query String – Ex: http://api.sensedia.com/v1/pedidos?_pagina=3&_tamanho=50
– Flexível pois o cliente pode ou não utilizar esse recurso
– Pode definir o tamanho da página que é mais adequado para o consumo
– Query String => Restrições
– Opção recomendada para uso geral
![Page 42: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/42.jpg)
© Copyright | www.sensedia.com 42
Paginação de Consultas: Cases Query String
• Facebook Offset Based
– Limit – Offset
Time Based – Until – Since – Limit
Cursor Based – Limit – Before – After
• Twitter Time Based
– Until
– Count
Cursor Based
– Since_id
– Max_id
– Count
Referência: https://developers.facebook.com/docs/reference/api/pagination/ https://dev.twitter.com/docs/api/1.1/get/search/tweets
![Page 43: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/43.jpg)
© Copyright | www.sensedia.com 43
Paginação de Consultas
• Paginação usando HTTP Headers – Ex: http://api.sensedia.com/v1/pedidos
– Requer uso do cabeçalho Range na requisição
» Range: pagina=3/50
– Na resposta pode ser utilizado:
» Content-Range: pagina=3/50
– Dificulta o uso no browser
– Dificulta configuração HTTP Cache
– Mantém a QueryString livre de metadados
![Page 44: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/44.jpg)
© Copyright | www.sensedia.com 44
Subconjunto de Atributos Exemplo Filtro Positivo: http://api.sensedia.com/v1/pedidos?_atributos=cliente,data,status,total
[{
“cliente”: {
“codigo”: “ABCD-1234”
},
“data”:"2012-10-09T01:01:01",
"status": "AGUARDANDO_PAGAMENTO",
“total”: 9.99
}]
![Page 45: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/45.jpg)
© Copyright | www.sensedia.com 45
Subconjunto de Atributos Exemplo Filtro Positivo: http://api.sensedia.com/v1/pedidos?_atributos=codigo,status
[{
“codigo”: “ABCD-1234”,
"status": "AGUARDANDO_PAGAMENTO”
},
{
“codigo”: “EFGH-3456”,
"status": ”ENTREGUE”
}]
![Page 46: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/46.jpg)
© Copyright | www.sensedia.com 46
Subconjunto de Atributos Exemplo Filtro Negativo http://api.sensedia.com/v1/pedidos/4780-DEFG?_atributos=!itens
{
“codigo”:”4780-DEFG”,
“cliente”: {
“codigo”: “ABCD-1234”
},
“data”:"2012-10-09T01:01:01",
"status": "AGUARDANDO_PAGAMENTO",
“total”: 9.99
}
![Page 47: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/47.jpg)
© Copyright | www.sensedia.com 47
• Evitar refreshes desnecessários
• Referências fracas entre recursos
• Contrato Uniforme
• Processamento Assíncrono
Design
![Page 48: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/48.jpg)
© Copyright | www.sensedia.com 48
Evitar refreshes desnecessários • Cenário
Refreshes desnecessários podem impactar o potencial de escalabilidade da API
Recursos possuem diferences características quanto a volatilidade de dados
• Solução
Identificar essas características de volatilidade de dados
Instrumentar os clientes e HTTP caches
• Impactos
Maior esforço em tempo de design
Maior esforço na implementação das operações
GET /v1/pedidos/ABCD-1234 HTTP/1.1
Cache-Control: max-age=86400
Etag: 69fafe9b
{
“codigo”:”ABCD-1234”,
”status”:”AGUARDANDO_PAGAMENTO”
}
![Page 49: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/49.jpg)
© Copyright | www.sensedia.com 49
Volatilidade de Dados
Muito
Estavel
Estavel
Estavel
durante a
sessão
Instável
![Page 50: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/50.jpg)
© Copyright | www.sensedia.com 50
Volatilidade de Dados • Categorias
Alteração 1 vez ao mês
Aceita até 1 semana de defasagem
• Produtos
Alteração 1 vez por semana
Acetavel até 1 dia de defasagem
• Clientes
Alterações somente na sessão
Não há defasagem
• Pedidos
Alterações frequentes
Não é aceitavel defasagem
![Page 51: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/51.jpg)
© Copyright | www.sensedia.com 51
Evitar Refreshes Desnecessários
• Definir HTTP Headers (na resposta): Last-Modified: http://tools.ietf.org/html/rfc2616#section-13.3.1
Cache-Control: http://tools.ietf.org/html/rfc2616#section-14.9
ETag: http://tools.ietf.org/html/rfc2616#section-13.3.2
![Page 52: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/52.jpg)
© Copyright | www.sensedia.com 52
Referências fracas entre recursos • Cenário
Todos os recursos estão de certa forma associados
Não é possível manipular todos os recursos de uma só vez
• Solução
Análise do modelo conceitual para identificar as composições
Agrupar as composições em um único recurso
Definir associação fraca entre recursos
• Impactos
Possibilita a instrumentação de caches de forma mais efetiva
Clientes Pedidos
Produtos Categorias
![Page 53: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/53.jpg)
© Copyright | www.sensedia.com 53
Referências fracas entre recursos
Referências
Fortes
Referências
Fracas
![Page 54: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/54.jpg)
© Copyright | www.sensedia.com 54
Referências fracas entre recursos Produto: { “codigo”:”ABCD-1234”, “descricao”:”…”, “preco”: 10.00, “categoria”: { “codigo”:”EFGH-5678” } }
Categoria: { “codigo”:”EFGH-5678”, “nome”:”smartphones” }
![Page 55: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/55.jpg)
© Copyright | www.sensedia.com 55
• /categorias
• /categorias/{codigo}
• /produtos
• /produtos/{codigo}
• /clientes
• /clientes/{codigo}
• /clientes/{codigo}/enderecos
• /clientes/{codigo}/enderecos/{codigo}
• /pedidos
• /pedidos/{codigo}
• /pedidos/{codigo}/itens
• /pedidos/{codigo}/itens/{codigo}
Referências fracas entre recursos - URIs
![Page 56: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/56.jpg)
© Copyright | www.sensedia.com 56
Contrato Uniforme • Cenário
A manipulação dos recursos devem se comportar de forma idêntica
• Solução
Definir quais as operações HTTP serão aceitas
Definir um cojunto de códigos de retorno de sucesso e erro padronizados
Revisar o comportamento de todos os recursos
• Impactos
Aumento no custo de desenvolvimento inicial
Redução de complexidade no consumo dos recursos
POST /pedidos HTTP/1.1
201 500
401 403
![Page 57: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/57.jpg)
© Copyright | www.sensedia.com 57
200 OK: aceito para GET
201 Created: aceito para POST, indica que o recurso foi criado com
sucesso, deverá existir o header Location: indicando a URI do novo
recurso.
202 Accepted: aceito para POST, PUT, PATCH e DELETE, indica que o
recurso criado representa um processo assíncrono, portanto, além do
header Location, deverá retornar o conteúdo com um atributo status.
Posteriormente o recurso poderá ser consultado para avaliar a alteração
do status.
204 No Content: aceito para PUT, PATCH e DELETE
HTTP Status Codes – Casos de Sucesso
![Page 58: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/58.jpg)
© Copyright | www.sensedia.com 58
• Exceção de negócio – retorna código 422;
• Exceção do cliente – família 400:
400 - Requisição Mal Formada;
401 - Requisição Requer Autenticação;
403 - Requisição Negada;
404 - Recurso não Encontrado;
405 - Método não Permitido;
• Exceção do Servidor – retorna código 500;
Além do código de retorno http, os detalhes do erro devem ser retornados no payload, com um link para a documentação do erro;
HTTP Status Codes – Casos de Erro
![Page 59: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/59.jpg)
© Copyright | www.sensedia.com 59
Processamento Assíncrono • Cenário
As operações que modificam o estado, POST, PUT, PATCH e DELETE podem demorar, principalmente quando dependem do legado
• Solução
Armazenar a requisição de forma imediata
Retornar para o cliente com um ticket para que ele possa consultar o status posteriormente
Notificação de alteração de estado
• Impactos
Maior complexidade na implementação do cliente e do recurso
![Page 60: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/60.jpg)
© Copyright | www.sensedia.com 60
Processamento Síncrono
![Page 61: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/61.jpg)
© Copyright | www.sensedia.com 61
• São recursos que representam (ou iniciam) a execução de processos
de longa duração.
• Na criação de um novo recurso, deverá retornar o código 202 –
Requisição Aceita
• Eventuais erros de negócio deverão ser representados na forma de
“status”, que poderão ser consultados de forma subsequente.
• Notificação de Fim de Trabalho:
Dispositivos Móveis e Desktops: Polling
Outros Sistemas: Notificação de Eventos
Recursos com Processamento Assíncrono
![Page 62: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/62.jpg)
© Copyright | www.sensedia.com 62
Processamento Assíncrono - Polling
![Page 63: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/63.jpg)
© Copyright | www.sensedia.com 63
Processamento Assíncrono - Callback
![Page 64: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/64.jpg)
© Copyright | www.sensedia.com 64
Ferramentas
![Page 65: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/65.jpg)
API Manager
Partners Portal
API Gateway ESB
Business
Application 1
Business
Application 2
Engage Developers Manage API documentation, Access Keys and Usage
Control API Traffic
Developers
REST API Traffic
Publish
Monitoring
Policy Deploy
Web Browser
Internal Call
Get API Usage
Internal Services Discovery
Partners Apps / Commerce
Platforms
[ Componentes Tecnológicos ]
![Page 66: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/66.jpg)
© Copyright | www.sensedia.com 66
Q & A
![Page 67: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/67.jpg)
© Copyright | www.sensedia.com 67
Contatos
@aro1976
@felipe_firmo
![Page 68: REST - padrões e melhores práticas](https://reader033.fdocument.pub/reader033/viewer/2022051016/558fc7141a28ab744e8b46bf/html5/thumbnails/68.jpg)
© Copyright | www.sensedia.com 68
[ Empowering Business. Architecting IT ]
Thank You!