Executando verificação de segurança...
1

Cara, usa Laravel. Você pode criar agrupar as rotas com prefix e name e só criar diretórios diferentes para cada versão, e manter os mesmo nomes das classes, só que em namespaces diferentes, não tem complicação nenhuma.

// Dentro do arquivo routes/api.php

// importação da rota v1
use App\Http\Controllers\Api\V1\ProdutoController;
use App\Http\Controllers\Api\V2\ProdutoController as ProdutoControllerV2; // alias por ter o mesmo nome da classe acima

// versão 1
Route::prefix('v1')->name('v1.')->group(function(){
 // exemplo de rota de produtos
 Route::apiResource('produtos', ProductController::class); // (dominio.com.br/api/v1/produtos) - rota interna (api.v1.produtos)
});


// versão 2
Route::prefix('v2')->name('v2.')->group(function(){
 // exemplo de rota de produtos
 Route::apiResource('produtos', ProductController::class); // (dominio.com.br/api/v2/produtos) - rota interna (api.v2.produtos)
});

Se quiser deixar mais organizado ainda, você pode separa os arquivos de rotas por versão e daí nem precisa fazer o alias. Dentro do seu diretório ficaria assim:

  • /routes/api.php
  • /routes/api/v1.php
  • /routes/api/v2.php

Aí no arquivo/routes/api.php

    // versão 1
    require __DIR__ . '/api/v1.php';
    // versão 2
    require __DIR__ . '/api/v2.php';

Dentro da v1, por exemplo:

// importação da rota v1
use App\Http\Controllers\Api\V1\ProdutoController;

// versão 1
Route::prefix('v1')->name('v1.')->group(function(){
 // exemplo de rota de produtos
 Route::apiResource('produtos', ProductController::class); // (dominio.com.br/api/v1/produtos) - rota interna (api.v1.produtos)
});

Dentro da v2, por exemplo:

// importação da rota v2
use App\Http\Controllers\Api\V2\ProdutoController;

// versão 2
Route::prefix('v2')->name('v2.')->group(function(){
 // exemplo de rota de produtos
 Route::apiResource('produtos', ProductController::class); // (dominio.com.br/api/v2/produtos) - rota interna (api.v2.produtos)
});
Carregando publicação patrocinada...
1

Eu já uso uma lib de Router da coffeecode, que tem groups, middlewares e afins, mas pretendo trocar pra um Router mais robusto (não necessariamente um framework inteiro). Pretendo construir projetos com uma arquitetura própria, usando algumas libs no máximo, mesmo que dê um trabalhão rsrs.