您应该开发一个简单的 API 来从 android 客户端访问您的 APP 数据:
路线
首先,您需要为 API 创建一些特定路由,通过这些路由以 JSON 格式提供数据
身份验证
API 的路由应该以不同的方式处理身份验证,就您现在正在做的事情而言:您不能使用经典的基于会话的方法。相反,您必须使用基本或基于令牌的方法。你有不同的选择,这些是最常用的(从最简单的到最复杂的)
Laravel HTTP Basic Authentication
Laravel Json Web Token Authentication
Laravel OAUTH2
数据访问
设置路由和身份验证后,您必须通过 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 );
}
这样你可以:
关于服务类
关于我提到的服务类,它可能只是一个或多个包装类,您可以在 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 );
}