Upgrade to Pro — share decks privately, control downloads, hide ads and more …

REST in peace

REST in peace

O que é RESTful, o que não é?
https://photos.app.goo.gl/8zfqg3CaWDsm2uYS2

Gabriel Marcondes

April 30, 2016
Tweet

More Decks by Gabriel Marcondes

Other Decks in Technology

Transcript

  1. O que é REST? O que é quase REST? Inspirado

    em "SOAP Opera", do Hacktoon (o XKCD brasileiro!) e em acontecimentos do dia-a-dia. REST é um estilo de arquitetura de APIs, não um padrão. Proposto por em 2000 por Roy Fielding em sua tese de doutorado. Mas não vamos ser formais!
  2. REST em nossas palavras  Representação de estados dos recursos

     Isolamento de implementação  Um monte de buzzword que a gente adora (escalabilidade, simplicidade, portabilidade, bla bla bla)  Uma resposta em json, xml ou algum outro formato estruturado  E o que às vezes é deixado de lado:  URLs padronizadas  Uso dos verbos do HTTP nas requisições  Uso dos códigos do HTTP nas respostas
  3. O bom e velho HTTP e seus verbos  Requisições

    HTTP tem "verbos" ou "métodos":  GET  POST  PUT  PATCH  DELETE  ...  Intenção é que os verbos indiquem as ações desejadas nos recursos
  4. O bom e velho HTTP e seus códigos  Códigos

    que vão nas respostas:  1XX: informacionais  2XX: sucesso  200 OK, 201 created, 202 accepted, 204 no content...  3XX: redirecionamento  4XX: erro do cliente  400 bad request, 401 unauthorized, 403 forbidden, 404 not found...  5XX: erro no servidor  500 server error, 503 unavailable, 504 timeout...  Objetivo é informar o resultado do que foi pedido
  5. Por que esse cara tá falando e mostrou aquele quadrinho

    {"error": "not found"}, status=200  Muitas APIs não utilizam corretamente o status  Muitas APIs não tratam corretamente o método Exemplo do terror:  Cliente faz requisição GET para /api/v1/books/create/  Servidor responde {"status": "ok"} status=200
  6. Tá cara me diz como deveria ter sido  Cliente

    faz requisição POST em /api/v1/books/  Servidor responde {"status": "created"}, status=201  Cliente faz requisição GET em /api/v1/books/  Servidor responde {"books": [<lista de livros>]}, status=200  Em caso de URL não encontrada, o status é o famoso 404  Em caso de processamento assíncrono, podemos usar o status 202 (accepted) Resumindo: usar os verbos e os status para sinalizar intenções e resultados
  7. Algumas das ações padronizadas por URL Método + URL 

    GET /api/v1/books/  POST /api/v1/books/  GET /api/v1/books/1234/  PUT /api/v1/books/1234/  PATCH /api/v1/books/1234/  DELETE /api/v1/books/1234/ Objetivo  Lista os livros  Cria um livro  Exibe um livro  Cria um livro  Edita um livro  Apaga um livro
  8. Então...  Frameworks que facilitam a criação de APIs RESTful

    e garantem a padronização de URLs e status corretos  django-rest-framework  flask-restful?  Sua consciência!