2017-04-23 104 views
3

我有以下行我routes/api.phpLaravel 5.4:阿比路由列表

Route::middleware('api')->get('/posts', function (Request $request) { 
    Route::resource('posts','ApiControllers\PostsApiController'); 
}); 

當我打http://localhost:8000/api/posts它回來空白,但是當我移動上述路線routes/web.php像這樣:

Route::group(['prefix' => 'api/v1'],function(){ 
    Route::resource('posts','ApiControllers\PostsApiController'); 
}); 

它的工作原理。

提醒一下我與php artisan route:clear清除路由緩存文件和我的路由錶帶有php artisan route:list當我routes/web.php是空的,routes/api.php具有上述路線:

+--------+----------+-------------+------+---------+------------+ 
| Domain | Method | URI   | Name | Action | Middleware | 
+--------+----------+-------------+------+---------+------------+ 
|  | GET|HEAD | api/posts |  | Closure | api  | 
+--------+----------+-------------+------+---------+------------+ 

注意,與網絡線路分開列表來確定,工作正常。

我在這裏做錯了什麼?

+0

刪除中間件和嘗試?不要使用API​​中間件 – webDev

+0

但我們不需要一個? – Gammer

+0

是的,讓我在我的答案中解釋 – webDev

回答

6

不使用中間件api,看看以下的路徑,例如對於API的路線

例1(在你的api.php)

Route::get('test',function(){ 
    return response([1,2,3,4],200); 
}); 

訪問這條路線爲

localhost/api/test 

示例2(如果您想要api身份驗證,基於令牌的身份驗證usi NG laravel護照)

Route::get('user', function (Request $request) { 
    ///// controller 
})->middleware('auth:api'); 

您可以爲這條路線GET請求,但你需要通過訪問令牌,因爲auth:api中間件已被使用。

注:看到/app/http/kernel.php ,你可以找到

protected $routeMiddleware = [ 
//available route middlewares 
] 

不能有這樣的(API)一種中間件在這個文件(kernel.php)的路線,除非你創建一個,那爲什麼你不能使用中間件作爲api

在這裏,我是怎麼創造的REST API(api.php)

//All routes goes outside of this route group which does not require authentication 
Route::get('test',function(){ 
    return response([1,2,3,4],200); 

}); 
//following Which require authentication ................ 
Route::group(['prefix' => 'v1', 'middleware' => 'auth:api'], function(){ 
    Route::get('user-list',"Api\[email protected]"); 
    Route::post('send-fax', [ 
     'uses'=>'api\[email protected]', 
     'as'=>'send-fax' 
    ]); 
    Route::post('user/change-password', [ 
     'uses'=>'api\[email protected]', 
     'as'=>'user/change-password' 
    ]); 

}); 
+0

好吧,好的,如果我不想使用護照,那麼哪一個更好,JWT或Oauth2? – Gammer

+0

我沒有使用智威湯遜,護照最終是基於oauth,護照只是laravel創建oauth服務器的最簡單方法。 oauth是規範............瞭解oauth服務器的工作原理以及護照的全部內容。 – webDev

+0

一個愚蠢的問題,護照是免費的嗎? – Gammer