1
resposta

[Dúvida] Uso de POST ao invés de GET no exercício 2

Olá.

Minha dúvida é a mesma do colega Matheus Ricardo Uihara Zingarelli que também postou sobre essa questão aqui no fórum. Infelizmente não consegui encontrar uma forma de "responder" no mesmo fio criado por ele, então tive que abrir um novo tópico. Mas vou citar a dúvida do colega e a resposta que ele recebeu para elaborar:

O colega perguntou o seguinte:

"Olá.

No exercício proposto, o request enviado a pedidos é o seguinte:

POST /pedidos HTTP/1.1
Authorization: Yes (login)COPIAR CÓDIGO

O recurso "pedidos" retorna os pedidos de um usuário. O correto então não seria utilizar o método GET? Se sim, a alternativa B também deveria ser considerada como correta, mas é marcada como incorreta.

Fiz um teste no Postman e, quando envio uma requisição POST para "pedidos", ele adicionou meus dados de login na base de dados de pedido."

Em resposta, o colega Renan Lima disse o seguinte:

O método GET é utilizado para recuperar informações de um recurso, enquanto o método POST é utilizado para enviar informações para um recurso. No caso do exercício, o objetivo é enviar informações do usuário para o recurso "pedidos", portanto o método POST está correto.

Conquanto o colega Renan possa estar correto em sua afirmação, a dúvida para mim permaneceu.

Isto porque na vídeo aula o professor utilizou o método GET e não o POST, como no exercício proposto.

Eu só posso supor que a diferença está no programa utilizado: no caso da aula, foi o POSTMAN e no caso do exercício o TELNET. Parece-me que ao permitir que o usuário manipulasse o HEADER e inserisse lá a KEY "authorization" e o VALUE com a chave de acesso gerada o método somente de leitura GET foi o suficiente para acessar o recurso de pedidos. Contudo, quando utilizando o TELNET, é preciso a um só tempo requisitar a leitura do recurso de pedidos e informar a chave, portanto, um método somente de leitura não lograria êxito e o uso do POST se fez necessário.

Se não isso, o que justifica a utilização de dois métodos diferentes?

O que me causa espécie é o comportamento do POST no caso relatado pelo Matheus (gravando os dados de login dele na base de dados de pedido). Isso me leva a crer que se tem que cuidar com os métodos conforme se utilize o POSTMAN ou o TELNET.

Por favor, me corrijam, pois estou tendo contato com a matéria pela primeira vez agora. :)

Obrigado.

1 resposta

Olá, Mario!

Entendo sua dúvida em relação ao uso do método POST ao invés do GET no exercício 2 do curso "HTTP: entendendo a web por baixo dos panos". Vamos analisar a situação para esclarecer essa questão.

No exercício proposto, o objetivo é enviar informações do usuário para o recurso "pedidos". Nesse caso, o método POST é utilizado para enviar informações para um recurso, enquanto o método GET é utilizado para recuperar informações de um recurso.

Na aula, o professor utilizou o método GET para acessar o recurso de pedidos, provavelmente para fins didáticos e simplificação do exemplo. Porém, no exercício, é necessário enviar informações do usuário para o recurso, o que justifica o uso do método POST.

Se você reparar o foco da atividade é sobre a autenticação e a importância de utilizar o token, no próprio enunciado da questão, já está sendo utilizado o método POST, veja:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Quando aprendemos sobre os métodos do HTTP aprendemos que conseguimos fazer muita coisa só com o método GET porém a boa prática é utilizar cada um de acordo com o seu propósito, GET leitura de dados e POST para enviar dados, etc.

Quanto ao comportamento relatado pelo Matheus, em que os dados de login foram gravados na base de dados de pedido ao enviar uma requisição POST para "pedidos", é importante destacar que o cabeçalho Authorization deve ser preenchido corretamente com o token de autorização. Caso contrário, o servidor pode retornar uma resposta indicando que o request não foi autorizado, como no exemplo fornecido.

Portanto, a alternativa correta que justifica o porquê de não ter dado certo é a seguinte: o valor do cabeçalho Authorization está incorreto, pois deveria usar o token de autorização.

Espero ter ajudado e bons estudos!