創建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
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容