Коротко:
На самом деле, я немного запутался при использовании файла маршрута Laravel api.
Вопрос:
Если мне нужно получить доступ к данным моего веб-сайта на другой платформе (как приложение для Android), который сделан с помощью laravel, то я должен создать другой маршрут в api.php
файл?
Если да, то я буду объявлять два маршрута и контроллеры для каждого запроса, сначала в web.php
и второй в api.php
, Это правильно?
В основном, я хочу спросить, как я могу сделать API, чтобы я мог получить доступ к данным на веб-сайте, а также на других платформах?
Я искал хороший учебник для этого, но у меня не было хорошего.
В идеале маршруты API и веб-маршруты должны быть совершенно разными, но если вы хотите, чтобы они были одинаковыми, то вместо определения маршрутов в другом файле вы можете добавлять маршруты только в web.php и добавьте специальный параметр из вашего клиента и в контроллер, если вы получаете параметр, затем верните объект JSON или верните представление.
Например.
web.php
Route::get('getUsers','UserController@getUsers');
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
Я надеюсь, что это помогло …
Напишите свои маршруты 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
}
для laravel 5.6 и выше вышеупомянутые ответы не будут работать для меня, так что вот мои 2 цента.
Я положил маршруты в web.php
а также api.php
и нормальных нет никаких фокусов.
public function getUsers(Request $request)
{
....
if( $request->is('api/*')){
...
return response()->json($user_data, 200);
}
...
return view('users', ['users_data'=>$user_data]);
}
Он вернет вывод JSON для
127.0.0.1:8000/api/users
и нормальный вид в HTML для
127.0.0.1:8000/users