Avendo costruito un'API RESTful (usando Laravel) per un progetto al lavoro, ho seguito quello che sembrava (da molte letture) essere la maggioranza in termini del mio approccio alle risorse annidate - definendole nel percorso:
https://myapi.com/clients/{clientId}/tasks
anziché:
https://myapi.com/tasks?client={clientId}
Il filtraggio dei risultati oltre questo, oltre all'ordinazione, è stato fatto usando i parametri di query:
https://myapi.com/clients/{clientId}/tasks?orderby=title
Sebbene all'inizio questo sembrasse un buon approccio, diventava più difficile da mantenere in termini di controllori e percorsi. Ad esempio, per quanto sopra, ho creato un ClientsController, un TasksController AND un ClientsTasksController.
TasksController
public function store() {}
public function updated() {}
public function destroy() {}
TasksClientsController
public function index($client_id) {}
E i percorsi :
Route::resource('tasks', 'TasksController', ['except' => [
'edit', 'index'
]]);
Route::resource('clients.tasks', 'ClientsTasksController', ['only' => [
'index'
]]);
Questa applicazione non aveva bisogno di molte altre risorse annidate come questa, era relativamente semplice. Tuttavia, ora sto cercando di creare un'API per l'applicazione esistente che ha molte relazioni più complesse. È un'app per la gestione del campionato, schema EER di seguito:
Perquantomiriguarda,hobisognodiinterrogarelerisorseconmoltidatidiversi,adesempio:
- teamperdivisione,stagioneeroundspecifici
- statistichesiaperIDdellasquadracheperIDdellastagioneepossibilmenteperarrotondareanche
- partiteperstagione,roundedivisione
ecombinazionidiquantosopra.
Quindimisembrapiùsensatoavereuncontrollereuninstradamentoperognirisorsafinale,mausareiparametridiquerypiuttostochelevariabilidipercorso.
Adesempio:
https://myapi.com/matches?team_id={teamId}&season_id={seasonId}&roundId={roundId}
anziché:
https://myapi.com/seasons/{seasonId}/teams/{teamId}/matches
eivaricontrolleraggiuntivichequestocreerebbe.
Tuttavia,ritengochequestopotrebbeandareincontrotendenzainterminidiciòchelamaggiorpartedellepersonesembrasuggerire:vedi
Qualsiasi aiuto / raccomandazione sarebbe molto apprezzato.