ReST

Restructured State Transfer

  • Criado por Roy Fielding em 2000.
  • Fielding trabalhou na definição do HTTP e no início do projeto Apache.

O que é ReST?

É uma "arquitetura de transmissão de dados sobre HTTP.

("Conjunto de idéias para utilizar HTTP para geração de APIs.")

Linguagem? Qualquer!

  • Python: Flask, Django, Flask-Restless, Django Rest Framework
  • Ruby: Ruby on Rails, Sinatra
  • Java: Spring, Restlet, Jersey
  • C#: Ramone
  • Nodejs: Express
  • Rust: Rustful

ReST e HTTP

  • 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.
    • Atenticação é feita por HTTP auth.
  • Sem transações/sessões -- todas as operações são atômicas.
Em HTTP, usam-se métodos para descrever o que quer ser feito:
  • POST requisita informações, com conteúdo.
  • GET requisita informações, sem conteúdo.

(Ainda: PUT, DELETE, HEAD, TRACE, PATCH, OPTIONS)

Em ReST, métodos HTTP viram CRUD:

  • Create ⇒ POST
  • Retrieve ⇒ GET
  • Update ⇒ PUT
  • Delete ⇒ DELETE
  • Update ⇒ PATCH

Recursos

  • Em ReST, as "tabelas" são chamadas "recursos".
  • Sempre substantivos no plural.
  • Duas URLs por recurso
    • Uma para o conjunto;
    • Uma para elementos específicos.