API Endpoints
這個(gè)沒有辦法翻譯厘擂,就是route
的意思甲锡,也有很多人(這個(gè)應(yīng)該指老外或者裝逼者),當(dāng)我們在討論APIs很多人指的意思就是the routes you visit as an endpoint
API的版本GROUP
為了避免你的主程序路由到這個(gè)包的時(shí)候采用它自己的路由,我們就必須新建一個(gè)api路由的對象
$api = app('Dingo\Api\Routing\Router');
然后必須定義version group, 這樣我們可以為不同的版本創(chuàng)建相同的路由褪迟,這樣方便版本管理和開發(fā)
提示: 這里的$api->version
可以理解為特殊的$api->group
$api->version('v1', function ($api) {
});
如果需要一個(gè)組可以響應(yīng)多個(gè)版本,這樣寫
$api->version(['v1', 'v2'], function ($api) {
});
這個(gè)group的用法和laravel自帶的標(biāo)準(zhǔn)group用法一樣弦赖,也可以傳遞數(shù)組作為第二個(gè)參數(shù)
$api->version('v1', ['middleware' => 'auth'], function ($api) {
});
我們的路由還可以分的在細(xì)致一點(diǎn),比如version中嵌套group
$api->version('v1', function ($api) {
$api->group(['middleware' => 'foo1'], function ($api) {
})浦辨;
$api->group(['middleware' => 'foo2'], function ($api) {
})蹬竖;
});
關(guān)于中間件這個(gè)東西,個(gè)人還是喜歡放在每個(gè)controller中,這樣感覺會(huì)更清楚點(diǎn)币厕,是不是 ???
創(chuàng)建路由
有了上面的版本號(hào)組列另,現(xiàn)在就可以創(chuàng)建endpoints了,通過帶有參數(shù)為$api的閉包函數(shù)旦装,如下:
$api->version('v1', function ($api) {
$api->get('users/{id}', 'App\Api\Controllers\UserController@show');
});
上面這樣寫好麻煩页衙,能不能像laravel一樣,在某個(gè)地方把App\Api\Controllers
放在一個(gè)命名空間下阴绢,這樣寫的時(shí)候店乐,就不用寫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
這個(gè)命令怎么搞眨八??
因?yàn)镋ndpoint以版本號(hào)進(jìn)行分組左电,所以你可以使用同樣的URI為同一Endpoint創(chuàng)建不同的響應(yīng):
$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']);
我們要生成路由的時(shí)候就可以用這個(gè)別名:
app('Dingo\Api\Routing\UrlGenerator')->version('v1')->route('users.index');
// 必須提供一個(gè)版本號(hào)以便URL可以基于該版本號(hào)生成券腔,同時(shí)伏穆,你可以在不同版本號(hào)中使用同一個(gè)命名路由。
//其實(shí)感覺也沒有什么卵用纷纫,直接xx->version('v1')->route('users/{id}'); 不行嗎?陪腌?
控制臺(tái)查看api 路由的命令
$ php artisan api:routes