2
respostas

Critério para enviar via POST ou GET

Gostaria de entender qual critério usar ao definir o método de envio de um formulário. Como exemplo na view formulário.php o id está sendo enviado como recurso da URI (GET) já a descrição está sendo enviado no corpo da requisição (POST).

    <form action="/salvar-curso<?= isset($curso) ? '?id=' . $curso->getId() : ''; ?>" method="post">
        <div class="form-group">
            <label for="descricao">Descrição</label>
            <input type="text"
                   id="descricao"
                   name="descricao"
                   class="form-control"
                   value="<?= isset($curso) ? $curso->getDescricao() : ''; ?>">
        </div>
        <button class="btn btn-primary">Salvar</button>
    </form>

Pelo meu entendimento eu poderia fazer algo do tipo que obteria o mesmo resultado:

    <form action="/salvar-curso" method="post">
        <div class="form-group">
            <label for="descricao">Descrição</label>
            <input type="text"
                   id="descricao"
                   name="descricao"
                   class="form-control"
                   value="<?= isset($curso) ? $curso->getDescricao() : ''; ?>">
            <input type="hidden" 
                   id="id" 
                   name="id" 
                   value="<?= isset($curso) ? $curso->getId() : ''; ?>">
        </div>
        <button class="btn btn-primary">Salvar</button>
    </form>

É apenas uma 'boa prática' enviar id's via get por não serem extensos na URI?

2 respostas

Eai Leonardo, bom vou falar primeiro sobre o GET e o POST.

O GET em português quer dizer obter, receber/pegar, ou seja o verbo GET é utilizado quando queremos recuperar informações, quando queremos receber / pegar algum recurso, no caso do código acima nós queremos acessar o recurso do curso com ID x

isset($curso) ? '?id=' . $curso->getId() : ''

Nesse caso o código acima verifica se você possui um curso, pois caso você possua você estará alterando aquele curso em especifico (aquele recurso em especifico)

O POST em português quer dizer publicar/postar ou seja nós desejamos enviar dados, publicar/postar seja para alguma modificação de qualquer recurso(s) que já existe, tanto quanto para a criação de um novo, no exemplo acima você está ou criando uma novo curso ou editando um curso já existente.

Portanto para concluir utilizamos o GET para recuperar dados para acessar informações como no exemplo acima vc acessa um curso em especifico quando vc passa o Id dele via GET, e o POST para enviar/salvar dados que é a maneira como você envia o seu formulário.

Espero ter ajudado!

Olá Iohan,

Entendo o que você quer dizer porém não foi bem a pergunta. Neste exemplo que publiquei a descrição do curso, conceitualmente, também está sendo resgatada para o valor do input, o que seria a definição de GET, ou seja, também faria certo sentido traze-la como recurso da URL.

Poderia até argumentar que, como o usuário não tem conhecimento dos IDs dos cursos, faria mais sentido, semanticamente falando, trazer a descrição na url e o id via input hidden.

Acredito que no fim seja definido de negócio para negócio, porém queria saber se existe alguma critério estabelecido pela comunidade/mercado...