2012-10-06 16 views
6

Sto provando a creare un servizio web RESTful che dovrebbe alimentare l'interfaccia utente. Se seguo principi puramente HATEOAS, dovrei solo esporre gli URI delle singole risorse nelle raccolte. Ora, diciamo che ho una relazione genitore-figlio e che ogni genitore può avere come 50 bambini e che l'interfaccia utente richiede che vengano visualizzati anche dati parziali per tutti i figli quando si fa clic sul genitore.Pure HATEOAS vs troppe chiamate di servizio

Se esco solo URI figlio con il genitore, allora l'interfaccia utente dovrà effettuare 50 chiamate di servizio Web per ottenere questo risultato. L'altro approccio consiste nell'avere un'API separata che distribuirà il genitore oltre a informazioni parziali sui bambini anziché solo sugli URI. Sono sicuro che questo è un problema abbastanza comune. Qual è il giusto equilibrio qui? Quali sono alcuni dei trucchi? L'approccio "solo URI" è più pulito dal punto di vista del design, ma potrebbe rendere l'interfaccia utente molto lenta e sovraccaricare il server a causa di tutte queste chiamate di servizio. Quindi, l'altro approccio potrebbe essere più pratico. Nella tua esperienza, che è meglio?

risposta

5

Si viene indotti in errore su ciò che richiede il vincolo ipermediale. Non c'è nulla che dice che non è possibile includere informazioni da oggetti figlio in una rappresentazione dell'oggetto padre. In effetti questo è esattamente ciò che è stato progettato per abilitare Hal (un tipo di ipermedia).

+0

k .. grazie! Ma in pratica, è davvero un dolore se devi fare troppe chiamate? –

+1

@ Raze2dust Troverete che la maggior parte dei collegamenti che dovete seguire in modo ridondante possono essere tranquillamente archiviati in privato. Quindi, anche se sembra che ci siano molte chiamate HTTP, la maggior parte dei round trip della rete può essere ottimizzata. Insieme all'inserimento di parti di risorse secondarie nella rappresentazione padre, puoi creare un'API molto efficiente in rete. –

+0

Anche se ci sono impatti sulla capacità di cachabilità di voi, usate l'embargo di HAL come non essere in grado di utilizzare una cache http vanilla. O se puoi (ignora l'embed), allora non stai utilizzando la cache in modo efficace. – dietbuddha

Problemi correlati