Stockage local, Web Service est synchronisation

Bonjour à tous,

J’ai une application qui tourne correctement, avec ses données stockées dans Realm. Je voudrais me lancer dans le développement de la synchronisation avec un Web Service que j’ai l’intention de développer avec Vapor. Je n’ai aucune expérience dans ce genre de dév, et je me pose plein de questions. Peut être que certains voudront bien se lancer dans des explications. Je les en remercie d’avance.

Comment concilier dans une application les données stockées localement (Realm ou CoreData) et celles hébergées sur le WebService :

– le but est d’avoir une application qui fonctionne même en l’absence de réseau, il faut donc que les données soient stockées localement dans Realm, Core Data ou une BDD ; au démarrage, si on a accès au réseau, que faut-il utiliser ? le stockage local, ou le Web Service ? Comment être prévenu des éventuelles modifications effectuées dans le Web Service pendant que l’application n’était pas lancée ?

– il faut être capable d’envoyer vers le Web Service les données modifiées sur le mobile dans le stockage local; j’imagine qu’on n’envoie que la donnée modifiée ?

– mais il faut également pouvoir recevoir, via le Web Service, d’éventuelles données ajoutées ou modifiées depuis un autre ordinateur ; faut-il interroger régulièrement le Web Service pour savoir s’il y a des données nouvelles, ou existe-il un service genre « push » qui serait capable de prévenir les autres ordinateurs des changements ?

Salut, je vois que ton message n’a pas eu de réponse, c’est probablement lié au fait qu’il y a trop de questions en même temps :grin:
La fonctionnalité que tu décris était celle du défi de Mai, et il a effrayé tout le monde :joy:
C’est vrai que la tâche est complexe et le parcours semé d’embûches.
La façon la plus simple de le faire consiste à :

  1. Développer le web service avec la techno de ton choix (vapor va bientôt être mis à jour, je te conseille d’attendre avant de te lancer)
  2. Sur l’app, dès que tu arrives sur un écran qui a besoin des données, tu les récupères en HTTPS/JSON via ton webservice
  3. Tu affiches les données à l’utilisateur et en même temps tu les enregistres dans ta base locale Realm (Point bonus si tu enregistres la date à laquelle tu as enregistré ce cache local)
  4. Quand tu reviens sur la même page de ton app plus tard, tu auras le choix de repasser par le webservice ou de récupérer les données de ton cache local.

Comment choisir entre les données du cache local et celles distantes ?

Le plus simple est de tenter systématiquement de récupérer d’abord les données distantes, et si tu n’y parviens pas, basculer sur le cache s’il est disponible.
En datant tes caches, tu peux tenter des chargements plus intelligents pour soulager ton serveur (par exemple, ne pas recharger les données si ton cache a moins de X jours).
Tu peux aussi afficher instantanément les données de ton cache, puis tenter en arrière plan de rafraichir les données en HTTP.

Comme tu le vois il y a pleins de possibilités que tu peux affiner par rapport à ton app et à ton besoin.

Happy coding!

Bonjour,

Oui j’ai été un peu gourmand :smirk:.
En tout cas merci pour tes réponses qui m’éclairent bien.

J’ai effectivement regardé ton cours Vapor4 pour commencer à m’initier à ce domaine que je ne connais pas. Si je comprends bien Vapor5 va bientôt sortir? Est ce que tu sais quelles vont être les améliorations?

Merci encore et comme dirais quelqu’un que je connais … happy Coding!
:smiley:

Je ne connais pas les changements principaux de vapor, mais je sais que ce sera basé sur Swift 5.5 et Swift NIO avec la gestion du async/await. Ca change complètement la donne en simplifiant vraiment le développement de webservices en Swift.
Donc il ne vaut mieux pas commencer avec Vapor 4 maintenant car tu risques de te compliquer la vie pour rien, patiente un peu et dès que la nouvelle version de Swift sortira de beta, le nouveau vapor suivra dans la foulée.

1 J'aime