REST - Padroes e Melhores Praticas

  • View
    3.401

  • Download
    3

Embed Size (px)

DESCRIPTION

Apresentao realizada em 05/12/2012 no JavaOneBrasil, com o Alessandro Oliveira pela Sensedia. O objetivo dessa palestra foi apresentar o trabalho em andamento sobre o tema REST para a publicao de APIs por clientes de grande porte.

Transcript

  • 1. [ Empowering Business.Architecting IT ]1 Copyright | www.sensedia.com

2. REST: Padres & Melhores Prticas2 Copyright | www.sensedia.com 3. Quem somos nsalessandro.oliveira@sensedia.com@aro1976felipe.firmo@sensedia.com@felipe_firmo3 Copyright | www.sensedia.com 4. Pblico Alvo API DesignerDiretor Arquiteto GerenteProgramador4 Copyright | www.sensedia.com 5. Agenda Sobre a Sensedia SOAP vs. REST Elegibilidade de REST Desafios de REST Padres e Melhores Prticas REST Ferramentas Q&A5 Copyright | www.sensedia.com 6. [ Sobre aSensedia ]Nosso core Arquitetura de TI:Servios & Ferramentas.Ajudamos empresas a seremMais geis, Flexveis e InovadorasCrescimento consistente:63% CAGR 2007-20116 Copyright | www.sensedia.com 7. [ Sobre aSensedia ]Profundo conhecimento em: SOA (Service Oriented Architechture) Governana Enterprise Architecture Cloud Computing7 Copyright | www.sensedia.com 8. [ Sobre aSensedia ]Posicionado como Visionrio noQuadrante Mgico do Gartner(1)Criada a partir de iniciativa conjuntaentre Ci&T e Laboratrio de Inovaoda Unicamp.8 Copyright | www.sensedia.com 9. [ Sobre aSensedia ]Sede em Campinas, SP e escritrios emSo Paulo, SP e Philadelphia, EUACampinas, BR So Paulo, BR Philadelphia, EUA9 Copyright | www.sensedia.com 10. [ Quem tem experimentadoa proposta de valor da Sensedia ]10 Copyright | www.sensedia.com 11. SOAP vs. REST11 Copyright | www.sensedia.com 12. SOAP vs. REST SOAP: Simple Object Access Protocol Baseado em XML Padronizado pelo W3C Solues de diversos fabricantes Compatibilidade com diversas linguagens e plataformas Maior consumo de banda e complexidade na implementao Contratos fortemente tipados JSR 224: JavaTM API for XML-Based Web Services (JAX-WS) 2.012 Copyright | www.sensedia.com 13. Exemplo de Requisio 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" ORCL 13 Copyright | www.sensedia.com 14. SOAP vs. REST REST: REpresentational State Transfer um estilo arquitetural, portanto, no necessariamente um PADRO Fortemente baseado na semantica do HTTP Operaes: 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 Fracos14 Copyright | www.sensedia.com 15. Exemplo de uma requisio REST GET /stocks?name=ORCL HTTP/1.115 Copyright | www.sensedia.com 16. Desafios REST16 Copyright | www.sensedia.com 17. Desafios REST Talvez o REST como um estilo arquitetural seja MUITO ABSTRATO Padronizao necessria? Os designers de API podem utilizar diversas abordagens para cada tema Cada opo possui prs e contras, que precisam ser ponderados durante a fase de design A governana pode se tornar muito complexa17 Copyright | www.sensedia.com 18. Elegibilidade REST18 Copyright | www.sensedia.com 19. Elegibilidade REST vs. SOAPAspectSOAP REST Pblico AlvoInterno/ParceirosQualquer Um Volume de ProcessamentoModerado Alto, com Picos Transao Distribuida / OrquestraoWS-* / BPEL No Padronizado Semntica de Consistncia de DadosComumente ACIDComumenteEventual Contratos Fortemente TipadosYes / WSDL / XSD WADL? / NoPadronizado SeguranaBasic / Digest / Basic / Digest / WS-Security OAuth / OpenID Ferramentas Automatizadas Bastante madurasNo so maduras Suporte de Linguagens de ProgramaoBoaExcelente Interoperabilidade entre implementaes Bastante madurasNo so maduras19 Copyright | www.sensedia.com 20. Padres REST20 Copyright | www.sensedia.com 21. Grupos dos Padres REST Estratgia de Implementao Segurana Formato de Dados Respostas Parciais Design21 Copyright | www.sensedia.com 22. Estratgia de Implementao Construir tudo do zero Reutilizar o legado22 Copyright | www.sensedia.com 23. Construir Tudo do Zero Cenrio Infraestrutura atual inexistente ouobsoleta Soluo Criao de uma arquitetura dereferncia Avaliar a utilizao de diversos tipos debanco de dados Utilizao de cache distribudo Utilizao de JMS para operaesassncronas Impactos Necessria a avaliao de diversasopes Anlise de impacto de cada escolha23 Copyright | www.sensedia.com 24. Reutilizar o Legado Cenrio J existem sistemas que provem todasas informaes a serem publicadas Soluo Modificao da arquitetura dereferncia atual para acomodar novosrequisitos Utilizao de JMS para operaesassncronas Impactos Risco de sobrecarga nos sistemaslegados Menor flexibilidade no design dasoluo Maior latncia em consultas24 Copyright | www.sensedia.com 25. Segurana Recurso Pblico Autenticao no Recurso Autenticao por Terceiros Autorizao pelo Recurso Autorizao Centralizada Criptografia das Requisies/Respostas Criptografia do Canal25 Copyright | www.sensedia.com 26. Autenticao no Recurso CenrioUsurio Restrio de acesso a um conjunto Identificado de usurios conhecidos Soluo Utilizar uma base LDAP, SQL, Recurso chave/valor Criptografia de senhas usando JavaEE Container algoritmos one-way usando salt ImpactosJAAS Risco na proteo da base de senhas Overhead na autenticaoLDAP26 Copyright | www.sensedia.com 27. Autenticao por Terceiros Cenrio Usurio Usurios no so conhecidosIdentificado previamente pelo recurso Informaes de identidade so de propriedade de terceirosResource Facebook SoluoOwner Configurar autenticao utilizando plataforma de terceiros, tais como: FacebookRecursoAPI Twitter Impactos Dependncia de fatores externos Base deUsurios27 Copyright | www.sensedia.com 28. Seguranaautenticao por terceiros Referncia: https://developers.facebook.com/docs/concepts/login/login-architecture/28 Copyright | www.sensedia.com 29. Formato de Dados Versionamento de Recursos Multiplos formatos29 Copyright | www.sensedia.com 30. Versionamento de Recursos Cenrio necessrio fazer alteraes/pedidosincompatveis no recurso No possvel assegurar a migrao detodos os clientes ao mesmo tempo Soluo V 1.0V 2.0 Manter por um perodo determinadomais de uma verso do recurso emoperao V 1.1 Impactos Complexidade de Governana Aumento de custos de operao edesenvolvimento30 Copyright | www.sensedia.com 31. Versionamento de Recursos Nenhum Versionamento Funciona como se o recurso /pedidosestivesse sempre na verso 1 Impede a incluso de novosatributos obrigatriosV 1.0 Impede a retirada deatributos Tende a deixar os recursosV 1.1muito complexos Ao longo do tempo pode serinsustentvel V 1.2 Verso nica31 Copyright | www.sensedia.com 32. Versionamento de Recursos Versionamento na URI /pedidos Ex: http://api.sensedia.com/v1/pedidos Viola HATEOAS Fcil roteamento entre servidores /v1/pedidos /v2/pedidos Fcil manuteno de cdigo No requer a utilizao de cabealhos32 Copyright | www.sensedia.com 33. Versionamento de Recursos Versionamento na Query String/pedidos Ex: http://api.sensedia.com/pedidos?_version=1 Viola HATEOAS Parmetro opcional ou obrigatrio? /pedidos?/pedidos? Difcil manuteno de cdigo_version=1 _version=2 No requer a utilizao de cabealhos33 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 implementao de clientes Dificulta o acesso via browser (no deve ter verso default,certo?) Moderada complexidade na manuteno de cdigo34 Copyright | www.sensedia.com 35. Versionamento de Recursos Nenhum URI Query String VND Twitter at 2009 Twitter aps 2009 Facebook Azure Flickr FoursquareGoogle DataGitHub (v 3)Dropbox Netflix *GitHub (v 2)PayPalYammerEBayDeliciousLast FMTwillio35 Copyright | www.sensedia.com 36. Mltiplos Formatos Cenrio Dependendo do recurso, talvez seja/pedidos/ABCD-1234importante represent-lo de diversasformas. Soluo Possibilitar que o cliente passe noJSONXMLheader Accept, o formato desejado. Prover diversas alternativas derenderizao dependendo do tipo dorecursoICALPDF Impactos Flexibilidade do uso pelos clientes Aumento de complexidade naimplementao36 Copyright | www.sensedia.com 37. Respostas Parciais Paginao de Consultas Subconjunto de Atributos37 Copyright | www.sensedia.com 38. Paginao de Consultas/pedidos Cenrio Os resultados de pesquisas so muito Cliente Pgina 1grandes, sendo desnecessrio ouinvivel o acesso de uma nica vez Necessrio a reduo de custos de redeprincipalmente em mobile Pgina 2 Soluo Dividir o conjunto de recursos empginas minimizando o tamanho de Pgina 3cada requisio Impactos O sistema provedor das informaesprecisa suportar paginao Pgina 4 Necessrio a utilizao de caches paraconsultas38 Copyright | www.sensedia.com 39. Paginao de Consultas Sem Paginao Ex: http://api.sensedia.com/v1/pedidos Resultados potencialmente muito grandes Invivel para mobile Pode demandar muita infraestrutura de rede Simples para implementar, independente da estratgia deimplementao utilizada39 Copyright | www.sensedia.com 40. Paginao de Consultas Paginao na URI Ex 1: http://api.sensedia.com/v1/pedidos/3/50 Pgina 3 com 50 registros Ex 2: http://api.sensedia.com/v1/pedidos/3 Pgina 3 Confunde com a URI para acesso a um elemento do conjunto: http://api.sensedia.com/v1/pedidos/ABCD-1234540 Copyright | www.sensedia.com 41. Paginao de Consultas Paginao na Query String Ex: http://api.sensedia.com/v1/pedidos?_pagina=3&_tamanho=50 Flexvel pois o cliente pode ou no utilizar esse recurso Pode definir o tamanho da pgina que mais adequado para o consumo Query String => Restries Opo recomendada para uso geral41 Copyright | www.sensedia.com 42. Paginao de Consultas: Cases Query String Facebook Twitter Offset Based Time Based Limit Until Offset Count Time Based Until Cursor Based Since Since_id Limit Max_id Cursor Based Count Limit Before After Referncia: https://developers.facebook.com/docs/reference/api/pagination/42 https://dev.twitter.