Schemi di oggetti condivisi tra servizi Web

1

La mia domanda riguarda come creare una definizione per un oggetto che viene gestito da diversi servizi web.

Una breve descrizione del mio scenario attuale e perché penso che sia un problema:

Un'applicazione Web PHP fornisce endpoint AJAX per compilare varie parti della mia app Web. L'endpoint fornisce accesso alle entità Utente e Progetto. Un'applicazione node.js utilizza sockjs per fornire eventi utente e di progetto in tempo reale alla mia app Web.

Ecco il problema: lo schema degli oggetti JSON forniti dal servizio node.js è leggermente diverso dagli stessi oggetti forniti dagli endpoint PHP. Questo è male perché rende molto riutilizzabile il mio codice dimensione del client, e c'è un sacco di "se proviene dal nodo, accedi a questa proprietà, se proviene da AJAX, accedi a questa altra proprietà" digita la logica. Ugh!

Il codice base è troppo grande per eseguire un refacting una tantum e assicurarti che tutti gli sviluppatori aderiscano al nuovo design.

Voglio un modo per condividere informazioni tra la mia app node.js e la mia app php in modo che entrambi sappiano come devono definire determinati oggetti.

Qual è il modo più comune per risolvere questo tipo di problema?

    
posta Trindaz 21.06.2013 - 08:55
fonte

1 risposta

1

Normalizza qualsiasi JSON in uscita dal tuo servizio web node.js.

Ad esempio, per ogni schema che hai, crea una funzione wrapper che modifica i dati JSON in modo che corrispondano al formato dei dati PHP. Anche se definisci una traduzione semplice come questa:

function convertUser(user) {
    return {
        id: user._id,
        anotherField: user.another_field,
        // ...
    };
}

La mia più grande preoccupazione è la ragione di ciò. Stai semplicemente scaricando i dati direttamente dal database? Questo tipo di normalizzazione dovrebbe essere parte del processo di scarico piuttosto che restituire ciecamente tutto ciò che è richiesto. Poiché i campi di database (o gli schemi, nel tuo caso) cambiano, la tua API non dovrebbe.

    
risposta data 21.06.2013 - 17:14
fonte

Leggi altre domande sui tag