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

RESTfull o mito!

RESTfull o mito!

Desmistificando RESTfull

Transcript

  1. RESTful o mito! E toda a sua “Transferência de Estado

    Representacional”
  2. Rafael Henrique da Silva Correia @rafaelhenrique http://blog.abraseucodigo.com.br - Desenvolvedor Python

    na CargoBR - “Coordenador/instrutor” do Grupo de Estudos Python Sorocaba - Membro do GruPy-SP - Aspirante a Mestre em Ciências da Computação - Viciado em World of Warcraft (for the horde!) - Palestrante nas horas que sobram Eu
  3. O que é REST? • REST é um padrão de

    arquitetura de aplicações Web que visa a comunicação entre aplicações • Aplicações não são pessoas! HTML não serve para REST! • Dados transferidos em formato JSON (geralmente) • Códigos de status/retorno comuns do protocolo HTTP • Abstrai linguagem de programação
  4. O que é JSON?

  5. O que é JSON? (um parente muito próximo do dict

    Python) • Uma “formatação de texto estruturado” • Dados de um livro estruturado em JSON: { "title": "Fluent Python", "tags": ["book", "python", "ramalho"], "authors": ["Luciano Ramalho"], "publishing": "O’reilly" }
  6. E que raios é RESTful? RESTful é apenas a capacidade

    de fazer REST E o RESTo é o RESTo ... (risos) Fonte: http://pt.stackoverflow.com/questions/45783/o-que-%C3%A9-rest-e-restful
  7. O que é API? • Um sistema criado para troca

    de dados entre sistemas que pode usar REST ou não (visto que ainda INFELIZMENTE é possível usar SOAP hoje em dia ou outros bichos piores) Fonte: Eu mesmo, passível de erros por formalidade!
  8. O mito, definição... Fonte: https://www.priberam.pt/dlpo/mito

  9. É possível aprender REST? Só é possível por hipótese ou

    é possível mesmo? Sim é possível mesmo! DICA: Se você conhecer um pouco de HTTP é mais fácil ainda
  10. • GET - Pegar/pesquisar coisas • POST - Criar coisas

    • PUT - Atualizar coisas • DELETE - Desabilitar/remover coisas • PATCH (extra) - Atualizações parciais • OPTIONS (extra) - Listar métodos/verbos suportados Os verbos/métodos HTTP (AÇÕES) O que eu consigo mandar uma aplicação fazer pra mim? http://www.restapitutorial.com/lessons/httpmethods.html
  11. Códigos de retorno HTTP O server troca idéia com você!

    • 2XX ◦ 200 OK ◦ 201 Created ◦ 202 Accepted ◦ 204 No Content • 4XX ◦ 400 Bad Request ◦ 401 Unauthorized ◦ 403 Forbidden ◦ 405 Method Not Allowed • 5XX ◦ 500 Internal Server Error ◦ 502 Bad Gateway ◦ 503 Service Unavailable
  12. • 2XX ◦ 200 OK ◦ 201 Created ◦ 202

    Accepted ◦ 204 No Content • 4XX ◦ 400 Bad Request ◦ 401 Unauthorized ◦ 403 Forbidden ◦ 405 Method Not Allowed • 5XX ◦ 500 Internal Server Error ◦ 502 Bad Gateway ◦ 503 Service Unavailable Galerinha do “deu bom” Galerinha do “fica ligado!” Galerinha do “deu ruim” Códigos de retorno HTTP O server troca idéia com você!
  13. • /v1/books • /v1/books/ID-SECRETO-1 • /v1/books/ID-SECRETO-1/author • /v1/books/ID-SECRETO-1/author/ID-SECRETO-2 Os recursos/url

    (A COISA EM SI) Quais as coisas que eu tenho na aplicação? No lugar de ID-SECRETO-1 e ID-SECRETO-2 prefira usar UUID, mas nunca use sequências numéricas!
  14. • /v1/books • /v1/books/ID-SECRETO-1 • /v1/books/ID-SECRETO-1/author • /v1/books/ID-SECRETO-1/author/ID-SECRETO-2 Os recursos/url

    (A COISA EM SI) Quais as coisas que eu tenho na aplicação? No lugar de ID-SECRETO-1 e ID-SECRETO-2 prefira usar UUID, mas nunca use sequências numéricas! UUID é um código mais ou menos assim: ada36620-9aaa-4e9c-a73d-62bf23cf750e 32 dígitos hexadecimais em caixa baixa
  15. Juntando a coisa com a ação! Unindo os pauzinhos •

    POST /v1/books • GET /v1/books/ID-SECRETO-1 • PUT /v1/books/ID-SECRETO-1/author • DELETE /v1/books/ID-SECRETO-1/author/ID-SECRETO-2 Exercício de entendimento: Olhando ai, o que faz cada um desses caras dentro da nossa API? Necessário o envio de dados
  16. Juntando a coisa com a ação! Unindo os pauzinhos •

    POST /v1/books • GET /v1/books/ID-SECRETO-1 • PUT /v1/books/ID-SECRETO-1/author • DELETE /v1/books/ID-SECRETO-1/author/ID-SECRETO-2 o primeiro cria um livro! o segundo busca um livro! o terceiro atualiza um autor de um livro com ID-SECRETO-1! o quarto apaga o autor ID-SECRETO-2 do livro ID-SECRETO-1! Necessário o envio de dados
  17. Juntando a coisa com a ação! Unindo os pauzinhos •

    Levando em conta a criação de um livro via POST o “payload” JSON é similar ao abaixo: { "title": "Fluent Python", "tags": ["book", "python", "ramalho"], "authors": ["Luciano Ramalho"], "publishing": "O’reilly" }
  18. Show me the code! And shut up! API simples de

    livraria em Flask: https://github.com/rafaelhenrique/library_api Baseado em: https://blog.miguelgrinberg.com/post/designing-a-restful-api-with-python-and-flask
  19. O que preciso estudar para aprender mais? • HTTP ◦

    Status codes (códigos de retorno) ◦ HTTP Messages/HTTP Verbs (GET, POST, PUT, DELETE… etc) ◦ Headers ◦ Mimetypes • REST ◦ Resources, Verbs, Querystring... • Flask - framework Python • curl - para fazer suas requisições “manuais”
  20. Links Python Sorocaba * Confira também o nosso canal no

    youtube http://bit.ly/youtube-python-sorocaba * Quer bater um papo "real-time" entre no nosso slack https://grupopythonsorocaba.herokuapp.com/ * Confira próximos eventos presenciais https://www.meetup.com/pt-BR/Grupy-SP/ * Nosso github https://github.com/python-sorocaba
  21. OBRIGADO!!! Perguntas?? Contato: http://blog.abraseucodigo.com.br rafael@abraseucodigo.com.br Google Groups: python-sorocaba