[Swift] Récupérer données JSON avec PHP

CusmarCusmar Membre
juillet 2015 modifié dans Objective-C, Swift, C, C++ #1

Bonjour,


 


Après plusieurs heures passées hier à  chercher de mon côté, je me suis décidé ce matin à  vous demander votre aide car il m'était impossible de trouver quoique ce soit sur Google correspondant précisément à  ce que je cherchais.


 


Cherchant à  stocker des données sur un serveur SQL distant, j'ai suivi les conseils de certains d'entre vous et me suis résolu à  pencher pour la solution JSON avec PHP. D'ailleurs, est-ce une bonne idée pour réaliser un réseau social sur iOS ?


 


Pour en venir à  mon problème, c'est lorsque je souhaite envoyer des données JSON à  ma page PHP, j'utilise cette méthode avec mes paramètres :


l



request.HTTPBody = NSJSONSerialization.dataWithJSONObject(params, options: nil, error: &err)

l


Le problème, c'est que je ne comprends pas comment lire ce qui est envoyé sur ma page PHP. Normalement, pour lire une méthode de type POST, il faut que ce qui soit renvoyé soit de la forme data={"password":"","username":""} pour pouvoir récupérer ce que data contient et ainsi le lire avec $_POST["data"].


 


Or là  seul {"password":"","username":""} est renvoyé et je ne sais pas comment faire pour récupérer ce code sur ma page PHP.


 


 


Comment faites-vous ? J'ai pensé à  utiliser json_decode mais ce sera naturellement possible qu'en passant en paramètres une variable contenant ma chaà®ne de caractères. Et comme je ne sais pas à  partir de quoi la récupérer...


 


Je suis conscient que cela relève aussi d'un problème PHP, mais comme une méthode Swift entre en jeu et que c'est elle qui n'envoie pas ce que je veux, je me suis permis de vous demander votre aide. 


Réponses

  • AliGatorAliGator Membre, Modérateur
    Il ne faut pas dans ce cas utiliser $_POST mais lire le body complet de ta requête reçue par PHP, typiquement en utilisant le stream spécial "php://input" :
    $json = file_get_contents('php://input');
    $obj = json_decode($json);
  • C'est parfait, merci beaucoup ! 


     


    J'avais l'équivalent en Ruby mais impossible de connaà®tre son nom pour le trouver en méthode php.


     


    Est-ce possible d'avoir votre avis par rapport à  cette méthode pour recevoir, renvoyer et stocker des informations en vue d'une application de type réseau social ?


  • AliGatorAliGator Membre, Modérateur
    juillet 2015 modifié #4
    Bah j'ai l'impression que tu es parti pour tout coder toi même, y compris côté serveur, ce qui pose de nombreux risques par opposition à  une solution dédiée :
    • erreurs/bugs de jeunesse de ton code que n'auront pas des solutions déjà  éprouvées
    • failles de sécurité inévitables (ce qui veut à  la fois dire risque d'attaque de ton serveur pour le faire partir en vrille type DDoS, mais aussi et surtout risque d'exposition / récupération des données de ta base, tant concernant les informations personnelles de tes utilisateurs (infos de compte) que les messages échangés
    • quantité de boulot assez conséquente surtout si tu n'utilises pas un framework (Zend/Symphony/etc) dédié orienté REST et MVC (pourquoi pas partir sur du RoR par exemple vu que tu as l'air de connaà®tre Ruby ?)
    • quid de la solution d'hébergement? En particulier quand tu commenceras à  avoir de la charge, a avoir un besoin de 24/7 + backups etc... problématiques loin d'être negligeables
    Et j'en oublie certainement.


    Le plus gros problème est la sécurité, car même pour quelqu'un qui fait gaffe en codant pour éviter les attaques (XSS/SQLInjection/DDoS/MitM et autres classiques) c'est un domaine assez costaud et vu les données hyper sensibles dans en + dans le cas d'un réseau social, c'est quand même très loin d'être anodin donc faut t'y connaà®tre un minimum pour être sûr de tout protéger correctement.

    (Et vu l'exemple que tu donnes justement avec le login et password directement dans le JSON ça fait peur et donne une petite idée sur le fait que tu n'as pas en tête les solutions classiques de protection des données à  commencer par le login/mdp ! ça rassure pas trop...)



    Pourquoi ne pas plutôt partir sur une solution packagée et tout particulièrement adaptée à  la partie serveur, qui va gérer la sécurité des échanges, l'hébergement, la disponibilité 24/7, les WebServices et l'interface REST/JSON, et tout le reste ? En plus d'être bien plus robuste, ça te simplifierai la vie et te gagnerai un temps conséquent... je pense bien sûr aux solutions comme CloudKit ou Parse ou équivalents.
  • CusmarCusmar Membre
    juillet 2015 modifié #5

    Merci pour ces explications détaillées. L'exemple login/mdp était le plus rapide à  mettre en place (2 champs et un bouton) pour faire des tests, mais je ne m'en serais pas servi de cette façon.


     


    Mais je ne te cache pas que les protocoles de sécurité que tu évoques ne me sont pas tous familiers.


     


    J'avais regardé du côté de Parse mais j'ai vite cherché une autre solution, car au cas où l'application s'envole (je dis bien si, mais mieux vaut prévoir), il faudrait trouver une solution plus abordable et surtout revoir l'ensemble du code.


    Par rapport à  CloudKit, c'est la dernière chose que j'avais regardé, justement sur ce forum, et c'est qu'ensuite que je me suis dit qu'il serait plus sympa de réaliser la partie serveur moi-même pour pouvoir organiser les données à  ma façon, en dépit du fait que je n'avais pas imaginé autant de problèmes possibles liés à  la sécurité.


     


    Si j'ai abandonné l'idée de CloudKit, c'est que beaucoup de sites le déconseillaient - mais c'était surement avant la mise à  jour, mais aussi parce que je ne comprenais pas vraiment son fonctionnement. Mais si tu me dis que ce peut être une solution, je vais m'orienter de ce côté.


     


    Pour ton app FoodReporter, tu utilises quoi par exemple ?


  • AliGatorAliGator Membre, Modérateur
    A l'époque que FR Parse n'existait pas encore " sinon je pense qu'on l'aurait utilisé.


    On a développé une solution maison mais a l'aide d'un développeur expérimenté donc qui connaissait bien ces problématiques, en utilisant Amazon S3 pour le stockage, la redondance, et la gestion de charge et de dispo 24/7 (ça nous a énormément servi lors des passages TV par exemple où la charge et bande passante serveur a explosé), et avec un front MVC en Zend pour la partie WS REST, là  encore avec un gars qui connaissait bien et avait déjà  développé du WS en PHP depuis des années donc c'était un peu son boulot et sa spécialité.
  • CusmarCusmar Membre
    juillet 2015 modifié #7

    Ok, et tu as un avis sur CloudKit ? Car avant de me lancer dans la doc, j'aimerais savoir si c'est une solution viable. J'ai vu qu'elle proposait une meilleure offre gratuite que Parse. 


  • Merci, je regarde ça de plus prêt.


Connectez-vous ou Inscrivez-vous pour répondre.