© CasadoCódigo TodososdireitosreservadoseprotegidospelaLeinº9.610,de10/02/1998. Nenhumapartedestelivropoderáserreproduzida,nemtransmitida,semauto- rizaçãopréviaporescritodaeditora,sejamquaisforemosmeios: fotográficos, eletrônicos,mecânicos,gravaçãoouquaisqueroutros. CasadoCódigo Livrosparaoprogramador RuaVergueiro,3185-8ºandar 04101-300–VilaMariana–SãoPaulo–SP–Brasil CasadoCódigo Sumário Sumário 1 PorqueutilizarREST? 1 1.1 HTMLtradicionalversusREST . . . . . . . . . . . . . . . . . . . . . . 1 1.2 Webservices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.3 REST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.4 DesenvolvendoumprotótipodewebserviceREST . . . . . . . . . . . 6 1.5 AvançandooprotótipodewebserviceREST . . . . . . . . . . . . . . 9 1.6 Sumário . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2 OprotocoloHTTP 13 2.1 OsfundamentosdoHTTP . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.2 MétodosHTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.3 Tiposdepassagemdeparâmetros . . . . . . . . . . . . . . . . . . . . . 17 2.4 Cabeçalhos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.5 MediaTypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.6 Códigosdestatus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.7 Conclusão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3 ConceitosdeREST 29 3.1 Semânticasderecursos . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.2 Interaçãopormétodos . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.3 Representaçõesdistintas . . . . . . . . . . . . . . . . . . . . . . . . . . 32 3.4 Usocorretodestatuscodes . . . . . . . . . . . . . . . . . . . . . . . . . 34 3.5 HATEOAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 3.6 Sumário . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 i Sumário CasadoCódigo 4 Tiposdedados 39 4.1 XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 4.2 FerramentalXML:conhecendoosXMLSchemas . . . . . . . . . . . . 40 4.3 TrabalhandocomXMLutilizandoJAXB . . . . . . . . . . . . . . . . . 49 4.4 TestandooXMLgerado. . . . . . . . . . . . . . . . . . . . . . . . . . . 54 4.5 UtilizandoJAXBsemumXMLSchema . . . . . . . . . . . . . . . . . 55 4.6 JSON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 4.7 TrabalhandocomJSONutilizandoJAXB . . . . . . . . . . . . . . . . . 58 4.8 ValidaçãodeJSONcomJSONSchema . . . . . . . . . . . . . . . . . . 62 4.9 Conclusão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 5 ImplementandoserviçosRESTemJavacomServlets 69 5.1 UmaimplementaçãocomServlets. . . . . . . . . . . . . . . . . . . . . 69 5.2 Implementandonegociaçãodeconteúdo . . . . . . . . . . . . . . . . . 81 5.3 Implementandoabuscaporumacervejaespecífica . . . . . . . . . . . 83 5.4 Implementandoacriaçãodeumrecurso . . . . . . . . . . . . . . . . . 89 5.5 Implementandonegociaçãodeconteúdonacriaçãodorecurso . . . . 95 5.6 Conclusão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 Bibliografia 101 Versão:16.3.8 ii Capítulo1 Por que utilizar REST? “Nãoémerecedordofavodemelaquelequeevitaacolméiaporqueasabelhastêm ferrões” –WilliamShakespeare Vocêéumempreendedor. Seguindoafilosofiadeumastartup, vocêquerpro- duzirumsiteparaseuproduto,umalojadecervejasfinaspelainternet.Assim,você querfazerumsistemaquesejarápidodeproduzire,aomesmotempo,sejaeficiente efácildereutilizaremváriosambientesdiferentes(vocêestáconsiderandoumaver- sãomobileparaosistema).Assim,vocêexploradiversaspossibilidades. 1.1 HTML tradicional versus REST Vocêdecideavaliar,antesdetudo,sistemastradicionaisweb,baseadosemformulá- riosHTML. Ficaclaroparavocêquefazerumsistematradicional,baseadoemformulários HTML,estáforadequestão. Issoporqueessetipodeformulárioéclaramenteoti- 1.2. Webservices CasadoCódigo mizadoparatrabalharcomsistemasbaseadosnaweb,masvocênãotemcertezaem relaçãoaoquantoeleseráflexívelparatrabalharcomoutrostiposdefront-end. Por exemplo,considereumatelaparacadastrodosclientesdosite: <html> <body> <form action="/cadastrar" method="post"> <input type="text" name="nome" /> <input type="text" name="dataNascimento" /> <input type="submit" value="Cadastrar" /> </form> </body> </html> Estecódigo(comumpoucomaisdetratamento)deveteatenderbem. Noen- tanto, após submeter o formulário, o servidor deve te trazer uma página HTML - o que, obviamente, não é desejável num cenário com vários front-ends, como um aplicativoparaAndroidouiOS. Suapróximapossibilidadeé,portanto,avaliaroutrostiposdesistemas. 1.2 Web services Opróximocenárioquevemàsuamenteéodeusodewebservicestradicionais,ou seja,baseadosemSOAP(SimpleObjectAccessProtocol).Aprincípio,tepareceuma boaidéia,jáqueéomecanismodetráfegodeinformaçõeséviaXMLe,portanto,é possívelinteragircomserviçosdessetipoapartirdecódigojavascript(ouseja,pos- sibilitandoainteraçãotantoapartirdeumbrowserquantoapartirdecódigopuro). Porém,estudandomaisvocêpercebequeinteragircomestetipodewebservicenãoé tãosimplesquantovocêgostaria.Porexemplo,paralistarosclientesdoseusistema, énecessárioenviaroseguinteXMLparaoservidor: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <listarClientes xmlns="http://brejaonline.com.br/administracao/1.0/service" /> </soap:Body> </soap:Envelope> Aoquevocêreceberácomoresposta: <soap:Envelope xmlns:domain="http://brejaonline.com.br/administracao/1.0/domain" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 2 CasadoCódigo Capítulo1. PorqueutilizarREST? <soap:Body> <listarClientesResponse xmlns="http://brejaonline.com.br/administracao/1.0/service"> <domain:clientes> <domain:cliente domain:id="1"> <domain:nome>Alexandre</domain:nome> <domain:dataNascimento>2012-12-01</domain:dataNascimento> </domain:cliente> <domain:cliente domain:id="2"> <domain:nome>Paulo</domain:nome> <domain:dataNascimento>2012-11-01</domain:dataNascimento> </domain:cliente> </domain:clientes> </listarClientesResponse> </soap:Body> </soap:Envelope> Este código, então, te parece complicado demais para uma simples requisição delistagemdeclientes. Acomplexidade(everbosidade)doprotocoloficaespecial- menteevidentequandovocêpensanocasodacomunicaçãofeitacomplataformas móveis,ondeacomunicaçãopelarededeveseramaissucintapossível. 1.3 REST VocêestudamaisarespeitodewebservicesquandovocêlêsobreserviçosREST.Ao estudarsobreoassunto, tepareceumatécnicasimples. Porexemplo, pararealizar a listagem de clientes do seu sistema, você pode utilizar o navegador (seja este o Chrome, Firefox, Internet Explorer ou qualquer outro) paraabrira URL http://localhost:8080/cervejaria/clientes. Aofazerisso,vocêpodeobteroseguintere- sultado: <clientes> <cliente id="1"> <nome>Alexandre</nome> <dataNascimento>2012-12-01</dataNascimento> </cliente> <cliente id="2"> <nome>Paulo</nome> <dataNascimento>2012-11-01</dataNascimento> </cliente> </clientes> 3 1.3. REST CasadoCódigo Mas,afinal,comofazerseucódigointeragircomestalistagem?Oqueaconteceu? OsprincípiosbásicosdeREST REST significa REpresentational State Transfer (ou Transferência de Estado Representativo,emtraduçãolivre),eéumestilodedesenvolvimento de web services que teve origem na tese de doutorado de Roy Fielding. Este, por sua vez, é co-autor de um dos protocolos mais utilizados no mundo, o HTTP ( HyperText Transfer Protocol).Assim,énotávelqueoprotocoloRESTégui- ado(dentreoutrospreceitos)peloqueseriamasboaspráticasdeusodeHTTP: • UsoadequadodosmétodosHTTP; • UsoadequadodeURL’s; • Usodecódigosdestatuspadronizadospararepresentaçãodesucessosoufa- lhas; • UsoadequadodecabeçalhosHTTP; • Interligaçõesentreváriosrecursosdiferentes. Opropósitodestelivroé,portanto,exemplificaroquesãoestaspráticaseguiar você,leitor,atravésdasmesmasefornecerosinsumosdecomoconstruirseuspró- priosserviços,demaneiraqueestessejamsempretãoescaláveis,reutilizáveisema- nuteníveisquantopossível. AsfundaçõesdeREST O“marcozero”deRESTéorecurso. EmREST,tudoédefinidoemtermosde recursos, sendoestesosconjuntosdedadosquesãotrafegadospeloprotocolo. Os recursossãorepresentadosporURI’s.Noteque,naweb,URI’seURL’ssãoessencial- menteamesmacoisa-razãopelaqualvouusarosdoistermosnestelivrodeforma intercalada. 4
Description: