RESTful com json

4,289 views

Published on

Apresentação de como projetar uma aplicação para utilizar REST e utilizar JSON para trafegar as informações

Published in: Technology
1 Comment
6 Likes
Statistics
Notes
No Downloads
Views
Total views
4,289
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
120
Comments
1
Likes
6
Embeds 0
No embeds

No notes for slide

RESTful com json

  1. 1. RESTful  com  JSON  Repensando  a  comunicação  para  reuso  
  2. 2. Quem  sou  eu?  {          “pessoa”  :  {                  “nome”:  “Erko  Bridee  de  Almeida  Cabrera”,                  “idade”:  28,                  “nascimento”:  “02/07/1984”,                  “formacao”:  “Bacharel  em  Ciência  da  Computação  –  CESUFOZ”,                  “habilidades”:  [                          “adobe  flex”,    “angular.js”,                            “java”,    “javascript”,                            “node.js”,  “RIA”,  “mais  algumas  outras…”                  ]          }  }  
  3. 3. Agenda  ▪  REST  …  “ful”  ▪  REST  e  seus  recursos  ▪  REST  e  suas  operações  ▪  REST  não  é  RPC,  não  insista  ▪  JSON  ▪  JSON  …  por  que  não  XML?  ▪  Enfim  …  RESTful  com  JSON  ▪  Ganho  o  que  com  isso?  ▪  Já  tenho  um  projeto,  tem  como  usar?  ▪  Código  por  favor…  
  4. 4. REST  …  “ful”  Ei,  estou  falando  de  RESTful,  não  de  “full  rest”  
  5. 5. REST  …  “ful”  ▪  REST  –  (Representational  State  Transfer)  Transferência  do  Estado   Representacional   –  Um  conceito  importante  em  REST  é  a  existência  de  recursos     ▪  Sobre  estes,  temos  um  conjunto  de  operações  bem  definidas   –  Surgiu  em  2000,  como  uma  tese  de  PHD   ▪  Roy  Fielding  (um  dos  autores  da  especificação  do  protocolo  HTTP)  
  6. 6. E  o  “ful”?!   Nome  dado  aos   sistemas  que  seguem  os   princípios  REST  
  7. 7. REST  e  seus  recursos  ▪  Recurso  =  Elemento  de  Informação  ▪  Cada  recurso  é  unicamente  direcionado  através  da  sua  URI   –  URI  =  URL  +  URN   ▪  URI  –  (Uniform  Resource  Identifier)  Identificador  Uniforme  de  Recursos   ▪  URL  –  (Uniform  Resource  Locator  )  Localização  de  Recursos  Uniforme   ▪  URN  –  (Uniform  Resource  Name)  Nome  de  Recursos  Uniforme   –  Boa  prática  indicada,  utilizar  o  nome  no  plural   –  Exemplo  de  URI   Protocolo   URL   URN   http://   app-­‐name/   pessoas  
  8. 8. REST  e  suas  operações  ▪  Utiliza  as  operações  do  HTTP   –  GET,  POST,  PUT,  DELETE  ▪  Normalmente  associado  as  operações  CRUD   URI   HTTP   CRUD   METHOD   http://app-­‐name/pessoas   GET   READ  ALL   list()  :  List<Pessoa>   http://app-­‐name/pessoas/1   GET   READ  ONE   find(  id  )  :  Pessoa   http://app-­‐name/pessoas   POST   CREATE   add(  Pessoa  )  :  Pessoa   http://app-­‐name/pessoas/1   PUT   UPDATE   update(  Pessoa  )  :  Pessoa   http://app-­‐name/pessoas/1   DELETE   DELETE   remove(  id  )  
  9. 9. REST  e  suas  operações   ▪  Tenha  em  mente   –  Implementar  no  mínimo  as  respectivas  operações  CRUD     –  Caso  necessário  pode-­‐se  implementar  URIs  de  funcionalidades  a  mais     –  Na  listagem  (READ  ALL)  pensar  em  paginação  URI   HTTP   CRUD   METHOD  http://app-­‐name/pessoas?limit=10&offset=0   GET   READ  ALL   list(limit,  offset)  :  List<Pessoa>  http://app-­‐name/pessoas/search   POST   READ  SOME   search(  Pessoa  )  :  List<Pessoa>  
  10. 10. REST  e  suas  operações   ▪  E  mais  uma  “coisa”   –  É  indicado  como  boa  prática:   ▪  No  mínimo  incluir  na  URL:  /rest/  ou  /api/   ▪  Porém  é  mais  utilizado  ter  um  sub-­‐domínio  ex.:  http://api.app-­‐name/{recurso}  URI   HTTP   CRUD   METHOD  http://app-­‐name/rest/pessoas   GET   READ  ALL   list()  :  List<Pessoa>  http://app-­‐name/rest/pessoas/1   GET   READ  ONE   find(  id  )  :  Pessoa  http://app-­‐name/rest/pessoas   POST   CREATE   add(  Pessoa  )  :  Pessoa  http://app-­‐name/rest/pessoas/1   PUT   UPDATE   update(  Pessoa  )  :  Pessoa  http://app-­‐name/rest/pessoas/1   DELETE   DELETE   remove(  id  )  
  11. 11. REST  não  é  RPC,  não  insista   ▪  RPC  –  remote  procedure  call   ▪  Exemplo  de  HTTP  -­‐  RPC  URI   HTTP   CRUD   METHOD  http://app-­‐name/pessoa/list   GET   READ  ALL   list()  :  List<Pessoa>  http://app-­‐name/pessoa/find   POST   READ  ONE   find(id)  :  Pessoa  http://app-­‐name/pessoa/add   POST   CREATE   add(Pessoa)  :  Pessoa  http://app-­‐name/pessoa/update   POST   UPDATE   update(Pessoa)  :  Pessoa  http://app-­‐name/pessoa/remove   POST   DELETE   remove(Pessoa)  
  12. 12. JSON  Calma,  não  é  desse  que  estou  falando..  
  13. 13. JSON  ▪  JSON  –  JavaScript  Object  Notation     –  Surgiu  em  2001   ▪   JSON.org  em  2002   –  utilizado  pela  Yahoo!  a  partir  2005   –  Especificado  e  definido  por    Douglas  Crockford,  descrita  na  RFC  4627  (07/2006)   –  Tipo  de  media  definido  para  o  JSON:      application/json   –  Extensão  de  um  arquivo  JSON:      .json  ▪  Formato  utilizado  para  serialização  e  transmissão  de  informações   pela  rede   –  Devido  ao  seu  formato,  ele  trafega  menos  dados  pela  rede   –  Facilidade  para  leitura  da  informação  
  14. 14. JSON  ▪  Os  tipos  de  dados   –  String  :  unicode  e  definida  entre  “”   –  Object  :  Definido  entre  {  “chave1”:  “valor”,  “chave2”:  2,  …    }   ▪  Boa  prática:  procure  definir  as  chaves  (atributos)  em  CamelCase   –  Number  :  segue  a  mesma  convenção  do  Number  no  JavaScript   –  Boolean  :  true  ou  false   –  null  :    vazio   –  Array  :  definido  entre  [],  podendo  conter  qualquer  tipo  válido,  separado  por  ,  
  15. 15. JSON  ▪  E  tipo  Date?   –  O  JSON  não  possui  uma  definição  para  este  tipo     –  Existem  2  alternativas  para  a  serialização,  porém  a  definição  em  geral  é  manual   ▪  Utilizar  o  tipo  Number  e  trafegar  em  milisegundos   ▪  Utilizar  o  tipo  String  com  a  data  (c/s  hora)  formatada     –  Ex.:  “dd/MM/yyyy  hh:nn:ss“  -­‐  “01/02/2013  01:02:03”  
  16. 16. Isso  é  JSON,  simples  não?  {          “pessoa”  :  {                  “nome”:  “Erko  Bridee  de  Almeida  Cabrera”,                  “idade”:  28,                  “nascimento”:  “02/07/1984”,                  “formacao”:  “Bacharel  em  Ciência  da  Computação  –  CESUFOZ”,                  “habilidades”:  [                          “adobe  flex”,    “angular.js”,                            “java”,    “javascript”,                            “node.js”,  “RIA”,  “mais  algumas  outras…”                  ]          }  }  
  17. 17. JSON  …  por  que  não  XML?  <pessoa>          <nome>Erko  Bridee  de  Almeida  Cabrera</nome>          <idade>28</idade>          <nascimento>02/07/1984</nascimento>          <formacao>Bacharel  em  Ciência  da  Computação  –  CESUFOZ</formacao>          <habilidades>                  <habilidade>adobe  flex</habilidade>  <habilidade>angular.js</habilidade>                  <habilidade>java</habilidade>  <habilidade>javascript</habilidade>                  <habilidade>node.js</habilidade>    <habilidade>RIA</habilidade>                  <habilidade>mais  algumas  outras...</habilidade>          </habilidades>  </pessoa>  
  18. 18. JSON  …  por  que  não  XML?  ▪  Nada  contra  quem  goste  de  XML…  ▪  Legibilidade  ▪  Quantidade  de  dados  trafegado   –  Mesmo  utilizando  compactação  GZip  no  servidor,  a  quantidade  de  dados   trafegado  é  superior  ao  JSON  com  Gzip  ▪  XML  está  ficando  no  passado  (realidade  na  internet)  
  19. 19. Enfim  …  RESTful  com  JSON  ▪  Nada  mais  é  do  que  uma  aplicação  que  implementa  o  REST  e  utiliza  o   JSON  para  comunicação  entre  o  cliente  (interface)  e  o  servidor   Rede   HTML  +  JavaScript  +  CSS   GET  /  DELETE   POST  /  PUT  (JSON)   JSON   Servidor   Cliente   app-­‐name   app-­‐name  
  20. 20. Ganho  o  que  com  isso?  ▪  O  tão  falado  reúso  ▪  Meio  caminho  andado  para  uma  API  /  Data  Service  ▪  Muitas  tecnologias  /  linguagem  disponibilizam  suporte  nativo   –  Comunicação  HTTP  REST  e  Serialização/Deserialização  JSON  ▪  Uso  do  cache  e  demais  recursos  do  protoco  HTTP  
  21. 21. Ganho  o  que  com  isso?   HTML  +  JavaScript  +  CSS   Rede   Cliente   app-­‐name   JSON   Servidor   app-­‐name-­‐2   Servidor   app-­‐name   Servidor   app-­‐name-­‐3  
  22. 22. Já  tenho  um  projeto,  tem  como  usar?  ▪  Sorria,  tem  sim…  use  facede…    facede?!  
  23. 23. Facede?!   Face  de?  Cara  de  quem?     Não  é  isso,  mas  é   quase…     É  Facade…    
  24. 24. Já  tenho  um  projeto,  tem  como  usar?  ▪  Já  ouviu  falar  em  Facade?     –  Crie  uma  camada  (sendo  abstrato:  Facade  é  uma  camada)   ▪  Implemente  o  REST   ▪  Use  o  JSON   ▪  Cada  recurso,  uma  entidade,  uma  URI  
  25. 25. Já  tenho  um  projeto,  tem  como  usar?   HTML  (5?)  +  JavaScript  +  CSS   Rede   Cliente   app-­‐name-­‐2   Servidor   app-­‐name-­‐3   JSON   REST  Facade   app-­‐name   Servidor   app-­‐name-­‐4   Servidor  
  26. 26. Já  tenho  um  projeto,  tem  como  usar?  ▪  Muito  Importante:   –  Favor  não  utilizar  a  metodologia  XGH,  por  mais  ágil  que  ela  seja.   ▪  XGH  –  eXtreme  Go  Horse  ▪  Lembre-­‐se  :     –  Uma  análise  é  recomendada  antes  de  colocar  a  mão  no  código.   –  Tenha  em  mente  o  que  foi  falado  anteriormente.  
  27. 27. Código  por  favor…  ▪  RESTful  com  JSON   –  https://github.com/erkobridee   ▪  angularjs-­‐github-­‐info   ▪  restful-­‐bookmarsk-­‐…  (springrest,  jerseyspring,  scala,  php  e  node.js)    ▪  Essa  é  a  hora  de  você  tentar  a  sorte  e  fazer  as  perguntas  hehe  
  28. 28. Acabou!  Por  enquanto…   Obrigado.   Twitter:  @ErkoBridee   Site:  http://erkobridee.com  

×