Entendendo os verbos HTTP no Laravel

Verbos HTTP nos proporcionam uma comunicação mais assertiva entre cliente e servidor.

 Escrevendo testes automatizados com PHPUnit

Entender o funcionamento dos verbos HTTP nos possibilita criar aplicações mais robustas e fáceis de entender, já que cada operação em um CRUD, por exemplo, pode se comportar de diferentes formas.

O Laravel como qualquer outro framework e até mesmo as linguagens nativas, possuem suporte ao verbo HTTP. Nós podemos criar nosso próprio verbo e utilizar, mas isso está fora de questão, já que a comunidade adotou alguns padrões e são eles que vamos encontrar no nosso dia a dia.

O intuito aqui não é discorrer sobre API Rest, mas caso você não saiba o que é isso ou até mesmo não tenha familiaridade, recomendo se matricular no curso PHP - Criando e consumindo API RESTful que está disponível gratuitamente. Vamos entender como chamar os verbos e para o que cada um deles servem, simples assim.

No total temos oito métodos de requisições HTTP, mas em alguns softwares, como o Insomnia Rest, por exemplo, a gente só tem disponível seis.

Utilizando os verbos HTTP

No HTML só podemos utilizar dois verbos/métodos nos componentes de formulários, que são o post e o get. Quando utilizamos alguma API como a Fetch, Axios, entre outras, conseguimos passar o tipo de verbo na qual vamos enviar para o servidor.

No geral, utilizamos esses verbos quando estamos desenvolvendo uma aplicação Rest, normalmente o servidor devolve uma resposta com um código HTTP e seu conteúdo no formato Json.

Para definir o tipo de verbo em uma rota, basta especifica-lo após chamar o Route::, conforme mostra o código abaixo.

Route::prefix('verbos')->group(function () {
    Route::get('/', [VerbosController::class, 'get']);
    Route::post('/', [VerbosController::class, 'post']);
    Route::put('/', [VerbosController::class, 'put']);
    Route::delete('/', [VerbosController::class, 'delete']);
});

Perceba que todas as rotas apontam para verbos/, mas cada um utiliza um verbo e método diferente da classe VerbosController.

Seguindo a convenção, cada um dos verbos tem uma responsabilidade, que são elas:

  • Get - obtém uma determinada informação, quando chamado, a aplicação sempre vai buscar e devolver algo;
  • Post - definimos esse verbo quando a nossa intenção é enviar informações para o servidor a título de criar um novo registro;
  • Put - usamos o put quando enviamos todas as informações já existentes para o servidor a título de modifica-la. Em outra palavras, sempre que um update ou edição acontecer, é esse verbo de vamos utilizar.
  • Delete - o nome já deixa subjetivo a sua funcionalidade, mas não custa reforçar. Sempre que uma informação for deletada, é esse verbo que utilizamos;
  • Patch - tem uma funcionalidade muito parecida com o put, que também serve para alterar informações, mas o patch vai enviar apenas os dados que realmente foram modificados. Imagine que temos dois campos em um formulário, como nome e e-mail, porém apenas o nome foi alterado, então, utilizamos o patch enviando apenas o nome.

Abaixo observamos a controladora utilizada para receber as requisições definidas na rota acima.

<?php

namespace App\Http\Controllers;

class VerbosController extends Controller
{
    public function get()
    {
        return response()->json([
            'type' => 'get'
        ]);
    }

    public function post()
    {
        return response()->json([
            'type' => 'post'
        ]);
    }

    public function put()
    {
        return response()->json([
            'type' => 'put'
        ]);
    }

    public function delete()
    {
        return response()->json([
            'type' => 'delete'
        ]);
    }
}

Para executar o teste acima, desativamos o CSRF para as nossas rotas. Caso você também precise desativar, basta inserir o nome da rota no Middleware app\Http\Middleware\VerifyCsrfToken.php.

    protected $except = [
        //
        'verbos/'
    ];

Agora enviando uma requisição do tipo put, temos a seguinte mensagem de resposta.

E assim entendemos o que cada verbo quer dizer e como defini-los no Laravel.