Versionamento de API RESTful em PHP 8.2 — (Sim, vc não leu errado, PHP kkj)
Vou ser simples e direto. Estou desenvolvendo uma API RESTful usando PHP 8.2, aplicando alguns design patterns, incluindo MVC (estou considerando as responses JSON como view, kkkj) e estruturando tudo com POO.
Durante esse processo, surgiu uma dúvida importante: como garantir que, ao alterar um recurso da API, os sistemas consumidores não quebrem sem qualquer feedback?
Bom... a resposta eu já imaginava qual seria, mas isso me trouxe ainda mais perguntas.
Como muitos já devem saber, existe uma convenção sobre versionamento de APIs REST, os famosos v1, v2, v3... (você pode versionar até onde der, kkk). Até aí, tudo certo. Mas a grande questão que surgiu foi: como estruturar meu projeto de forma que seja fácil de manter?
Por exemplo, simplesmente configurar o Router para suportar v1, v2, etc. não resolve o problema por completo, pois ainda seria necessário versionar todo o CRUD (sim, meu CRUD kkkj).
Vi um vídeo onde o autor versionava os métodos das entidades, acrescentando "V1" ao final dos nomes. A ideia pareceu interessante à primeira vista, mas me fez questionar se essa era realmente a abordagem ideal.
Uma alternativa que considerei foi criar uma pasta "v1", onde os Routers iriam apontar. Em seguida, eu faria uma cópia exata da v1, nomearia como "v2", e então realizaria todas as modificações necessárias nela. Depois, apontaria novos endpoints v2. Dessa forma, daria tempo suficiente para o client-side migrar para a nova versão sem problemas, e eu evitaria transformar o código em uma zona (na minha cabeça, pelo menos, kkkj).
Porém, ainda acho que pode existir uma abordagem mais eficaz. E quando digo eficaz, não me refiro a uma maneira "certa" ou "errada" de fazer, mas sim a um método que proporcione:
✅ Melhor legibilidade do código
✅ Facilidade na manutenção
✅ Uma documentação clara (preciso documentar para o client, né? kkkj)
E aí, qual abordagem você acha mais interessante? 🤔