[Actualité] [Tutoriel] Produire des données au format JSON en PHP
par
, 01/01/2017 à 10h59 (7865 Affichages)
Comme annoncé dans le billet précédant, montrons comment notre serveur PHP peut renvoyer des objets JSON.
1/ Le serveur web et base de données
Pour ce faire le seul pré-requis est de disposer d'un serveur Apache avec le module PHP et d'une base de données. De nombreux hébergeurs du Cloud en proposent. L'objet de ce billet n'étant pas de faire de la pub pour les hosters, je vous laisse le choix de l’hébergeur.
Afin que ce que je montre soit parfaitement reproductible pour le lecteur je m'affranchirai de la problématique d'hébergement en utilisant un serveur que j'héberge sur mon PC. J'ai opté pour le serveur Apache + PHP + MySQL tout en un. Comme mon PC est sous linux, j'ai choisi XAMP. Mais quel que soit votre système d’exploitation vous pourrez télécharger une version XAMP idoine.
2/ Le cahier des charges
Rappelons que notre client attend une liste d'outils sous la forme d'un tableau d'objets au format JSON.
Nous stockerons donc les outils dans une base de données (MySQL). Le serveur PHP devra donc permettre d'extraire les données de la base et les envoyer au client au format JSON. Il faudra changer une seule donnée sur le serveur.
Pour tester notre serveur nous changerons dans le client xhr.open("GET", "data.json", true); par xhr.open("GET", "jsonfactory.php", true); jsonfactory.php étant le fichier PHP qui nous restera à développer dans ce tuto.
3/ La base de données
L'utilitaire d'administration PhpMyAdmin permet de configurer la table outils et de la remplir aisément. Si vous gérez à la main votre base de donnée, voici le script de création de la table et de peuplement
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 -- -- Création de la table `outils` CREATE TABLE `outils` ( `id` int(11) NOT NULL, `nom` varchar(255) NOT NULL, `description` varchar(255) NOT NULL, `qte` int(11) NOT NULL, `prix` int(11) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- -- Contenu de la table `outils` -- INSERT INTO `outils` (`id`, `nom`, `description`, `qte`, `prix`) VALUES (1, 'marteau', 'pour enfoncer des clous', 5, 22), (2, 'tournevis', 'pour ouvrir le pot de peinture', 6, 30), (3, 'tenailles', 'pour arracher les dents', 8, 11), (4, 'pinces multiples', 'pour bricoler le dimanche', 22, 35), (5, 'cle de 12', 'pour reparer le tracteur', 2, 85);
Comme on le remarquera dans le script PHP cette table est chez moi localisée dans la base user et j'ai créé un utilisateur user (mot de passe «user») ayant l'autorisation de manipuler en lecture les données de cette table.
4/ Développement PHP
Ce sera en réalité très simple car il suffit de :
- Lire (via l'objet standard du langage PDO) toute les données de la table outils
- Mettre ces données dans un tableaux d'objets
- Encoder le tableau au format JSON
- Envoyer la chaine JSON comme réponse au client
Voici le script de la page jsonfactory.php
5/ Conclusions
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 <?php try { $bdd = new PDO('mysql:host=localhost;dbname=user;charset=utf8', 'user', 'user'); } catch (Exception $e) { die('Erreur : ' . $e->getMessage()); } $query = $bdd->query("Select * from outils"); $outils = array(); while ($outil = $query->fetch()) array_push($outils, array("nom" => $outil["nom"], "desc" => $outil["description"], "qte" => $outil["qte"], "prix" => $outil["prix"])); echo(json_encode($outils)); ?>
On a vu qu'il est aisé de produire des données JSON au profit d'un client JavaScript à partir d'un serveur PHP. Mais je vous rassure, Java – C# - JavaScript sont des langages cotés serveur qui permettent de produire du JSON aussi facilement.
JSON étant le format utilisé pour 90% des Web Services (REST), on imagine bien que l'étape suivante est la production de web services.