O documento discute RESTful com JSON. Apresenta brevemente o autor e sua formação e habilidades em tecnologias como Flex, Angular e Java. Em seguida, descreve a agenda do tópico, incluindo explicações sobre REST, recursos, operações e como JSON é melhor que XML para esse fim.
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)
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