SlideShare uma empresa Scribd logo
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	
  

Mais conteúdo relacionado

PDF
Mini Curso Web Services com PHP
PDF
Criando e consumindo webservice REST com PHP e JSON
PDF
PHP RESTful Web Services
KEY
PHP RESTful Web Services - PHPConf'09
PDF
REST Web Services com Java
PDF
Consumindo dados via web service no android
PPTX
Android webservice
PDF
WebService Restful em Java
Mini Curso Web Services com PHP
Criando e consumindo webservice REST com PHP e JSON
PHP RESTful Web Services
PHP RESTful Web Services - PHPConf'09
REST Web Services com Java
Consumindo dados via web service no android
Android webservice
WebService Restful em Java

Mais procurados (20)

PDF
Criando Webservices RESTFul com CakePHP
PDF
Criando e consumindo Web Services (REST) com o CakePHP
PPT
Web Services Rest
PDF
De Web Services RESTful a Aplicações Mashup
PDF
Como um verdadeiro sistema REST funciona: arquitetura e performance na Abril
PDF
Monografia restful -_2013_-_desenvolvimento_v17-final-2014[1]
PDF
Novidades do JAX-RS 2.0
PDF
Como um grande sistema REST funciona - arquitetura e desempenho
PPTX
Rest
PDF
Uma visão geral do OpenLDAP e Active Directory
PDF
Web 2.0 e RIA com PHP
PDF
Minicurso de PHP Com Ajax
PPTX
Palestra Sobre REST
PDF
PDF
Sistemas Distribuídos - Big Web Services
PDF
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
PDF
Alexandria: um Sistema de Sistemas para Publicação de Conteúdo Digital utiliz...
PPT
Webservices e Xml
PDF
Web service
PDF
Introdução a Web Services
Criando Webservices RESTFul com CakePHP
Criando e consumindo Web Services (REST) com o CakePHP
Web Services Rest
De Web Services RESTful a Aplicações Mashup
Como um verdadeiro sistema REST funciona: arquitetura e performance na Abril
Monografia restful -_2013_-_desenvolvimento_v17-final-2014[1]
Novidades do JAX-RS 2.0
Como um grande sistema REST funciona - arquitetura e desempenho
Rest
Uma visão geral do OpenLDAP e Active Directory
Web 2.0 e RIA com PHP
Minicurso de PHP Com Ajax
Palestra Sobre REST
Sistemas Distribuídos - Big Web Services
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
Alexandria: um Sistema de Sistemas para Publicação de Conteúdo Digital utiliz...
Webservices e Xml
Web service
Introdução a Web Services
Anúncio

Destaque (20)

PPTX
Testando aplicações DataSnap
PPTX
Datasnap com FireDAC - Embarcadero Conference 2015
PPTX
Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...
PPTX
Nova Infraestrutura JSON: System.JSON na prática
PPTX
Minicurso Javascript
PPTX
Minicurso JSON & Ajax
PPTX
Introdução FireDAC Acesso multi-banco para Delphi e C++ Builder
PDF
Exploring FireDAC
PDF
Modularização via BPL - Abordagem Prática para DataSnap & Front-end
PDF
REST Servers in Delphi XE Using DataSnap
PPT
PPTX
Dados e Serviços Remotos via DataSnap
PDF
Conselhos bíblicos de como lidar com um filho rebelde
PPTX
Conhecendo o Novo REST Framework
PPTX
Python + Delphi: Um relacionamento que está dando certo
PDF
Delphi Conference 2011 - Desmistificando as Expressões Regulares
PDF
Don gossett há poder em suas palavras
PPT
Comunidade Slideshare
PDF
kathryn-kuhlman-nada-e-impossivel-para-Deus
Testando aplicações DataSnap
Datasnap com FireDAC - Embarcadero Conference 2015
Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...
Nova Infraestrutura JSON: System.JSON na prática
Minicurso Javascript
Minicurso JSON & Ajax
Introdução FireDAC Acesso multi-banco para Delphi e C++ Builder
Exploring FireDAC
Modularização via BPL - Abordagem Prática para DataSnap & Front-end
REST Servers in Delphi XE Using DataSnap
Dados e Serviços Remotos via DataSnap
Conselhos bíblicos de como lidar com um filho rebelde
Conhecendo o Novo REST Framework
Python + Delphi: Um relacionamento que está dando certo
Delphi Conference 2011 - Desmistificando as Expressões Regulares
Don gossett há poder em suas palavras
Comunidade Slideshare
kathryn-kuhlman-nada-e-impossivel-para-Deus
Anúncio

Semelhante a RESTful com json (20)

PDF
Construindo APIs RESTful com Spring
PDF
Desenvolvimento de uma API RESTful com Java EE
PDF
REST vs GraphQL - A batalha das APIs.pdf
PDF
REST vs GraphQL - A batalha das APIs.pdf
PPTX
HTTP, JSON, REST e AJAX com AngularJS
PDF
Rest web services com Java
KEY
Do Rest Ao Restfull - Rio Jug
PDF
Introdução APIs RESTful
PDF
InterCon 2017 - Design Coerente: decisões de tecnologia para APIs - Ravan Scafi
PPTX
Integrando sua App ao Mundo via REST/JSON
PDF
Aula-16-Semana-05-RESTFull-Services Aula.pdf
PDF
Design de RESTful APIs
PDF
compreensão geral para estruturar uma api
PPTX
Desbravando o REST com Python
PPTX
Rest workshop
PPTX
Apresentação 9 challenge (1).pptx
PPTX
Web Services
PDF
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]
PDF
Restful considerada prejudicial - parte 1
PDF
REST-fuuuu
Construindo APIs RESTful com Spring
Desenvolvimento de uma API RESTful com Java EE
REST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdf
HTTP, JSON, REST e AJAX com AngularJS
Rest web services com Java
Do Rest Ao Restfull - Rio Jug
Introdução APIs RESTful
InterCon 2017 - Design Coerente: decisões de tecnologia para APIs - Ravan Scafi
Integrando sua App ao Mundo via REST/JSON
Aula-16-Semana-05-RESTFull-Services Aula.pdf
Design de RESTful APIs
compreensão geral para estruturar uma api
Desbravando o REST com Python
Rest workshop
Apresentação 9 challenge (1).pptx
Web Services
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]
Restful considerada prejudicial - parte 1
REST-fuuuu

Mais de Erko Bridee de Almeida Cabrera (14)

PPTX
Slides da palestra no Flex mania 2011
PPTX
FlexMania 2010 - Adobe Flex + Oracle WebLogic 10.x [Ambiente]
PPTX
FlexMania 2010 - Adobe Flex + Oracle WebLogic 10.x [Slides]
PDF
Estatuto Social Oscip Guarany Atual 20 07 2009
PPTX
PPS
Atravessando O Rio
PPS
As Maos De Albrecht Durer
PDF
Palestra Web 2.0 & RIA
Slides da palestra no Flex mania 2011
FlexMania 2010 - Adobe Flex + Oracle WebLogic 10.x [Ambiente]
FlexMania 2010 - Adobe Flex + Oracle WebLogic 10.x [Slides]
Estatuto Social Oscip Guarany Atual 20 07 2009
Atravessando O Rio
As Maos De Albrecht Durer
Palestra Web 2.0 & RIA

Último (16)

PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PPTX
Arquitetura de computadores - Memórias Secundárias
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PDF
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PDF
Processos na gestão de transportes, TM100 Col18
PDF
COBITxITIL-Entenda as diferença em uso governança TI
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Arquitetura de computadores - Memórias Secundárias
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Custos e liquidação no SAP Transportation Management, TM130 Col18
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
Processos na gestão de transportes, TM100 Col18
COBITxITIL-Entenda as diferença em uso governança TI

RESTful com json

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