My presentations, using Reveal.js (mostly in Portuguese).
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

146 lines
3.7 KiB

#!/usr/bin/env pinpoint
# default style
[../_images/Seascapeshd - 2.png]
[font=Sans 50px]
[fill]
[center]
[text-align=center]
# [shading-opacity=0.0]
[text-color=white]
[text-align=left]
# presentation starts here
--- [font=Sans 100px] [text-align=center]
<big><b>ReST</b></big>
REpresentational State Transfer
---
⬩ Criado por Roy Fielding em 2000.
⬩ Fielding trabalhou na definição do HTTP e no início do projeto Apache.
--- [font=Sans 90px] [../_images/l-What-is-this-sorcery.jpg]
O que é ReST?
--- [../_images/l-What-is-this-sorcery.jpg]
É uma "arquitetura" de transmissão de dados, basicamente.
(Conjunto de idéias para utilizar HTTP para geração de APIs.)
--- [../_images/l-What-is-this-sorcery.jpg]
Linguagem? Qualquer!
Python: Flask, Django, Flask-Restless, Django Rest Framework
Ruby: Ruby on Rails, Sinatra
Java: Spring, Restlet, Jersey
C#: Ramone
Nodejs: Express
--- [font=Sans 90px] [../_images/20090504102402_dsc_2864 (1).jpg]
<big>ReST e HTTP</big>
--- [../_images/20090504102402_dsc_2864 (1).jpg]
⬩ Status das operações são status HTTP.
⬩ Meta-informações podem ser enviadas nos headers.
⬩ Autenticação é feita por HTTP Basic Auth (preferencialmente).
⬩ "CRUD para web".
--- [../_images/20090504102402_dsc_2864 (1).jpg]
Em HTTP, usam-se "métodos" para descrever o que quer ser feito:
⬩ POST requisita informações, passando um "corpo" de dados.
⬩ GET requisita informações, sem corpo.
--- [../_images/20090504102402_dsc_2864 (1).jpg]
Em REST, métodos HTTP viram CRUD:
⬩ Create = POST
⬩ Retrieve = GET
⬩ Update = PUT
⬩ Delete = DELETE
--- [font=Sans 90px] [../_images/jellybeans.jpg]
Recursos
--- [../_images/jellybeans.jpg]
⬩ Em REST, "tabelas" são chamadas "recursos"
⬩ Existem duas URLs por recurso:
⬨ Uma para o conjunto;
⬨ Uma para elementos específicos.
--- [../_images/jellybeans.jpg]
<tt>GET /recurso/</tt> ⇒ retorna todos os elementos do recurso.
<tt>POST /recurso/</tt> ⇒ cria um novo elemento.
<tt>PUT /recurso/</tt> ⇒ atualização em massa.
<tt>DELETE /recurso/</tt> ⇒ remove todos os elementos do recurso.
--- [../_images/jellybeans.jpg]
<tt>GET /recurso/id</tt> ⇒ retorna informações do elemento com identificador "id".
<tt>POST /recurso/id</tt> ⇒ não faz sentido, use <tt>POST /recurso/</tt> para criar elementos.
<tt>PUT /recurso/id</tt> ⇒ atualiza informações do elemento.
<tt>DELETE /recurso/id</tt> ⇒ Remove um elemento.
--- [../_images/jellybeans.jpg]
Exemplos:
<tt>GET /users/</tt> ⇒ Retorna a lista de todos os usuários.
<tt>POST /users/</tt> ⇒ Cria um novo usuário.
<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".
--- [font=Sans 90px] [../_images/content-strategy.jpg]
Conteúdo
--- [../_images/content-strategy.jpg]
Qualquer formato, REST não define um tipo específico.
⬩ Pode ser XML
⬩ Pode ser JSON
⬩ Pode ser HTML puro
Decisão fica a cargo da equipe.
--- [font=Sans 90px] [../_images/RightWrongBlackboard.jpg]
Status
--- [../_images/RightWrongBlackboard.jpg]
HTTP status:
⬩ 200 OK ⇒ operação concluída com sucesso.
⬩ 400 Bad Request ⇒ algo de errado com a requisição.
⬩ 403 Forbidden ⇒ sem permissão de acesso ao recurso ou elemento.
⬩ 404 Not Found ⇒ recurso ou elemento não existe.
⬩ 405 Method Not Allowed ⇒ método inválido para recurso/elemento.
⬩ 406 Not Acceptable ⇒ algum parâmetro não faz sentido.
⬩ 409 Conflict ⇒ conflito de opções.
E assim por diante, mais informações podem ser enviadas no corpo
da resposta.
--- [font=Sans 90px] [../_images/house-do-want_cut455_22k.jpg]
Por que ReST?
--- [font=Sans 90px] [../_images/1379026756351.jpg]
Por que não ReST?