2017-02-17 432 views
1

其實,我有點困惑,同時使用Laravel API路由文件。 我的問題是 -Laravel 5 API路線

如果我需要訪問我的網站在使用laravel製作的其他平臺(如android應用程序)的數據,那麼我應該在api.php文件中創建不同的路線。

如果是,則我將聲明兩個路由和控制器對於每個請求,首先在api.php web.php和第二。這是對的嗎??

基本上,我想問的是我怎麼能做出一個API,這樣我就可以在網站上以及在其他平臺訪問數據?

我正在尋找一個很好的教程,但我沒有得到一個好。

+0

理想情況下,您的API路由將以API的可用格式(如JSON)返回數據。你的網路應該返回實際的網頁。 – Samsquanch

+0

那麼,我應該爲api和網站有不同的路線和控制器嗎? –

+0

的方式有很多人做到這一點,首先寫與API控制器的API,那麼你就寫你的web控制器爲使用來自API的數據。這是假設您的前端將被設置爲使用這些API(通過Vue或其他JS框架)。如果您不打算使用基於API的前端,那麼您將編寫完全獨立於API的Web控制器。 – Samsquanch

回答

1

理想情況下,API路由和Web路由應該完全不同,但如果您希望它是相同的,則不要在不同文件中定義路由,而只需在web.php中添加路由並從客戶端添加特殊參數並在控制器中,如果您獲取參數,然後返回JSON對象或返回視圖。

例如,

web.php

Route::get('getUsers','[email protected]'); 

UserController.php

... 
public function getUsers(Request $request) 
{ 
    ... 

    if ($request->has('api')) { 
     return $users; //API Route (Laravel will by Default return the JSON Response no need to do json_encode) 
    } 

    return view('pages.user_list'); //Normal Routes hence returning View 
} 
... 

要求 正常請求

<Yourdomain>/getUsers 

API請求

<Yourdomain>/getUsers?api=true 

我希望幫助...

+0

那麼如何我會送CSRF令牌API請求的情況下.. –

+0

2選擇1)禁用CSRF驗證這些路由(不推薦),2)可以使一個API,你可以返回CSRF令牌,並在接下來的請求你可以簡單地從你的客戶端傳遞它。和令牌認證,您可以使用JWT驗證https://github.com/tymondesigns/jwt-auth –

1

寫您的API航線api.php和網絡航線web.php

Api路由在路由中始終有名稱api因此您可以區分路由。我在這裏提到,因爲@Akshay Khale提到了查詢參數的示例。

如果你想在API和Web上使用相同的控制器,Api請求總是有標題Content-Type : Json"Accept":"application/json",所以在你的控制器中你可以這樣做,如下所示。

public function getUsers(Request $request) 
{ 
    ... 

    if ($request->wantsJson()) { 
     return response()->json($users, 200); //here why we are extending response object because using json() method you can send the status code with the response. 

    } 

    return view('pages.user_list'); //Normal Routes hence returning View 
}