2011-11-29 3 views
6


Sto progettando un'applicazione mobile che recupera i dati del server tramite i messaggi SOAP.

volevo sapere qual è la migliore pratica:Quale è meglio? Numero elevato di chiamate al servizio web (messaggi SOAP) o quantità elevata di dati in un singolo messaggio di sapone?

  • Più il numero di chiamate di servizio web che vanno a prendere meno dati in ogni chiamata messaggio SOAP.
    O
  • Ricevo tutti i dati in una singola chiamata di servizio Web, ma la lunghezza del messaggio SOAP sarebbe grande.

    L'elevata quantità di dati in un singolo messaggio soap non creerebbe problemi di connettività dei dati per l'abbonato mobile.

    Nella mia domanda per un determinato anno devo ottenere i nomi di tutte le case automobilistiche e nomi di modelli per tutte le vetture da ciascun produttore. Ho due piani:
  • Mentre l'utente seleziona un anno, invio un servizio Web che riceverà tutti i dati.
  • Come l'utente seleziona un anno ottengo i nomi dei produttori e quindi quando l'utente seleziona un produttore, ottengo tutti i modelli per quel produttore.
    per favore aiutami dicendomi quale approccio dovrei prendere.

* PS: * utente può avere molti veicoli e se uso secondo approccio, allora i servizi web verrà chiamato per ogni veicolo.

+0

esattamente quello che cercavo da anni ... ottima domanda mayne –

+2

SOAP è l'architettura anti-consigliata da utilizzare quando si sviluppano servizi per dispositivi mobili. dovresti usare un'architettura RESTfull e inviare i dati preferibilmente in JSON –

+0

@OvidiuLatcu grazie, ma il client per il quale sto lavorando utilizza già questa architettura quindi non posso cambiarlo. –

risposta

1

Che tipo di risposte dimensioni stiamo parlando - min/max/tipo?

Non c'è una risposta semplice a questa domanda in quanto dipende da ciò che attiva la richiesta di servizio web, ad es. è in risposta a un'azione dell'utente, cronometrata, ecc.

La latenza è uno degli assassini sulle reti mobili (più importante della larghezza di banda ridotta), quindi in teoria si dovrebbe mirare a un numero minimo di richieste.

ma ...

Non ha senso nel fare grandi richieste, se non avete bisogno dei dati.

La mia ipotesi è che dovrete testare con dimensioni di risposta diverse per trovare il punto debole.

Inoltre, non dimenticare di consentire gzip/deflate nella richiesta e comprimere la risposta dal server.

Se possibile mi piacerebbe anche andare per un approccio RESTful e garantire le risposte GET sono cacheable

+0

grazie ... ho aggiornato la domanda di conseguenza. si prega di avvisare. –

+0

Preferirei utilizzare il secondo approccio, ovvero ottenere i produttori, quindi, quando uno è stato scelto, ottenere i modelli: non ha molto senso ottenere tutti i dati possibili se l'utente sta eseguendo il drill-down su un sottoinsieme –

+0

ma non lo farebbe rendere la mia applicazione lenta ... poiché il mio utente può avere più di un veicolo e quindi la chiamata deve essere fatta a tutti i veicoli .. –

2

paio di punti

  1. Come sottolineato nel commento Uso JSON invece di SOAP dove mai possibile, SOAP è il peso molto pesante e non è raccomandato in questi giorni. (Guarda tutti gli endpoint di essere esposti da Google e altri - molti usano JSON)

  2. Se la dimensione xml sta diventando troppo grande (oltre pochi kilobyte) è meglio effettuare più chiamate anziché caricare un oggetto di grandi dimensioni in memoria.

+0

soap o json è solo un formato .. la domanda rimane: 1 chiamata json con molti oggetti all'interno, o più chiamate json con meno dati – Tominator

+1

preferirei seconda se la dimensione JSON è grande –

+0

In mobile qualche richiesta http è l'opzione migliore . – fravelgue

1

Su una connessione mobile, mi piacerebbe optare per le più grandi risposte a causa della latenza della rete. È meglio prendere un sacco di cose in una volta piuttosto che recuperare ogni oggetto in un nuovo roundtrip. Ciò manterrà la tua app veloce.

Anche le risposte più grandi possono essere gestite in modo efficiente senza doverle memorizzare in memoria se si utilizza una libreria in grado di "trasmettere" la risposta.