Download - RESTful com json
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
Servidor Cliente
GET / DELETE
JSON
POST / PUT (JSON)
app-‐name app-‐name
HTML + JavaScript + CSS
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?
Rede
Servidor
Cliente
app-‐name
app-‐name
HTML + JavaScript + CSS
Servidor app-‐name-‐2
Servidor app-‐name-‐3
JSON
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?
Rede
Servidor
Cliente
app-‐name
app-‐name-‐2
HTML (5?) + JavaScript + CSS
Servidor app-‐name-‐3
Servidor app-‐name-‐4
JSON
REST Facade
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