diff --git a/_images/Luke-Derp.jpg b/_images/Luke-Derp.jpg new file mode 100644 index 0000000..bad1937 Binary files /dev/null and b/_images/Luke-Derp.jpg differ diff --git a/_images/thats-all-folks.jpg b/_images/thats-all-folks.jpg new file mode 100644 index 0000000..ca7c221 Binary files /dev/null and b/_images/thats-all-folks.jpg differ diff --git a/rest/rest.pin b/rest/rest.pin index f18a370..42e5295 100644 --- a/rest/rest.pin +++ b/rest/rest.pin @@ -2,28 +2,29 @@ # default style [../_images/Seascapeshd - 2.png] -[font=Sans 50px] +[font=Sans 40px] [fill] [center] [text-align=center] # [shading-opacity=0.0] [text-color=white] [text-align=left] +[duration=0] # presentation starts here --- [font=Sans 100px] [text-align=center] ReST -REpresentational State Transfer +Representational State Transfer --- -⬩ Criado por Roy Fielding em 2000. -⬩ Fielding trabalhou na definição do HTTP e no início do projeto Apache. +• 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? +O que é ReST? --- [../_images/l-What-is-this-sorcery.jpg] @@ -43,41 +44,46 @@ Nodejs: Express --- [font=Sans 90px] [../_images/20090504102402_dsc_2864 (1).jpg] -ReST e HTTP +ReST e HTTP --- [../_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". +• Métodos HTTP = operação de banco de dados (CRUD). +• Status das operações são status HTTP. +• Meta-informações podem ser enviadas nos headers. + • Autenticação é feita por HTTP Basic Auth (preferencialmente). +• Sem transações/sessões -- todas as operações são atômicas. --- [../_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. +• POST requisita informações, com conteúdo. +• GET requisita informações, sem conteúdo. + +(Ainda: PUT, DELETE, HEAD, TRACE, PATCH.) --- [../_images/20090504102402_dsc_2864 (1).jpg] -Em REST, métodos HTTP viram CRUD: +Em ReST, métodos HTTP viram CRUD: -⬩ Create = POST -⬩ Retrieve = GET -⬩ Update = PUT -⬩ Delete = DELETE +• Create = POST +• Retrieve = GET +• Update = PUT +• Delete = DELETE --- [font=Sans 90px] [../_images/jellybeans.jpg] -Recursos +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. +• Em ReST, "tabelas" chamadas são "recursos". + • (Até porque o "R" de "URL" é "resource") +• Sempre substantivos singulares. +• Existem duas URLs por recurso: + • Uma para o conjunto; + • Uma para elementos específicos. --- [../_images/jellybeans.jpg] @@ -100,46 +106,105 @@ Exemplos: GET /users/ ⇒ Retorna a lista de todos os usuários. POST /users/ ⇒ Cria um novo usuário. -GET /users/julio ⇒ Retorna as informações do usuário "julio". -PUT /users/julio ⇒ Atualiza informações do usuário "julio". +GET /users/1 ⇒ Retorna as informações do com identificador "1". +PUT /users/1 ⇒ Atualiza informações do usuário "1". +DELETE /users/1 ⇒ Remove o usuário "1". + +--- [../_images/jellybeans.jpg] + +Requisições sem recurso são definidas por verbos e GET: + +GET /convert/?source=BRL&value=10&target=AUD --- [font=Sans 90px] [../_images/content-strategy.jpg] -Conteúdo +Conteúdo --- [../_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 JSON -⬩ Pode ser HTML puro +• Pode ser XML +• Pode ser JSON +• Pode ser HTML puro Decisão fica a cargo da equipe. --- [font=Sans 90px] [../_images/RightWrongBlackboard.jpg] -Status +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. +• 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. +--- [../_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 (PUT /group/1001) +• O que retornar se o usuário (dentro do conteúdo) não existir? + --- [font=Sans 90px] [../_images/house-do-want_cut455_22k.jpg] -Por que ReST? +Por que ReST? + +--- [../_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] + +Por que não ReST? + +--- [../_images/Luke-Derp.jpg] [bottom] [font=Sans 20px] + +--- [../_images/Luke-Derp.jpg] [bottom] [font=Sans 20px] + +(Slide intencionalmente deixando em branco.) + +--- [../_images/Luke-Derp.jpg] + +• Segurança depende de terceiros (HTTPS). + • Existem outras opções (OAuth, por exemplo), mas são complexas + e não se parecem com soluções HTTP. +• Não recomedado para dispositivos com processamento e memória + extremamente limitados. +• Necessidade de sessões/transações. +• Requisito não é um serviço. + +--- [../_images/Luke-Derp.jpg] [bottom] [font=Sans 20px] + +(Slide intencionalmente deixando em branco -- de novo.) + +--- [../_images/thats-all-folks.jpg] + +--- [../_images/thats-all-folks.jpg] [bottom] + +Perguntas? ---- [font=Sans 90px] [../_images/1379026756351.jpg] +--- [../_images/thats-all-folks.jpg] [bottom] -Por que não ReST? +Hangout: julio.biason@gmail.com +Twitter: @juliobiason +Email: julioandre@cwi.com.br