Você está na página 1de 28

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  

Você também pode gostar