DEV Community

loading...
Cover image for Harry Potter: Entendendo os Métodos HTTP

Harry Potter: Entendendo os Métodos HTTP

Guilherme Tadeu
・5 min read

Introdução

Neste artigo iremos ver uma explicação sobre os métodos HTTP mais utilizados como o GET, POST, PUT, PATCH e DELETE fazendo uma analogia com alguns feitiços do universo de Harry Potter.

Conteúdo

  1. Accio
  2. Aguamenti
  3. Vera Verto
  4. Reparo
  5. Reducto
  6. Conclusão

Accio

"O Feitiço Convocatório, conhecido como Accio é usado para chamar itens de longa distância para as mãos do bruxo. Para usá-lo, deve-se apontar a varinha para o objeto e dizer Accio + Nome do objeto escolhido"

Harry usando o feitiço Accio para puxar o controle remoto

No HTTP o Accio é o método GET. Usamos ele para obter a representação de algo. Por exemplo, para obter os dados de determinado livro na biblioteca de Hogwarts podemos fazer a seguinte chamada no sistema:

REQUEST
METHOD: GET
URL: localhost:8080/livros/42

RESPONSE
{
    "id": 42,
    "nome": "Quadribol através dos séculos",
    "autor": "Kennilworthy Whisp"
}
Enter fullscreen mode Exit fullscreen mode

Um poder que temos com o método GET que não temos no Accio é o de puxar mais de um item de uma só vez, como é o caso de usar o GET sem passar o ID do livro. Dessa forma, por convenção, entende-se que queremos trazer todos os livros da biblioteca:

REQUEST
METHOD: GET
URL: localhost:8080/livros

RESPONSE
[
    {
        "id": 42,
        "nome": "Quadribol através dos séculos",
        "autor": "Kennilworthy Whisp"
    },

    {
        "id": 66,
        "nome": "Animais Fantásticos e Onde Habitam",
        "autor": "Newt Scamander"
    },

    ... Mais e mais livros ...
]
Enter fullscreen mode Exit fullscreen mode

Aguamenti

"O feitiço Aguamenti conjura água pura apartir da varinha do bruxo que o pronuncia. Dependendo da concentração e das intenções do lançador, esse feitiço pode ser qualquer coisa, desde um simples jato de água até uma onda"

Harry usando o feitiço Aguamenti para colocar água num recipiente

No HTTP o Aguamenti é equivalente ao método POST que serve para criarmos qualquer coisa. No nosso exemplo temos um endpoint que aponta para o conteúdo de uma jarra que, conforme vemos abaixo, está vazia:

REQUEST
METHOD: GET
URL: localhost:8080/jarras/567/conteudo

RESPONSE
{}
Enter fullscreen mode Exit fullscreen mode

Para colocarmos água dentro dessa jarra precisamos criá-la com seus devidos atributos e fazer um POST para a mesma URL (endpoint):

REQUEST
METHOD: POST 
CONTENT: {"quantidade":"500ml", "tipo":"Água"} 
URL: localhost:8080/jarras/567/conteudo
Enter fullscreen mode Exit fullscreen mode

Ao chamar o GET novamente vemos que o conteúdo da jarra agora foi preenchido:

REQUEST
METHOD: GET 
URL: localhost:8080/jarras/567/conteudo

RESPONSE
{
    "id": 1,
    "quantidade": "500ml",
    "tipo": "Água"
}
Enter fullscreen mode Exit fullscreen mode

Vera Verto

"Frase em latim que pode ser interpretada como 'Eu realmente troco'. É um encantamento que transforma animais em taças de cristal, um tipo de transformação clássico e altamente refinado. Os animais mais usados ​​para esse feitiço são pássaros, gatos e ratos"

Minerva usando o feitiço Vera Verto para transformar uma ave numa taça

No HTTP quando queremos alterar um recurso por completo chamamos o método PUT. Por exemplo, dado um determinado pássaro que tem atributos como "Cor", "Altura", "Peso" e "Superfície" queremos transformá-lo numa taça que possui os mesmos atributos mas com valores totalmente diferentes.

Vamos usar o GET para dar uma olhada nos atributos do passáro:

REQUEST
METHOD: GET
URL: localhost:8080/professores/minerva/materiais/47

RESPONSE
{
    "id": 47,
    "cor": "Preto e Branco",
    "altura": "63cm",
    "peso": "2kg",
    "superficie": "Penas"
}
Enter fullscreen mode Exit fullscreen mode

E usando o PUT fazemos a transformação alterando todos os atributos:

REQUEST
METHOD: PUT
CONTENT: {"cor": "Transparente", "altura": "30cm", 
"peso", "85g", "superficie": "Vidro"}
URL: localhost:8080/professores/minerva/materiais/47
Enter fullscreen mode Exit fullscreen mode

Ao chamar o GET novamente, vemos que o recurso de ID 47 está totalmente diferente:

REQUEST
METHOD: GET
URL: localhost:8080/professores/minerva/materiais/47

RESPONSE
{
    "id": 47,
    "cor": "Transparente",
    "altura": "30cm",
    "peso": "85g",
    "superficie": "Vidro"
}
Enter fullscreen mode Exit fullscreen mode

Nota: O exemplo dado é totalmente viável na prática, mas se tratando de orientação a objetos, se hoje o seu código permite transformar um passáro numa taça muito provavelmente você abstraiu mais que o necessário.

Reparo

"O Feitiço de Reparação reparará objetos quebrados com um movimento da varinha. Acidentes acontecem, então é essencial saber como consertar nossos erros"

Hermione usando o feitiço Oculus Reparo para consertar o óculos de Harry

Diferente do método PUT que atualiza um recurso por completo o PATCH atualiza um recurso parcialmente, ou seja, alterando um ou mais atributos de forma separada.

Dado uma lista de óculos, podemos usar o GET para verificar a situação do óculos do Harry:

REQUEST
METHOD: GET 
URL: localhost:8080/alunos/harry-potter/oculos/123

RESPONSE
{
    "id": 123,
    "dono": "Harry Potter",
    "cor": "Preto",
    "armacao": "Redonda",
    "situacao": "Quebrado"
}
Enter fullscreen mode Exit fullscreen mode

E logo após, o PATCH para executar a reparação:

REQUEST
METHOD: PATCH 
CONTENT: {"situacao":"Consertado"} 
URL: locahost:8080/alunos/harry-potter/oculos/123
Enter fullscreen mode Exit fullscreen mode

E ao chamar o GET novamente, temos que o atributo "situacao" foi alterado de "Quebrado" para "Consertado":

REQUEST
METHOD: GET
URL: localhost:8080/alunos/harry-potter/oculos/123

RESPONSE
{
    "id": 123,
    "dono": "Harry Potter",
    "cor": "Preto",
    "armacao": "Redonda",
    "situacao": "Consertado"
}
Enter fullscreen mode Exit fullscreen mode

Reducto

"Com esta maldição poderosa, bruxos habilidosos podem facilmente reduzir os obstáculos em pedaços. Por razões óbvias, muito cuidado deve ser exercido ao aprender e praticar este feitiço"

Gina usando o feitiço Reducto para destruir um obstáculo

Simples de executar mas exige um cuidado especial. O DELETE do HTTP remove determinado recurso, geralmente através do ID do mesmo. Como exemplo, usaremos o DELETE para destruir uma Horcrux, embora o Reducto não tenha poder suficiente para fazê-lo.

Primeiro, usando o GET vamos atrás da Horcrux:

REQUEST
METHOD: GET
URL: localhost:8080/horcruxes/8

RESPONSE
{
    "id": 8,
    "tipo": "Nokia Tijolão",
    "local": "Osasco"
}
Enter fullscreen mode Exit fullscreen mode

Para destruí-la (deletar), basta chamar a mesma URL passando o método DELETE:

REQUEST
METHOD: DELETE
URL: localhost:8080/horcruxes/8
Enter fullscreen mode Exit fullscreen mode

Se chamarmos o GET novamente, nada será retornado, ou seja, a horcrux foi destruída!

REQUEST
METHOD: GET
URL: localhost:8080/horcruxes/8

RESPONSE
{}
Enter fullscreen mode Exit fullscreen mode

Conclusão

Neste artigo aprendemos como são usados os métodos HTTP. Usamos o GET para buscar um livro na biblioteca de Hogwarts; POST para criar água e encher uma jarra; PUT para transformar um pássaro numa taça; PATCH para consertar o óculos de Harry e o DELETE para destruir uma Horcrux.

Esses métodos são muito importantes e bastante utilizados em aplicações WEB como APIs REST e sistemas de CRUD (Create, Read, Update, Delete). Há ainda outros métodos HTTP como o Head, Connect, Options e Trace que não foram explicados aqui, quem sabe num próximo artigo?

Até a próxima!
Malfeito feito...

Referências

Fandom - https://harrypotter.fandom.com/pt-br/wiki
Alura - https://www.alura.com.br/curso-online-http-fundamentos
Mozilla - https://developer.mozilla.org/pt-BR/docs/Web/HTTP/Methods

Discussion (4)

Collapse
daianerangel profile image
Daiane Rangel

Parabéns pelo artigo! Ficou muito bom! Adorei!

Collapse
guitadeu profile image
Guilherme Tadeu Author

Obrigado Daiane!

Collapse
jduartesn profile image
Jéssica Duarte

Parabéns pelo artigo! Ficou show!

Collapse
guitadeu profile image
Guilherme Tadeu Author

Obrigado Jéssica!