Salut,
Quel superbe jeu de mots pour le titre, n’est-il pas ? ^^
Bloqué est bien le terme. Comme beaucoup, pour comprendre et avancer, j’ai besoin du déclic et, depuis plusieurs jours il ne se manifeste pas. :/
Je viens donc quérir de l’aide.
Je réalise actuellement une application qui sera disponible classiquement sur navigateur, mais aussi par le biais d’une application mobile. Et là est mon souci. Je ne sais pas comment rendre accessible mon application faite avec CakePhP autrement que par le navigateur. Ou plutôt, je ne comprends pas comment la rendre accessible vers l’extérieur.
Mon application est basique : authentification, lecture, écriture. L’application mobile devrait donc permettre à l’utilisateur de s’authentifier puis d’accéder à toutes ses données et de pouvoir en rajouter, etc. Bref faire la même chose que sur navigateur, mais par le biais d’une application mobile.
J’ai parcouru ce sujet : http://www.grafikart.fr/forum/topic/12065
Mais malgré cela je n’arrive pas à tout saisir et ne sais absolument pas comment le réaliser concrètement. Plus je cherche plus je me retrouve perdu.
Dans mes recherches, j’ai même trouvé ce plug-in https://github.com/kvz/cakephp-rest-plugin. Mais je ne le comprends pas et n’arrive absolument pas à le mettre en place et le faire fonctionner. :/
J’avoue être désespéré de ne pas saisir le truc et d’enfin pouvoir apprendre et passer à l’action.
Pouvez-vous m’aider à comprendre comment on réalise cela avec Cake ?
Concrètement. Sur l’application mobile, je fournis un formulaire qui demande un identifiant et un mot de passe. Et après ? Comment sont envoyées ces informations à Cake ? Je suppose que cela ne fonctionne pas comme un POST et que tout se passe dans l’URL. Ai-je bon ?
L'authentification basic place les informations de connexion dans le header de la requête HTTP. Le framework CakePHP comprendra ça tout seul. De la même manière, le framework associé à ton application mobile le réalisera tout seul.
Il faudra protéger chaque action avec l'identifiant/mot de passe donc tu devras stocker ça dans un dictionary sur le mobile. Mais ça c'est un peu hors sujet.
Idem si je veux que l’utilisateur puisse s’inscrire directement de l’application, comment les données transitent d’un formulaire dans l’application vers Cake (ainsi que tout type d’envoi de données) ?
Requête post avec les informations de l'utilisateur en données. SURTOUT PAS EN PARAMETRE !!!
Je pense qu'il faut que tu comprennes un peu plus ce qu'est Rest avant de commencer à coder. Je te renvoie vers un autre topic qui te permettra de mieux saisir le fonctionnement. http://www.grafikart.fr/forum/topic/12238. Si tu as toujours des questions, je te conseille de regarder comment Android ou iOS gère l'envoi et la récupération de données depuis des sites externes, c'est une des fonctionnalités les plus utilisées.
Pour mieux comprendre les API, je te conseille d'en analyser plusieurs, Twitter ou Kippt sont des exemples intéressants à mon sens (mais pas Facebook par contre).
Lorsque tu tapes n'importe quelle url de ton site, tu va chercher à lancer une action d'un de tes Controller, ext http://www.monsite.com/posts/show/1, tu vas lancer l'action show($id) de PostsController.
Lorsque tu tapes cette adresse sur un navigateur, tu souhaites que l'action te renvoie une page web, et donc du code HTML, d'ou le $this->set().
Lorsque tu tapes cette adresse depuis un mobile, tu veux simplement obtenir les mêmes informations mais dans un format différent. Ce ne sera pas de l'HTML mais du JSON (ou du XML). Voici la seule différence entre le client léger (navigateur) et le client lourd (application mobile). L'affichage des informations dans ton application mobile se fera avec le code relatif à ton application.
Est ce que c'est plus clair ou il y a encore des zones d'ombre ?
Merci pour ta réponse et ton aide.
Cette théorie, je l’ai de manière empirique.
J’ai continué mes recherches dans la doc de Cakephp et j’ai réussi à comprendre comment lui faire sortir du JSON. Ce qui me permet de comprendre que dans mon application, il me suffira d’appeler l’URL juste en rajoutant .json à la fin.
Mais là ou j’ai beaucoup plus de soucis pour comprendre c’est pour l’authentification et, plus généralement, l’envoi de donnée vers l’application.
Pour l’authentification, j’ai bien saisi que Cake permet d’utiliser l’authentification basic ou Digest, adapté à cela. Mais je ne saisis pas comment il faut envoyer la requête à Cake.
Concrètement. Sur l’application mobile, je fournis un formulaire qui demande un identifiant et un mot de passe. Et après ? Comment sont envoyées ces informations à Cake ? Je suppose que cela ne fonctionne pas comme un POST et que tout se passe dans l’URL. Ai-je bon ?
Idem si je veux que l’utilisateur puisse s’inscrire directement de l’application, comment les données transitent d’un formulaire dans l’application vers Cake (ainsi que tout type d’envoi de données) ?
En faites, là ou j’ai le plus de mal c’est de l’application mobile vers CakePhP.
Je ne sais pas si je suis clair.
Re,
Désolé pour avoir tardé à répondre, mais je voulais être sûr de bien tout comprendre les pistes que tu me donne.
J'ai notamment bien mieux compris au niveau mobile. Je compte me tourner vers Titanium pour le développement mobile, et c'est en regardant leur docs que j'ai pu faire un gros pas en avant dans la compréhension.
Je te remercie grandement pour ton aide.
P.S : Du coup, je me rend compte que cela peut-être bien plus intéressant de coder la version Web "classique", en ne me servant de CakePhP que pour réaliser le service web renvoyant du JSON. Et, dû coup, de coder l'interface en HTML5/AngularJS. Ce qui m'amène des questions... que je poserais dans un autre topic.
Du coup, je me rend compte que cela peut-être bien plus intéressant de coder la version Web "classique", en ne me servant de CakePhP que pour réaliser le service web renvoyant du JSON.
Yep, c'est ce que je suis en train de faire justement. Je proposerai les sources sur GitHub. Je voudrais montrer comment gérer le push entre des clients lourds et des clients légers.