Olá, Bruno! Tudo bem?
A ideia de criar uma classe DTO (Data Transfer Object) para cada verbo HTTP não é uma regra estrita, mas sim uma prática que pode ser útil em determinados contextos. A razão principal para essa prática é a separação de responsabilidades e a clareza semântica.
Vamos a um exemplo prático. Imagine que temos uma API para gerenciar filmes. Para criar um novo filme, precisamos de várias informações, como título, diretor, ano de lançamento, etc. Então, temos um DTO de criação que contém todos esses campos. Agora, se quisermos atualizar um filme, talvez não precisemos de todas essas informações. Pode ser que só queiramos atualizar o título e o diretor, mas não o ano de lançamento. Nesse caso, poderíamos ter um DTO de atualização que só contém os campos que podem ser atualizados.
Se utilizássemos o mesmo DTO para a criação e a atualização, estaríamos permitindo que o usuário da API atualizasse campos que não deveriam ser atualizados. Além disso, a semântica do código seria menos clara, pois não seria óbvio quais campos são necessários para cada operação.
No entanto, isso não significa que você precisa de um DTO para cada método ou verbo HTTP. Se vários métodos usam os mesmos campos, pode fazer sentido reutilizar o mesmo DTO. O importante é pensar sobre quais campos são necessários para cada operação e estruturar seus DTOs de acordo.
Espero ter ajudado e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.