Migrazione di un'applicazione ORM a strato singolo su API multistrato

0

Sto cercando di capire qual è il modo migliore per migrare un sito web che funziona in un singolo livello e ottenere tutti i dati tramite un ORM, a uno che utilizza più livelli, utilizzando un backend API per ottenere le informazioni necessarie per mostra una pagina.

Nel progetto a cui sto lavorando, abbiamo un codice come questo, in cui i dati vengono recuperati tramite un ORM di Doctrine:

$accountAddress = $sfUserProfile->getCustomer()->getAccount()->getAddress();

Effettuare una traduzione ingenua di quello per un insieme di chiamate API comporterebbe 4 chiamate api. Anche se potrebbero non essere così lenti individualmente, se avessimo effettuato una chiamata API per ogni accesso DB che attualmente abbiamo sarebbe incredibilmente lento.

Potrebbe essere cambiato in una chiamata molto più specifica come:

$backendAPI->getAddress($sfUserProfile);

che ridurrebbe quelle 4 chiamate API a una singola, il che è meglio. Ma lascia comunque tutte le altre query che dovrebbero essere eseguite affinché quella pagina venga convertita in chiamate API separate. Potrei scrivere una chiamata API che ottiene tutte le informazioni utente necessarie per visualizzare la pagina di informazioni sull'account utente in una volta sola:

$ info = $ backendAPI- > getInfoForAccountPage ($ sfUserProfile); Dove $ info contiene un insieme di entità semplici (non entità ORM) ad es. : $ info = array (    'cliente' = > $ Clienti,    'account' = > $ Conto,    'accountAddress' = > $ accountAddress ); (O probabilmente creerei per ogni pagina una specifica classe 'info' per far rispettare la chiarezza su quali informazioni sono disponibili).

È 'corretto' scrivere chiamate API davvero specifiche? O qual è il metodo preferito per evitare di dover avere troppe chiamate API per visualizzare una pagina?

Il modo specifico di chiamata dell'API sembra ragionevole quando c'è un piccolo insieme di dati noti che devono essere recuperati per visualizzare una pagina, ma sembra che potrebbe portare a dover scrivere un sacco di punti finali dell'API, così è esiste un modo migliore per gestire il problema?

    
posta Danack 09.10.2014 - 17:20
fonte

1 risposta

1

Sembra che la tua API sia troppo granulare; ovvero, stai recuperando blocchi di dati troppo piccoli.

Questo codice

$accountAddress = $sfUserProfile->getCustomer()->getAccount()->getAddress();

funzionerebbero tutti sul server, dietro il tuo servizio, quindi non sono necessariamente quattro chiamate di servizio. Anziché restituire un indirizzo account dal tuo servizio, devi restituire l'intero oggetto cliente.

    
risposta data 09.10.2014 - 17:26
fonte

Leggi altre domande sui tag