2017-04-23 103 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