创建API路由 Creating API Endpoints

API Endpoints 这个没有办法翻译,就是route的意思,也有很多人(这个应该指老外或者装逼者),当我们在讨论APIs很多人指的意思就是the routes you visit as an endpoint

API的版本GROUP

为了避免你的主程序路由到这个包的时候采用它自己的路由,我们就必须新建一个api路由的对象

$api = app('Dingo\Api\Routing\Router');

然后必须定义version group, 这样我们可以为不同的版本创建相同的路由,这样方便版本管理和开发
提示: 这里的$api->version可以理解为特殊的$api->group

$api->version('v1', function ($api) {
  
});

如果需要一个组可以响应多个版本,这样写

$api->version(['v1', 'v2'], function ($api) {
  
});

这个group的用法和laravel自带的标准group用法一样,也可以传递数组作为第二个参数

$api->version('v1', ['middleware' => 'auth'], function ($api) {

});

我们的路由还可以分的在细致一点,比如version中嵌套group

$api->version('v1', function ($api) {
    $api->group(['middleware' => 'foo1'], function ($api) {

    });

    $api->group(['middleware' => 'foo2'], function ($api) {

    });
});

关于中间件这个东西,个人还是喜欢放在每个controller中,这样感觉会更清楚点,是不是 ???

创建路由

有了上面的版本号组,现在就可以创建endpoints了,通过带有参数为$api的闭包函数,如下:

 $api->version('v1', function ($api) {
    $api->get('users/{id}', 'App\Api\Controllers\UserController@show');
});

上面这样写好麻烦,能不能像laravel一样,在某个地方把App\Api\Controllers
放在一个命名空间下,这样写的时候,就不用写App\Api\Controllers了,

上面的问题可以这么解决(还没测试,不知道对不对):

 $api->version('v1', ['namespace' => 'Api\Controllers'], function ($api) {
    $api->get('users/{id}', 'UsersController@show');
});

//在app\api\controllers\UsersController.php中声明命名空间为Api\Controllers;

还有就是php artisan make:controller 这个命令怎么搞??

因为Endpoint以版本号进行分组,所以你可以使用同样的URI为同一Endpoint创建不同的响应:

$api->version('v1', function ($api) {
    $api->get('users/{id}', 'App\Api\V1\Controllers\UserController@show');
});

$api->version('v2', function ($api) {
    $api->get('users/{id}', 'App\Api\V2\Controllers\UserController@show');
});

从这里可以看出,dingo推荐的api的Controller的目录为

app/Api/v1/Controller

//还有
app/Api/v1/Request  (处理middleware)
app/Api/v1/Transfomers

要不要v1目录,感觉太深了???

路由别名

$api->get('users/{id}', ['as' => 'users.index', 'uses' => 'App\Api\V1\UserController@show']);

我们要生成路由的时候就可以用这个别名:

app('Dingo\Api\Routing\UrlGenerator')->version('v1')->route('users.index');

// 必须提供一个版本号以便URL可以基于该版本号生成,同时,你可以在不同版本号中使用同一个命名路由。

//其实感觉也没有什么卵用,直接xx->version('v1')->route('users/{id}');  不行吗??

控制台查看api 路由的命令

$ php artisan api:routes

你可能感兴趣的:(创建API路由 Creating API Endpoints)