Laravel 5 api route

Коротко:

На самом деле, я немного запутался при использовании файла маршрута Laravel api.

Вопрос:

Если мне нужно получить доступ к данным моего веб-сайта на другой платформе (как приложение для Android), который сделан с помощью laravel, то я должен создать другой маршрут в api.php файл?

Если да, то я буду объявлять два маршрута и контроллеры для каждого запроса, сначала в web.php и второй в api.php, Это правильно?

В основном, я хочу спросить, как я могу сделать API, чтобы я мог получить доступ к данным на веб-сайте, а также на других платформах?

Я искал хороший учебник для этого, но у меня не было хорошего.

2

Решение

В идеале маршруты 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

Я надеюсь, что это помогло …

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
}
1

для 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

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector