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
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
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" }
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!
• 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
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ê!
(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!
(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
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
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
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" }