Stiamo sviluppando un'applicazione iOS che deve essere sincronizzata con un server remoto utilizzando i servizi Web. I servizi Web esistenti hanno uno stile "operations" piuttosto che REST (implementato in WCF ma che espone gli endpoint JSON HTTP). Non siamo sicuri di come strutturare i servizi web per adattarsi al meglio con iOS e ci piacerebbe qualche consiglio. Siamo anche interessati a come gestire il processo di sincronizzazione con iOS.
Senza entrare in dettagli dettagliati, l'applicazione consente all'utente di stimare i costi di riparazione in un sito remoto. Questi costi sono suddivisi per stanza e articolo. Se l'utente ha una connessione Internet, questi dati possono essere rinviati al server.
È possibile scattare più foto di ciascun articolo, ma saranno conservate in una coda separata, che viene inviata quando la connessione è ottimale (idealmente wifi).
La nostra applicazione di back-end controlla gli ID univoci per ogni stanza ed elemento. Pertanto, ogni volta che inviamo questi costi al server, il server riecheggia gli ID del database centrale, in modo che possano essere sincronizzati nell'app mobile. L'ho semplificato un po ', dal momento che il contratto operativo è in realtà molto più ampio, ma voglio solo illustrare i requisiti di base senza complicare le cose.
In primo luogo, l'architettura del servizio web: al momento abbiamo due operazioni: GetCosts e UpdateCosts.
La mia ipotesi è che, se utilizzassimo una rigorosa architettura REST, avremmo bisogno di interrompere le nostre singole operazioni di servizi Web in più servizi più piccoli. Ciò renderebbe i servizi molto più chiacchieroni e dovremmo anche garantire un ordine di consegna dall'app. Ad esempio, dobbiamo assicurarci che le stanze contenenti siano aggiunte prima dell'elemento.
Anche se questo sembra molto più RESTful, la nostra percezione è che queste chiamate extra sono costose connessioni (controlli di sicurezza, chiamate al database, ecc.). Il tipo di web api (operazione rispetto al fuoco di servizio) determina chunky vs loquace? Dal momento che questo è mobile (3G), possiamo gestire meglio un sacco di messaggi più piccoli, o alcuni di grandi dimensioni?
In secondo luogo, il lato iOS. Qual è l'attuale consiglio su come gestire la sincronizzazione dei dati all'interno dell'app iOS (5) stessa. Abbiamo bisogno di più code e dobbiamo garantire l'ordine di consegna in ogni coda (e tecnicamente, l'ordine tra le code). Il server deve controllare ID univoci e altre proprietà ed echo di nuovo all'applicazione. L'applicazione deve quindi aggiornare un database interno e, al momento del nuovo aggiornamento, assicurarsi che gli ID corretti siano disponibili nel messaggio di aggiornamento (essenzialmente più inserimenti e aggiornamenti in una chiamata).
Il nostro backend ha un sacco di logiche di business che operano su queste stime di costo. Non vogliamo nulla di ciò nell'app stessa.
Attualmente l'app iOS invia i dati di costo, quindi il server riecheggia i dati con gli ID popolati (e altri dati). I dati di costo esistenti vengono eliminati e i dati di risposta eco vengono aggiunti al database client sul dispositivo. Questo ci sta causando problemi, perché qualsiasi foto potrebbe non essere stata inviata, ma la struttura ad albero originale è stata rimossa e sostituita. Ovviamente l'aggiornamento dell'albero dei costi piuttosto che la sostituzione rimuoverebbe questo problema, ma non sono sicuro che ci siano delle belle librerie xcode per fare queste cose.
Accolgo con favore qualsiasi consiglio tu possa avere.