Ответ 1
Вам следует разработать простой API для доступа к вашим данным APP от клиента android:
Маршруты
Прежде всего вам нужно создать определенные маршруты для API, через которые вы будете обслуживать свои данные в формате JSON
Аутентификация
Маршруты API должны обрабатывать аутентификацию по-другому в отношении того, что вы сейчас делаете: вы не можете использовать классический подход, основанный на сеансах. Вместо этого вы должны использовать базовый или символический подход. У вас разные альтернативы, это одни из самых используемых (от самых простых до самых сложных)
Базовая аутентификация HTTP Laravel
Аутентификация веб-маркера Laravel Json
Data Acess
После того, как вы настроите маршруты и аутентификацию, вы должны обслуживать свои данные через маршруты API. Поскольку вы используете одни и те же данные в маршрутах APP и маршрутах API, вы можете обернуть логику построения и получения данных в службах и использовать службы для получения данных как на маршрутах APP, так и на маршрутах API.
Используя разные контроллеры для маршрутов API и APP, вы:
//APP Controller method for route: www.app.com/app-route/users
public function getUsers()
{
//wrap the logic to build the data inside the service
$service = App::make('your_service');
//once is ready, get the built data from the service
$data = $service->getData();
return View("View-Path", array("Data" => $data));
}
//API Controller method for route: www.app.com/api/users
public function getUsers()
{
//use the same service to build and get the data you need
$service = App::make('your_service');
$data = $service->getData();
return response()->json( $data );
}
Таким образом вы можете:
-
Инкапсулировать сбор данных и их поиск в службах, чтобы у вас не было необходимости дублировать код для извлечения данных между маршрутами APP и API.
-
Имейте разные контроллеры для доступа к маршрутам APP или API; поэтому вы можете получать данные, преобразовывать их по мере необходимости и обслуживать их как в виде, так и в клиентах api.
О классе службы
Что касается класса обслуживания, о котором я упоминал, это может быть просто один или несколько классов-оболочек, которые вы используете как в API, так и в контроллерах APP для создания и получения данных без повторного кода. Структура таких классов зависит от того, как работает ваше приложение.
Например, предположим, что вам нужно вычислить некоторые данные для каждого пользовательского проекта, сохранить его в переменной и затем отправить в viev:
public function getUsers($request)
{
$user = Users::with('projects')->find( $request->user_id )->get();
$data = [];
foreach ( $user->projects as $p )
{
//compute some data you need and store it in $data;
}
return View("View-Path", array("Data" => $data));
}
Теперь, если вы хотите сделать то же самое в контроллере API, вам нужно будет повторить этот код, чтобы получить проекты и создать данные. Чтобы этого избежать, вы можете "обернуть" доступ к данным в классе обслуживания и использовать один и тот же класс в контроллерах boh:
Класс обслуживания
public class UserDataBuilder
{
protected $user;
public function setUser( Authenticatable $user )
{
$this->user = $user;
}
public function getData()
{
$user = Users::with('projects')->find( $this-user->id )->get();
$data = [];
foreach ( $user->projects as $p )
{
//compute some data you need and store it in $data;
}
return $data;
}
}
и использовать тот же класс как в API, так и в APP-контроллерах:
//APP controller: get the data and pass to the view
public function getUsers($request)
{
$service = App::make( UserDataBuilder::class );
$service->setUser( User::find( $request->user_id )->get() );
return View("View-Path", array("Data" => $service->getData() );
}
//API controller: get the data and convert to JSON
public function getUsers($request)
{
$service = App::make( UserDataBuilder::class );
$service->setUser( User::find(1)->get() );
return response()->json( $data );
}