Réaliser son API avec des attributs dans l’URI
Intro
Livrable gitlab : finder/mission00/…
- réaliser le diagramme de classe des bases de données des 3 hôtels. On pourra utiliser https://app.diagrams.net/
Partie 1 – Hôtel Amor
La base de données
- Réaliser la base de données de l’Hotel Amor sur MySQL.
route chambre – méthode GET, URI /chambre/{id}
- Choisir et envoyer un id de chambre au serveur SLIM.
- Le serveur renverra la description de la chambre grâce à une fonction et un appel à la base de données.
Exemple de code client
$( document ).ready(function() { $('#btn-new-liste').click(function(){ let idx=$('#idx').val(); $.ajax({ type: "GET", url: "http://localhost/got/serveur/personnage/"+idx, success: function(data){ $("#result").html(data); } }); }); });
Exemple d’ajout de code index.php
$app->get('/personnage/{id}', function(Request $request, Response $response){ $id = $request->getAttribute('id'); return getPersonnage($id); }); function connexion() { return $dbh = new PDO("mysql:host=localhost;dbname=patisserie", 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')); } function getPersonnage($id) { $sql = "SELECT * FROM gateau"; try{ $dbh=connexion(); $statement = $dbh->prepare($sql); $statement->execute(); $result = $statement->fetchAll(PDO::FETCH_CLASS); return json_encode($result, JSON_PRETTY_PRINT); } catch(PDOException $e){ return '{"error":'.$e->getMessage().'}'; } }
Partie 2 – Hôtel Byzance
La base de données
- Réaliser la base de données de l’Hotel Byzance sous Postgresql .
- Lancer postgresl grâce à la ligne de commande
cd C:\Program Files\PostgreSQL\bin pg_ctl -D "C:\Program Files\PostgreSQL\data" start
- Connectez vous grâce à adminer à postgresql. Login postgres, mdp postgres, port 5432
route chambre – méthode GET, URI /chambre/{id}
- Installer le module pg
mysqlpour pouvoir accéder à une base de données.
npm install pg
- Choisir et envoyer un id de chambre au serveur.
- Le serveur renverra la description de la chambre grâce à une fonction et un appel à la base de données.
Exemple de code serveur
A ajouter au code précédent
var pg = require('pg'); /*var connection = pg.createConnection({ host : 'localhost', user : 'root', password : '', database : 'patisserie' });*/ var connectionString = "pg://postgres:[email protected]:5432/patisserie"; var connection= new pg.Client(connectionString); connection.connect(); app.get('/personnage/:nono',function(req,res,next){ nono= req.params.nono; console.log( nono); connection.query('SELECT * from gateau', function (error, results, fields) { if (error) throw error; res.json({ message : results}); }); })
Partie 3 – Hôtel Caraïbes
La base de données
Réaliser la base de données de l’Hotel Caraïbes sous MariaDB.
Décompresser le répertoire du dépot https://github.com/cherryclass/sqlite. Il contient sqlite, adminer sans mot de passe et une base mabase.db.Copier tous les fichiers du répertoire dans votre répertoire de projet flaskConnectez vous à la base de données par défaut mabase.db grâce à adminernopass.phpCréer une base de données en lançant sqlite3.exe en console et accéder à celle ci en ligne de commande. On pourra y accéder grâce à adminernopass.php par la suiteObserver et adapter le code en console de l’image suivante. Le fichier de la base n’est pas crée tant qu’il n’y a pas de table.
Le fichier de la base doit absolument être dans le répertoire qui contient index.py
route chambre – méthode GET, URI /chambre/{id}
- Installer le module flask-mysql pour pouvoir accéder à une base de données.
- Choisir et envoyer un id de chambre au serveur.
- Le serveur renverra la description de la chambre grâce à une fonction et un appel à la base de données.
Exemple de code serveur (obsolete, avec sqlite)
from flask import Flask from flask import request from flask import jsonify import json import sqlite3 as sql app = Flask(__name__) CORS(app) @app.route('/personnage/<nom>', methods=['GET']) def ma_fonction(nom): print(nom) con = sql.connect("mabase.db") con.row_factory = sql.Row cur = con.cursor() cur.execute("select * from user") data=[] rows = cur.fetchall(); for row in rows: data.append(list(row)) if len(data) != 0: return jsonify(data) else: return json.dumps({'error':str(data[0])}) conn.close() if __name__ == '__main__': app.run(debug=True)