Si dovrebbe sviluppare un API semplice per accedere ai dati di APP da un client Android:
Itinerari
Prima di tutto è necessario creare alcuni percorsi specifici per l'API attraverso la quale servirai i dati in formato JSON
autenticazione
Le rotte dell'API devono gestire l'autenticazione in un modo diverso rispetto a quello che stai facendo ora: non puoi utilizzare il classico approccio basato sulla sessione. Invece devi usare un approccio base o token. Hai diverse alternative, questi sono alcuni dei più utilizzati (dalle più semplici, per il più complicato)
Laravel HTTP Basic Authentication
Laravel Json Web Token Authentication
Laravel OAUTH2
dati Acess
Una volta impostati i percorsi e l'autenticazione, devi servire i tuoi dati tramite le rotte API. Poiché utilizzi gli stessi dati nelle rotte APP e nelle rotte API, puoi racchiudere la logica della creazione e del recupero dei dati nei servizi e utilizzare i servizi per ottenere i dati sia nelle rotte APP che nelle rotte API.
Utilizzando diversi controller per API e App percorsi, si dispone:
//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);
}
In questo modo è possibile:
costruzione dei dati Incapsula e retrieveng nel settore dei servizi, in modo che don' t hanno la necessità di duplicare il codice per il recupero dei dati tra le rotte APP e API
Sono diversi c ontroller per accedere alle rotte APP o API; in modo da poter ottenere i dati, trasformarlo come avete bisogno e servono a entrambi i punti di vista o client API
Informazioni sulla classe di servizio
Per quanto riguarda la classe di servizio ho già detto, potrebbe essere semplicemente una o più classi wrapper che usi sia nei controller API e APP per creare e ottenere i dati senza codice di ripetizione. La struttura di tali classi dipende da come funziona la tua app.
Per esempio supponiamo che devi calcolare alcuni dati per il progetto di ogni utente, conservarlo in una variabile e poi inviarlo al 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));
}
Ora, se vuole fare la stessa cosa nel API controller, è necessario ripetere questo codice per ottenere i progetti e creare i dati. Per evitare questo, si potrebbe 'avvolgere' l'accesso ai dati in una classe di servizio, e utilizzare la stessa classe di regolatori boh:
La classe di servizio
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;
}
}
e utilizzare la stessa classe in entrambe le API Controller 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);
}
Non ho dimestichezza con laravel ma ho creato 2 app per Android che eseguono il seeding con webservice (php). La mia scelta è webservice grazie a 2 app diverse che utilizzano 2 tipi di dati diversi dallo stesso pool di dati. (Mysql per app Web, xml per app Android) – HddnTHA
la tua app è solo online o può funzionare anche offline? –
funzionerà solo online. – Pankaj