Partage
  • Partager sur Facebook
  • Partager sur Twitter

Convertir les données d'API vers mon modèle

    12 novembre 2019 à 13:33:02

    Bonjour à tous,

    Je m'entraine actuellement à utiliser des API diverses et variées.

    Je suis face à un problème non pas bloquant, mais qui me pose question quant à savoir quelle est la meilleure pratique à utiliser.

    Je fais appel à 2 API différentes pour récupérer la météo pour demain et après demain. Comme vous vous en doutez, les données que je récupère ne sont pas formatées de la même manière. Pour autant, je souhaite travailler avec mes classes. Je dois donc convertir les données des API pour faire en sorte que quelque soit l'API utilisée, je récupère un objet du même type.

    Quelle est la meilleure manière de le faire ? J'ai regardé du côté des Adapter, DataTransformer et fait pas mal de recherche, mais rien de semble réellement convenir à mon besoin.

    Y a-t-il seulement une manière spécifique de le faire ou chacun fait sa petite tambouille comme il le sent?

    Merci et bonne journée!

    • Partager sur Facebook
    • Partager sur Twitter
      13 novembre 2019 à 9:03:43

      Bonjour,

      je souhaite travailler avec mes classes

      ==> qu'est ce que cela veut dire : de quelles classes parles-tu ?

      D'une manière générale, une API va délivrer des informations selon un format qui peut d'ailleurs être demandé lors de son interrogation : json, xml, etc.

      Ensuite les données contenu en réponse vont dépendre du domaine de l'API de la manière qu'elle a été codée. Par exemple, une API retournera le code de la ville sous l'intitulé zip et l'autre zip_code. Je ne vois pas trop comment dans ce cas, faire du générique.

      Donc effectivement il faut développer un module (tambouille) pour à partir du format de l'API utiliser selon ses besoins les datas fournies.

      Pour info, j'utilise l'API openweather - https://openweathermap.org/ - qui me permet d'avoir aussi bien la météo du jour que les prévisions sur 15 jours sur beaucoup de villes.

      N'ayant pas besoin de stocker les infos, je décode juste le retour json pour l'affichage.

      A+

      -
      Edité par monkey3d 13 novembre 2019 à 17:50:17

      • Partager sur Facebook
      • Partager sur Twitter
        13 novembre 2019 à 17:11:35

        Salut Monkey,

        En réalité, j'ai réussi à répondre à mon besoin. Je m'explique.

        "De quelle classe parles-tu?". J'ai créé des classes de modèle et je souhaite que les données de l'API remplissent ce modèle. Pourquoi faire ? De cette manière, quelle que soit l'API que j'utiliserai, dans mon application, je travaillerai toujours avec mon modèle qui aura toujours la méthode "getZip()" par exemple.

        J'ai utilisé https://symfony.com/doc/current/components/serializer.html et ai créé deux custom normalizer qui me permettent de transformer les JSON différents en même modèle à la fin! :)

        Ce modèle, je ne le sauvegarde pas non plus et ne fais que l'afficher à la fin dans ma vue.

        Merci pour ton message !

        • Partager sur Facebook
        • Partager sur Twitter
          13 novembre 2019 à 17:52:45

          Je comprends le principe mais tu as bien fait une tambouille (ton expression) pour développer 2 normalizer. Je me pose la question de l'intérêt mais sans doute parce que je n'ai pas eu le besoin n'ayant qu'une seule API pour le sujet météo.

          Bye

          • Partager sur Facebook
          • Partager sur Twitter
            20 novembre 2019 à 11:59:07

            Pour dire de te donner un autre exemple concret, j'ai ça à te proposer. (exemple fictif)

            Je souhaite développer une application qui me permet de gérer des films. Je veux que lorsque je donne le nom du film, mon application me fournisse le nom du réalisateur, sa date de parution, ...

            J'ai trouvé 3 API différentes en qui j'ai confiance pour me donner des données réelles. Le souci, c'est qu'elles retournent des structure de données différentes (par exemple, l'une retourne les données avec des clefs en Français, l'autre en anglais, et la 3ème sépare le nom et le prénom du réalisateur dans 2 champs séparés).

            Je fais un appel à la première API qui n'a malheureusement pas l'info sur le film que je cherche, je fais donc un appel à la seconde qui possède le film et me le retourne.

            Le souci, c'est que dans mon application à moi, je ne veux pas avoir 3 classes de représentations différentes en fonction d'où viennent mes données. Je vais donc utiliser un normalizer par API pour retourner toujours la même classe de données.

            J'espère que ça aura pu t'aider quant à l'utilité de la tambouille! :D

            • Partager sur Facebook
            • Partager sur Twitter
              21 novembre 2019 à 9:19:20

              Avec un certain délai de réponse ... ;)

              J'ai bien compris mais la question que je me pose c'est l'intérêt de passer par ces normalizer juste pour afficher. J'aurai compris si tu stockais les données - donc avoir un seul modèle - mais ce n'est pas ton cas.

              Si je comprends bien tu fais :

              interro API => "tambouille" normalizer spécifique API => enregistrement classe générique => affichage par interro classe générique

              vs 

              interro API => "tambouille" décodage spécifique API => transmission vue

              Pour info, pour les film moi j'utilise l'api d'imdb.

              Bye

              • Partager sur Facebook
              • Partager sur Twitter

              Convertir les données d'API vers mon modèle

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown