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 »

Salut Maxime,

Est-ce que tu prévois de mettre à jour le cours Vapor avec la version 5 quand elle arrivera, par hasard ?
Merci d’avance pour la réponse :wink:

1 « J'aime »

Salut @Mrt1,

je ne sais pas encore ce que je vais faire car je ne connais pas encore les changements.
Généralement pour une nouvelle version majeure il y a beaucoup de changements, donc il sera peut être nécessaire de refaire un nouveau cours.

On sait quand elle doit sortir cette v5 ?

Merci pour ta réponse @mbritto.

D’après le discord de Vapor, la nouvelle version sortira dans quelques semaines… mais pas de date annoncée :grimacing:

Bonsoir à nouveau,

Je réalise que je n’ai pas répondu à ce fil…honte à moi! :wink:
Le pb c’est que je n’ai pas suffisamment de temps pour creuser tous ces sujets…

Mais je pense que la bonne solution c’est effectivement de faire comme tu indiques en utilisant à la fois Vapor (je vais attendre la v5 car je suis très intéressé par le async/await) et Realm.
D’ailleurs, je me demandais si le concept de section critique (ou mutex) existe encore et a un intérêt dans les langages modernes dont Swift?? Pour gérer le cas (peu probable) ou 2 utilisateurs voudraient modifier la même donnée. J’utilisais ça il y a quelques (voire un peu plus…) années dans les moniteurs temps réel (à l’époque où ça existait) mais ça fait longtemps que je n’en ai plus entendu parler.

Déjà je suis en train de refaire la partie Manager en la séparant en plusieurs classes (voir un autre fil qui parle du singleton), mais ça me fait modifier beaucoup de code. En fait je me suis laissé emporter par la facilité et mettant tout dans la même classe.

Et pour tout vous dire en même temps je me mets au Python qui va me servir également au boulot pour faire de l’analyse de fichier XML. Les journées sont trop courtes…
A bientôt.

Bonsoir à tous,

Pour info, quelques news des dev de Vapor sur le forum de swift.org :

Ça promet de bonnes choses :grin:

Les choses avancent bien :slight_smile:

MacOS Monterey obligatoire par contre… vous avez testé de votre côté? ça passe avec du Flutter aussi ?