Echange de données. App multi-utilsateurs

MAGEMAGE Membre
mai 2010 modifié dans Vos applications #1
Je tourne, je cherche, je ne comprends pas... je demande à  la communauté PommDev sa vision éclairée  <3 <br />
J'ai un projet d'application dont le rôle sera d'échanger des données entre plusieurs utilisateurs.
Comme le schéma ci-dessous le montre, les utilisateurs devraient pouvoir créer des "projets" que les autres devraient pouvoir consulter et modifier.

Il me faut donc utiliser une base de données avec des tables relationnelles. Exit CoreData qui n'est que mono utilisateur et, si j'ai bien compris, il n'y a guère que SQL pour faire cela.

J'en viens là  où j'en suis, c'est à  dire devant un grand trou noir. Car je ne connais pas du tout sql (si ce n'est de changer deux trois options en phpMysql). Par où commencer ?  B)
- Est-ce que je dois prévoir une base chez mon fournisseur d'accès ?
- Quels sont les prérequis pour espérer avoir quatre cinq tables qui parlent avec l'iPhone ?
- Dois-je commencer le dev sur l'iPhone ou sur le site ?
- Un framework (comme certains sont cité sur le forum, me simplifierai-t-il la création ?
... et comme je l'ai lu sur un autre post, devrais-je abandonner quelque chose bien trop difficile pour mon piètre niveau et aller boire un café ?

Il y quelques discussions déjà , mais je n'arrive déjà  pas à  visualiser la tâche hors iPhone Dev >:)

Réponses

  • PierrePierre Membre
    10:07 modifié #2
    Bonjour MAGE, je te conseil vivement de tout centraliser sur une base de données SQL accessible depuis internet, et d'utiliser ta propre API pour dialoguer avec la BDD depuis l'extérieur.

    Pour ma part je suis en train de concevoir une appli. iPhone client/serveur qui dialogue avec une API. J'ai commencé par le dév. de l'API (la doc, puis le dév en lui même). Cela m'a pris un mois (à  temps plein) pour rentrer dans le framework (Symfony) déjà  en place, comprendre l'existant et développer les fonctions de base (appel des objets existant en BDD, créer de nouveaux objet, etc.

    Maintenant je me suis en train de développer le côté client et cela ne m'a pas pris beaucoup de temps pour transformer mon flux XML (renvoyé par l'API) en Objet iPhone (si l'ont excepte les quatre jours passée à  chercher comment arriver à  m'authentifier à  l'API depuis l'iPhone ^^).

    J'espère que cela a répondu à  ton questionnement, sinon n'hésite pas à  poser d'autres questions pour affiner ta demande. ;)

    A bientôt,
    Pierre
  • MAGEMAGE Membre
    10:07 modifié #3
    Merci Pierre pour cette première piste. Ton expérience va m'aider à  démarrer et je vais me plonger dans les docs côté serveur (et notamment Symfony). ;)
  • zoczoc Membre
    10:07 modifié #4
    Mon avis perso: Symfony est un peu trop lourd pour faire un simple "webservice". Autant le faire directement en PHP (parce que pour utiliser Symfony, de toute façon, il faut maitriser PHP), ça sera beaucoup moins lourd.


    Et puis, 4 tables SQL ce n'est pas très compliqué, tant qu'il n'y a pas de jointures exotiques dans tous les sens  ;)
  • PierrePierre Membre
    10:07 modifié #5
    @MAGE & @zoc : moi j'ai utilisé Symfony car le projet était déjà  basé sur ce framework (et que le projet n'est pas que l'API ^^).

    L'utilisation de Symfony pour la création d'un webservice n'est absolument pas obligatoire. :)

    Pierre
  • MAGEMAGE Membre
    10:07 modifié #6
    Je devrais pas avoir plus de 6 tables avec des liens assez basiques : nom de l'utilisateur (table utilisateur) <-> nom de l'utilisateur (table projet). Mais je fais comment pour créer mes tables ? Je passe par l'administration mysql tout simplement ? J'achète un bouquin sur PHP ?
  • zoczoc Membre
    10:07 modifié #7
    Bah de toute façon pour faire un webservice en PHP... Il faut connaitre le PHP, et c'est pareil qu'on parte de rien ou d'un framework PHP comme Symfony...


    Parce que accéder directement à  une base MySQL distante depuis un iPhone, il faut oublier... Sinon pour la création des tables... N'importe quel outil peut convenir, y compris phpmyadmin... Mais ce n'est pas phpmyadmin qui va pouvoir exécuter des requêtes, pour cela il va falloir coder coté serveur.




    Donc, en gros, il va falloir apprendre un minimum de SQL et un minimum de PHP.
  • MAGEMAGE Membre
    10:07 modifié #8
    ok, merci pour cet éclairage.
    Pour Symfony, j'ai trouvé ce serveur alwaysdata qui propose une installation clé en main. Je pense que ça ne va pas m'avancer pour le codage, mais c'est peut-être utile à  ceux qui savent de quoi il s'agit ; en plus avec une option gratuite.
  • PierrePierre Membre
    10:07 modifié #9
    @MAGE je suis tout à  fait d'acord avec @Zoc, il faut connaà®tre le PHP pour développer un webservice en PHP. :)

    A ma connaissance il n'existe aucun framework (ou CMS ou autre) permettant d'interfacer une BDD et une application client/serveur sans devoir mettre les mains dans le cambouis. ;)

    Si ton objectif est juste de pouvoir faire dialoguer plusieurs applications entres elles avec un point central alors je te conseil de faire au plus simple et d'oublier Symfony. ;)

    Le plus simple = un hébergement mutualisé (ou dédié si tu as le budget et les compétences adéquates ^^) avec Apache et MySQL.

    Il faut réfléchir à  la structure de ta BDD, la créer (par exemple via PHPMyAdmin) et ensuite développer le code PHP (ou ASP, ou autre ^^) qui va bien pour qu'on puisse appeler plusieurs fonctions de lecture et d'écriture dans la BDD.
    La lecture renvoyant un fliux XMl ou JSON.

    N'oublie pas de bien sécuriser les accès en écriture (et ceux en lecture si ce sont des données sensible). Une fois ton API en place tu pourras regarder du côté du dév. iPhone pour qu'il appel les fonctions de ton API et qu'il récupère le flux XML ou JSON, l'interprète et te permette de faire dialoguer plusieurs applications client/serveur avec un point central (ta BDD).

    Si tu as des questions n'hésite pas,

    Bonne chance,
    Pierre
  • MAGEMAGE Membre
    10:07 modifié #10
    Il faut réfléchir à  la structure de ta BDD, la créer (par exemple via PHPMyAdmin)

    ça, je sais faire
    et ensuite développer le code PHP (ou ASP, ou autre ^^) qui va bien pour qu'on puisse appeler plusieurs fonctions de lecture et d'écriture dans la BDD. La lecture renvoyant un fliux XMl ou JSON.

    Là , j'ai tout à  apprendre. Si j'ai bien compris, je ne m'occupe pas trop du côté client. J'essaye d'abord le PHP (avec JSON en vue).
    Si tu as des questions n'hésite pas,

    Merci encore, j'hésiterai pas  ;)
  • PierrePierre Membre
    10:07 modifié #11
    Oui je te conseil de faire d'abord la partie serveur, et ensuite de travailler sur la partie client (avec dialogue client/serveur).

    Puisque le client va s'adapter au serveur, c'est ce dernier qui impose la syntaxe de dialogue (le protocol). ;)

    Bonne chance,
    Pierre
  • MAGEMAGE Membre
    10:07 modifié #12
    J'avance très gentiment sur mon site en Ruby... (c'est pô facile  B) )

    Mais comme il y a quelques actions qui commencent à  être possible, je pensais m'intéresser à  la partie iPhone pour me faire une petite idée.

    J'ai donc suivi tes conseils, Pierre, dans la chronologie. Maintenant j'aimerai avoir votre avis comment aborder le protocol ?

    Je remercie au passage Métablue qui m'aide bien
  • MAGEMAGE Membre
    10:07 modifié #13
    Je fais un petit up, car j'ai vraiment besoin de vos conseils.

    J'ai l'impression qu'il y a pas mal de méthodes et de philosophies pour faire une app qui se synchro avec une base de données.

    • J'ai fait des tuto sur Json.
    • Je me suis intéressé à  Ruby, mais j'ai l'impression de faire un site tout pour rien si je veux faire une app iPhone.
    • J'ai vu le framework d'Ali qui semble aller dans le même sens
    • J'ai regardé, sur les conseils de Metablue, actionwebservice pour Ruby
    • J'ai bien entendu regardé la doc sur les webservices ainsi que les posts sur le sujet sur le forum
    • J'ai suivi les posts sur le sujet sur le forum assez nombreux sur les webservices et le Ruby
    • ... et j'ai envie de  :'( parce que je mélange tout


    Merci encore de m'aider à  y voir plus claire pour créer simplement une application qui puisse parler avec ma base de données ou mon site Ruby  o:) o:) o:)
  • muqaddarmuqaddar Administrateur
    10:07 modifié #14
    Dans tous les cas tu n'échapperas pas à  la partie serveur si tu veux faire une synchro : sur le serveur se trouvent les données à  synchroniser de tous les côtés.

    Tu peux commencer très simplement :
    - Appeller une URL http sur ton site en POST (par exemple, ouvrir un compte user)
    - Récupérer le résultat (par exemple renvoyer depuis le site sur le serveur une chaà®ne JSON ou un PLIST qui dit { :success => OK } ou { : success => KO }
    - Afficher le résultat dans l'application iPhone (certainement dans une méthode delegate de NSURLConnection) en interprétant la chaà®ne JSON ou le PLIST

    Et voilà , tu t'es créé un premier webservice perso.
    Par ailleurs, je te conseille l'excellent framework ASIHTTPREQUEST et ses méthodes delegate vraiment sympa, et plein d'autres choses... je suis en train de l'apprendre. La doc est simple.
  • zoczoc Membre
    10:07 modifié #15
    dans 1276963550:

    Tu peux commencer très simplement :
    - Appeller une URL http sur ton site en POST (par exemple, ouvrir un compte user)
    - Récupérer le résultat (par exemple renvoyer depuis le site sur le serveur une chaà®ne JSON ou un PLIST qui dit { :success => OK } ou { : success => KO }
    - Afficher le résultat dans l'application iPhone (certainement dans une méthode delegate de NSURLConnection) en interprétant la chaà®ne JSON ou le PLIST

    - Utiliser le framework RPC-JSON d'Ali ;) et la possibilité native de faire du RPC-JSON coté Ruby On Rails
  • MAGEMAGE Membre
    10:07 modifié #16
    Merci pour vos réponses.  :)

    Je vois par où commencer et confirme que le framwork RPC-JSON d'Ali peut faire cette tâche. Je vais faire quelques essais de ce côté.

    Puis je regarderai de plus près ASIHTTPREQUEST qui montre des fonctions intéressantes sur la gestion des données asynchrones.
    Dans le même temps, je vais essayer de mettre en route actionwebservice sur mon serveur Ruby.
    En espérant que tout ça ne se mélange pas trop.
  • 10:07 modifié #17
    Mais je fais comment pour créer mes tables ?


    Bonjour,

    Un truc assez pratique que j'ai utilisé : c'est la modélisation de base de données dans l'environnement de dev. Eclipse.
    À l'époque j'utilisais un plugin intitulé Clay (http://www.azzurri.jp/) qui me permettait de construire visuellement ma base (structure, relation, index, clés, vues etc.) et de générer le script de création des tables que je faisais ensuite exécuter via phpmyadmin (option SQL, importation de fichier).

    K.
  • AliGatorAliGator Membre, Modérateur
    10:07 modifié #18
    Hé bé, merci pour la pub gratuite, je vois que mon framework sert à  pas mal de monde, je ne suis pas mécontent de l'avoir bien paufiné et ouvert à  la communauté du coup, ça fait plaisir ces petits retours d'usage :P
  • MAGEMAGE Membre
    10:07 modifié #19
    Bon Je suis complètement perdu et j'avance pas d'un pouce depuis plusieurs semaines  :o

    J'ai bien essayé de suivre les conseils de Muqaddar :
    Tu peux commencer très simplement :
    - Appeller une URL http sur ton site en POST (par exemple, ouvrir un compte user)
    - Récupérer le résultat (par exemple renvoyer depuis le site sur le serveur une chaà®ne JSON ou un PLIST qui dit { :success => OK } ou { : success => KO }
    - Afficher le résultat dans l'application iPhone (certainement dans une méthode delegate de NSURLConnection) en interprétant la chaà®ne JSON ou le PLIST


    et de Zoc :
    Utiliser le framework RPC-JSON d'Ali  et la possibilité native de faire du RPC-JSON coté Ruby On Rails


    Que je remercie d'ailleurs.

    Pour l'instant, j'ai un site de test ici : http://phemka.alwaysdata.net/
    Mais je sais vraiment pas comment faire pour adapter l'une des solutions qui me sont présentées.

    Par exemple, pour enregistrer un nouvel utilisateur, j'ai un Model User avec un code tout ce qu'il y a de plus basique en Ruby :
    &nbsp;  # show the new page<br />&nbsp; &nbsp;  def new<br />&nbsp; &nbsp; &nbsp;  @user = User.new<br />&nbsp; &nbsp;  end<br /><br />&nbsp; &nbsp; # save <br />&nbsp; &nbsp; def create<br />&nbsp; &nbsp; &nbsp; @user = User.new(params[:user])<br /><br />&nbsp; &nbsp; &nbsp; respond_to do |format|<br />&nbsp; &nbsp; &nbsp; &nbsp; if @user.save<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; flash[:notice] = &#39;User was successfully created.&#39;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; format.html { redirect_to(@user) }<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; format.xml&nbsp; { render :xml =&gt; @user, :status =&gt; :created, :location =&gt; @user }<br />&nbsp; &nbsp; &nbsp; &nbsp; else<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; format.html { render :action =&gt; &quot;new&quot; }<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; format.xml&nbsp; { render :xml =&gt; @user.errors, :status =&gt; :unprocessable_entity }<br />&nbsp; &nbsp; &nbsp; &nbsp; end<br />&nbsp; &nbsp; &nbsp; end<br />&nbsp; &nbsp; end


    Je sais que ma demande n'est pas très précise et je comprendrai qu'il n'y aie pas de réponse. J'essaye quand même pour voir s'il y a une possibilité de me faire comprendre quelque chose  >:)
  • muqaddarmuqaddar Administrateur
    10:07 modifié #20
    Voilà  une fonction ruby qui ouvre un compte et renvoie une chaà®ne JSON, à  toi d'adapter en fonction des paramètres que tu envoies (moi, j'envoie un login, un password et un email) :

    def open_account<br />&nbsp; &nbsp; if request.post?<br />&nbsp; <br />&nbsp; &nbsp; &nbsp; @user = User.new<br />&nbsp; &nbsp; &nbsp; @user.login = params[:user_login]<br />&nbsp; &nbsp; &nbsp; @user.password = params[:user_password]<br />&nbsp; &nbsp; &nbsp; @user.password_confirmation = params[:user_password_confirmation]<br />&nbsp; &nbsp; &nbsp; @user.email = params[:user_email]<br />&nbsp; &nbsp; &nbsp; @user.email_confirmation = params[:user_email_confirmation]<br />&nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; if @user.save<br />&nbsp; &nbsp; &nbsp; &nbsp; @response = { :success =&gt; &quot;OK&quot; }<br />&nbsp; &nbsp; &nbsp; else<br />&nbsp; &nbsp; &nbsp; &nbsp; @response = { :success =&gt; &quot;KO&quot; }&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; end&nbsp; <br />&nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; respond_to do |format|<br />&nbsp; &nbsp; &nbsp; &nbsp; format.json { render :json =&gt; @response }<br />&nbsp; &nbsp; &nbsp; end&nbsp;  <br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; end<br />&nbsp; end


    Il faut bien sûr avoir installé le gem JSON chez ton hébergeur.
  • MAGEMAGE Membre
    10:07 modifié #21
    J'y suis pas encore, mais je te remercie déjà . Ton dernier message m'aide beaucoup  ::)
Connectez-vous ou Inscrivez-vous pour répondre.