Slim 3 Framework - 我应该为我的 API 使用路由组吗?

Slim 3 Framework - Should I be using Route Groups for my API?

我应该使用这个结构吗...

require 'vendor/autoload.php';
$app = new \Slim\App;

$app->get('/books', 'getBooks');
$app->get('/books/{id}', 'getBook');

$app->run();

function getBooks() {
    // Return list of books
}

function getBook($id) {
    // Return a single book
}

还是这个"Route Groups"一个?

require 'vendor/autoload.php';
$app = new \Slim\App;

$app->group('/books', function () use ($app) {
    $app->get('', function ($req, $res) {
        // Return list of books
    });

    $app->get('/{id:\d+}', function ($req, $res, $args) {
        // Return a single book
    });
});

$app->run();

更好的方法是什么?前者看起来更干净。本人比较新,不知道优劣。

通常,您使用路由组来组织相似的资源或内容,这样您就可以在代码中清楚地看到它们之间的关系。如果您需要将任何特殊条件(例如中间件)放在特定组上,路由组也很有用。例如,您的网站上可能有一个管理员部分,您希望在访问控制器之前确保用户确实是管理员。

$app->get('panel/admin', 'Admin/DashboardController:index')->add($adminAuth);
$app->get('panel/admin/users', 'Admin/UserController:index')->add($adminAuth);
$app->post('panel/admin/users', 'Admin/UserController:create')->add($adminAuth);

显然,将这​​些路线归为一组更有意义,因为它们具有相似的特征。如果您将来需要更改这些特征的任何内容(例如中间件的类型),您只需要做一次。

$app->group('/panel', function() use ($app) {
    $app->group('/admin', function() use ($app) {
        $app->get('', 'Admin/DashboardController:index');
        $app->get('/users', 'Admin/UserController:index');
        $app->post('/users', 'Admin/UserController:create');

    })->add($adminAuth);
})->add($userAuth);

如果您想扩展该特定 URI 的用例,这也很有帮助,所以假设您想在面板中推出普通用户可以使用的新功能。

$app->group('/panel', function() use ($app) {

    $app->group('/admin', function() use ($app) {

        $app->get('', 'Admin/DashboardController:index');
        $app->get('/users', 'Admin/UserController:index');
        $app->post('/users', 'Admin/UserController:create');

    })->add($adminAuth);


    $app->get('', 'DashboardController:index');

})->add($userAuth);

虽然这不是很重要,但尽可能有条理地布局所有代码是一种很好的做法,路由组允许您这样做。