CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Création et utilisation d'une API

ZZeetopp
ZZeetopp
Niveau 4
19 avril 2016 à 13:45:19

Bonjour à tous,

Avant de commencer, ma question va être très conceptuelle est assez ardue à expliquer. Je vais donc prendre un exemple concret pour vous aider à bien comprendre ma pensée.

Prenons l'exemple d'un site web de réservation de chambre d'hôtel avec l'adresse http://letoh.com. Nous utilisons Symfony pour le serveur et une base de données SQLite.
Notre site web comporte deux URL :

  • http://letoh.com/hotel/1

qui affiche les informations d'un hotel donné par son identifiant (ici l'hôtel n°1).

  • http://letoh.com/book/

qui réserve une chambre d'hôtel, les paramètres de la réservation sont donnés dans la requête POST

Nous avons donc deux contrôleurs : HotelController (qui affiche les informations d'un hôtel) et BookController qui insère une réservation dans la base de données. Ces deux contrôleurs effectuent des requêtes SQL qui, admettons, sont complexes.

Je souhaite maintenant créer une API (qui servira pour une application mobile, par exemple) qui sera accessible via l'URL http://api.letoh.com. Cette API renvoie des données au format JSON qui pourront être utilisées par mon application mobile.

  • http://api.letoh.com/hotel/1

Renvoie un fichier JSON contenant les informations de l'hôtel n°1.

  • http://api.letoh.com/book/

Insère une réservation dans la base de données et renvoie la réponse au format JSON (réussite ou échec).

Là aussi, nous avons deux contrôleurs pour traiter ces deux URL. Nous sommes d'accord, les requêtes effectuées par ces deux contrôleurs sont les mêmes que celles utilisées pour le site web.

Nous voilà au coeur de mon problème. Je suis obligé d'écrire deux fois la même chose.
J'ai pensé à une solution : les requêtes SQL sont uniquement écrites dans les contrôleurs de l'API. Exemple : un utilisateur se rend sur la page http://letoh.com/hotel/1.

  • Le contrôleur effectue une requête GET à l'API.
  • Le contrôleur de l'API effectue la requête SQL et renvoie le fichier JSON.
  • Le contrôleur du site web récupère le fichier JSON et met en forme la page HTML.

Le problème est : comment effectuer une requête HTTP depuis un serveur en PHP ? Surtout, est-ce que cette solution est propre ? Et vous, comment voyez-vous le problème ?

Merci beaucoup :)

Message édité le 19 avril 2016 à 13:47:34 par ZZeetopp
ZZeetopp
ZZeetopp
Niveau 4
19 avril 2016 à 14:20:07

Le 19 avril 2016 à 14:13:20 gamer1037564946 a écrit :
curl ?

mais je trouve ça bizare perso

Oui, moi aussi. Je vois pas d'autres solutions à part écrire deux fois les mêmes requêtes SQL.

ZZeetopp
ZZeetopp
Niveau 4
19 avril 2016 à 16:29:35

Le 19 avril 2016 à 15:39:13 gamer1037564946 a écrit :
extraire les requetes dans une classe ou une fonction que tu réutilisera ?

Possible, mais l'API et le site web ne sont pas sur le même serveur.

deepblue
deepblue
Niveau 16
19 avril 2016 à 17:57:06

Tu devrais t'intéresser à FOSRestBundle. D'une part parce que c'est top et d'autre part, ça te permet de construire une API un peu plus dans les règles de l'art. Tu ajoutes par dessus nelmio/api-doc-bundle et jms/serializer-bundle, tu vas devenir le roi du monde.

Si tu ne veux pas duppliquer le code qui génère ta requête, te le place dans dans ton controlleur.

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment