REST in peace

REST in peace

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

34932510cde80b35e4ffa0805bddc53b?s=128

Gabriel Marcondes

April 30, 2016
Tweet

Transcript

  1. REST in peace O que é REST, o que quase

    é REST
  2. None
  3. 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!
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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!
  11. Obrigado Gabriel Marcondes gabrielgeraldo @ gmail.com Twitter @ggzes Github /Lasanha,

    /gabrielmarcondes