Browse Source

more rest

master
Julio Biason 11 years ago
parent
commit
9a8f179b1b
  1. BIN
      _images/Luke-Derp.jpg
  2. 118
      rest/rest.pin

BIN
_images/Luke-Derp.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

118
rest/rest.pin

@ -14,16 +14,16 @@
--- [font=Sans 100px] [text-align=center] --- [font=Sans 100px] [text-align=center]
<big><b>ReST</b></big> <big><b>ReST</b></big>
REpresentational State Transfer Representational State Transfer
--- ---
Criado por Roy Fielding em 2000. Criado por Roy Fielding em 2000.
Fielding trabalhou na definição do HTTP e no início do projeto Apache. Fielding trabalhou na definição do HTTP e no início do projeto Apache.
--- [font=Sans 90px] [../_images/l-What-is-this-sorcery.jpg] --- [font=Sans 90px] [../_images/l-What-is-this-sorcery.jpg]
O que é ReST? <b>O que é ReST?</b>
--- [../_images/l-What-is-this-sorcery.jpg] --- [../_images/l-What-is-this-sorcery.jpg]
@ -43,41 +43,46 @@ Nodejs: Express
--- [font=Sans 90px] [../_images/20090504102402_dsc_2864 (1).jpg] --- [font=Sans 90px] [../_images/20090504102402_dsc_2864 (1).jpg]
<big>ReST e HTTP</big> <b>ReST e HTTP</b>
--- [../_images/20090504102402_dsc_2864 (1).jpg] --- [../_images/20090504102402_dsc_2864 (1).jpg]
⬩ Status das operações são status HTTP. • Status das operações são status HTTP.
⬩ Meta-informações podem ser enviadas nos headers. • Meta-informações podem ser enviadas nos headers.
⬩ Autenticação é feita por HTTP Basic Auth (preferencialmente). • Autenticação é feita por HTTP Basic Auth (preferencialmente).
⬩ "CRUD para web". • Sem transações/sessões -- todas as operações são atômicas.
• "CRUD para web".
--- [../_images/20090504102402_dsc_2864 (1).jpg] --- [../_images/20090504102402_dsc_2864 (1).jpg]
Em HTTP, usam-se "métodos" para descrever o que quer ser feito: Em HTTP, usam-se "métodos" para descrever o que quer ser feito:
⬩ POST requisita informações, passando um "corpo" de dados. • POST requisita informações, passando um "corpo" de dados.
⬩ GET requisita informações, sem corpo. • GET requisita informações, sem corpo.
(Ainda: PUT, DELETE, HEAD, TRACE.)
--- [../_images/20090504102402_dsc_2864 (1).jpg] --- [../_images/20090504102402_dsc_2864 (1).jpg]
Em REST, métodos HTTP viram CRUD: Em REST, métodos HTTP viram CRUD:
Create = POST Create = POST
Retrieve = GET Retrieve = GET
Update = PUT Update = PUT
Delete = DELETE Delete = DELETE
--- [font=Sans 90px] [../_images/jellybeans.jpg] --- [font=Sans 90px] [../_images/jellybeans.jpg]
Recursos <b>Recursos</b>
--- [../_images/jellybeans.jpg] --- [../_images/jellybeans.jpg]
⬩ Em REST, "tabelas" são chamadas "recursos" • Em REST, "tabelas" chamadas são "recursos".
⬩ Existem duas URLs por recurso: • (Até porque o "R" de "URL" é "resource")
⬨ Uma para o conjunto; • Sempre substantivos singulares.
⬨ Uma para elementos específicos. • Existem duas URLs por recurso:
• Uma para o conjunto;
• Uma para elementos específicos.
--- [../_images/jellybeans.jpg] --- [../_images/jellybeans.jpg]
@ -102,44 +107,87 @@ Exemplos:
<tt>GET /users/julio</tt> ⇒ Retorna as informações do usuário "julio". <tt>GET /users/julio</tt> ⇒ Retorna as informações do usuário "julio".
<tt>PUT /users/julio</tt> ⇒ Atualiza informações do usuário "julio". <tt>PUT /users/julio</tt> ⇒ Atualiza informações do usuário "julio".
<tt>DELETE /users/julio</tt> ⇒ Remove o usuário "julio".
--- [../_images/jellybeans.jpg]
Requisições sem recurso são definidas por verbos e GET:
<tt>GET /convert/?source=BRL&amp;value=10&amp;target=AUD</tt>
--- [font=Sans 90px] [../_images/content-strategy.jpg] --- [font=Sans 90px] [../_images/content-strategy.jpg]
Conteúdo <b>Conteúdo</b>
--- [../_images/content-strategy.jpg] --- [../_images/content-strategy.jpg]
Qualquer formato, REST não define um tipo específico. Qualquer formato, REST não define um tipo específico.
Pode ser XML Pode ser XML
Pode ser JSON Pode ser JSON
Pode ser HTML puro Pode ser HTML puro
Decisão fica a cargo da equipe. Decisão fica a cargo da equipe.
--- [font=Sans 90px] [../_images/RightWrongBlackboard.jpg] --- [font=Sans 90px] [../_images/RightWrongBlackboard.jpg]
Status <b>Status</b>
--- [../_images/RightWrongBlackboard.jpg] --- [../_images/RightWrongBlackboard.jpg]
HTTP status: HTTP status:
200 OK ⇒ operação concluída com sucesso. 200 OK ⇒ operação concluída com sucesso.
400 Bad Request ⇒ algo de errado com a requisição. 400 Bad Request ⇒ algo de errado com a requisição.
403 Forbidden ⇒ sem permissão de acesso ao recurso ou elemento. 403 Forbidden ⇒ sem permissão de acesso ao recurso ou elemento.
404 Not Found ⇒ recurso ou elemento não existe. 404 Not Found ⇒ recurso ou elemento não existe.
405 Method Not Allowed ⇒ método inválido para recurso/elemento. 405 Method Not Allowed ⇒ método inválido para recurso/elemento.
406 Not Acceptable ⇒ algum parâmetro não faz sentido. 406 Not Acceptable ⇒ algum parâmetro não faz sentido.
409 Conflict ⇒ conflito de opções. 409 Conflict ⇒ conflito de opções.
E assim por diante, mais informações podem ser enviadas no corpo E assim por diante, mais informações podem ser enviadas no corpo
da resposta. da resposta.
--- [../_images/RightWrongBlackboard.jpg]
Infelizmente, ReST não define o que em fazer casos de conflitos.
--- [../_images/RightWrongBlackboard.jpg]
Exemplo:
Adicionar um usuário a um grupo:
• 404 se o grupo não existir (<tt>PUT /group/1001</tt>)
• O que retornar se o usuário (dentro do conteúdo) não existir?
--- [font=Sans 90px] [../_images/house-do-want_cut455_22k.jpg] --- [font=Sans 90px] [../_images/house-do-want_cut455_22k.jpg]
Por que ReST? <b>Por que ReST?</b>
--- [../_images/house-do-want_cut455_22k.jpg]
• Reaproveita toda a estrutura de HTTP existente.
• HTTP praticamente padrão em todas as linguagens.
• Dificilmente HTTP (porta 80) é bloqueado em proxies.
• "Sintaxe" simples.
--- [font=Sans 90px] [../_images/Luke-Derp.jpg]
<b>Por que não ReST?</b>
--- [../_images/Luke-Derp.jpg] [bottom] [font=Sans 20px]
(Slide intencionalmente deixando em branco.)
--- [../_images/Luke-Derp.jpg]
• Segurança depende de terceiros (HTTPS).
• Não recomedado para dispositivos com processamento e memória
extremamente limitados.
• Necessidade de sessões/transações.
--- [../_images/Luke-Derp.jpg] [bottom] [font=Sans 20px]
--- [font=Sans 90px] [../_images/1379026756351.jpg] (Slide intencionalmente deixando em branco -- de novo.)
Por que não ReST?

Loading…
Cancel
Save