RESTful com json
Upcoming SlideShare
Loading in...5
×
 

RESTful com json

on

  • 3,786 views

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

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

Statistics

Views

Total Views
3,786
Views on SlideShare
3,786
Embed Views
0

Actions

Likes
1
Downloads
75
Comments
1

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

RESTful com json RESTful com json Presentation Transcript

  • RESTful  com  JSON  Repensando  a  comunicação  para  reuso  
  • 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…”                  ]          }  }  
  • 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…  
  • REST  …  “ful”  Ei,  estou  falando  de  RESTful,  não  de  “full  rest”  
  • 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)  
  • E  o  “ful”?!   Nome  dado  aos   sistemas  que  seguem  os   princípios  REST  
  • 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  
  • 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  )  
  • 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>  
  • 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  )  
  • 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)  
  • JSON  Calma,  não  é  desse  que  estou  falando..  
  • 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  
  • 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  ,  
  • 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”  
  • 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…”                  ]          }  }  
  • 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>  
  • 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)  
  • 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  
  • 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  
  • Ganho  o  que  com  isso?   HTML  +  JavaScript  +  CSS   Rede   Cliente   app-­‐name   JSON   Servidor   app-­‐name-­‐2   Servidor   app-­‐name   Servidor   app-­‐name-­‐3  
  • Já  tenho  um  projeto,  tem  como  usar?  ▪  Sorria,  tem  sim…  use  facede…    facede?!  
  • Facede?!   Face  de?  Cara  de  quem?     Não  é  isso,  mas  é   quase…     É  Facade…    
  • 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  
  • 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  
  • 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.  
  • 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  
  • Acabou!  Por  enquanto…   Obrigado.   Twitter:  @ErkoBridee   Site:  http://erkobridee.com