Créé en 2021 et modifié le 19 May 2021

Créé en 2021 et modifié le 19 May 2021

Réaliser son API avec des attributs dans l’URI

 

Intro

Livrable gitlab : finder/mission00/…

 

Partie 1  – Hôtel Amor

La base de données

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

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 mysql pour 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 SQLite. Adminer fonctionne aussi avec SQLite :

  •  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 flask
  • Connectez vous à la base de données par défaut mabase.db grâce à adminernopass.php
  • Cré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 suite
  • Observer 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

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)