RESTful com json

28
RESTful com JSON Repensando a comunicação para reuso

description

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

Transcript of RESTful com json

Page 1: RESTful com json

RESTful  com  JSON  Repensando  a  comunicação  para  reuso  

Page 2: RESTful com json

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…”                  ]          }  }  

Page 3: RESTful com json

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…  

Page 4: RESTful com json

REST  …  “ful”  

Ei,  estou  falando  de  RESTful,  não  de  “full  rest”  

Page 5: RESTful com json

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)  

Page 6: RESTful com json

E  o  “ful”?!  

Nome  dado  aos  sistemas  que  seguem  os  princípios  REST  

Page 7: RESTful com json

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  

Page 8: RESTful com json

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  )  

Page 9: RESTful com json

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>  

Page 10: RESTful com json

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  )  

Page 11: RESTful com json

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)  

Page 12: RESTful com json

JSON  

Calma,  não  é  desse  que  estou  falando..  

Page 13: RESTful com json

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  

Page 14: RESTful com json

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  ,  

Page 15: RESTful com json

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”  

Page 16: RESTful com json

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…”                  ]          }  }  

Page 17: RESTful com json

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>  

Page 18: RESTful com json

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)  

Page 19: RESTful com json

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  

Servidor   Cliente  

GET  /  DELETE  

JSON  

POST  /  PUT  (JSON)  

app-­‐name   app-­‐name  

HTML  +  JavaScript  +  CSS  

Page 20: RESTful com json

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  

Page 21: RESTful com json

Ganho  o  que  com  isso?  

Rede  

Servidor  

Cliente  

app-­‐name  

app-­‐name  

HTML  +  JavaScript  +  CSS  

Servidor  app-­‐name-­‐2  

Servidor  app-­‐name-­‐3  

JSON  

Page 22: RESTful com json

Já  tenho  um  projeto,  tem  como  usar?  

▪  Sorria,  tem  sim…  use  facede…    facede?!  

Page 23: RESTful com json

Facede?!  

Face  de?  Cara  de  quem?  

 

Não  é  isso,  mas  é  quase…  

 

É  Facade…  

 

Page 24: RESTful com json

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  

Page 25: RESTful com json

Já  tenho  um  projeto,  tem  como  usar?  

Rede  

Servidor  

Cliente  

app-­‐name  

app-­‐name-­‐2  

HTML  (5?)  +  JavaScript  +  CSS  

Servidor  app-­‐name-­‐3  

Servidor  app-­‐name-­‐4  

JSON  

REST  Facade  

Page 26: RESTful com json

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.  

Page 27: RESTful com json

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  

Page 28: RESTful com json

Acabou!  Por  enquanto…  

Obrigado.  

Twitter:  @ErkoBridee  

Site:  http://erkobridee.com