Réaliser son API avec des paramètres HTTP
Intro
- réaliser le diagramme de déploiement de votre application
Partie 1 – Hôtel Amor
route user – méthode GET, URI /user
- Ajouter un mot de passe à la table user
- Envoyer l’email et le mot de passe de connexion.html au serveur SLIM.
- Tester si l’email et le mot de passe existe grâce à une fonction et renvoyer le code 200 ou 401.
Exemple de code client JQ
$('#btn-valide').click(function(){ let id=$('#id').val(); let nom=$('#nom').val(); $.ajax({ type: "GET", contentType: 'application/json; charset=utf-8', url: "http://localhost/got/serveur/user?id="+id+"&nom="+nom, success: function(data){ alert(data); } }); });
Exemple de code client VueJS
<!doctype html> <html lang="fr"> <head> <link type="text/css" rel="stylesheet" href="https://unpkg.com/bootstrap/dist/css/bootstrap.min.css" /> <link type="text/css" rel="stylesheet" href="https://unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.css" /> <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script> <script src="https://unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.js"></script> <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script> </head> <div id="app"> <b-container> <input v-model="idc" placeholder="numéro de chambre"/> <button v-on:click="ajax(idc)">valider</button> </b-container> </div> <script> var app =new Vue({ el: '#app', data () { return { idc: 0 } }, methods: { ajax: function (idc, event) { axios({ method: 'get', url: 'http://frebourg.es/api/index.php/chambre?idc='+idc, responseType: 'json', }) .then(async res => { if(res.status === 200) { alert('Ok!'); this.info=res.data; } else if(res.status === 400) { let errorResponse = await res.json(); this.errors.push(errorResponse.error); } }) } } }) </script> </html>
Exemple d’ajout de code index.php
$app->post('/user', function(Request $request, Response $response){ $tb = $request->getQueryParams(); $id = $tb["id"]; $nom = $tb["nom"]; //fonction de vérification d'utilisateur return checkUser($id, $nom); }); function checkUser($id, $nom) { $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().'}'; } }
route user – méthode POST, URI /user
- Réaliser un formulaire d’inscription d’utilisateur inscription.html.
- Permettre l’ajout de l’utilisateur dans la base de données.
Exemple de code client
$('#btn-valide').click(function(){ let id=$('#id').val(); let nom=$('#nom').val(); $.ajax({ type: "POST", contentType: 'application/json; charset=utf-8', url: "http://localhost/got/serveur/user?id="+id+"&nom="+nom, success: function(data){ alert(data); } }); });
Exemple d’ajout de code index.php
$app->post('/user', function(Request $request, Response $response){ $tb = $request->getQueryParams(); $id = $tb["id"]; return insertUser($id, $nom); }); function insertUser($id, $nom) { $sql = "INSERT ..."; ... }
Partie 2 – Hôtel Byzance
route user – méthode GET, URI /user
- Ajouter un mot de passe à la table user
- Envoyer l’email et le mot de passe de connexion.html au serveur.
- Tester si l’email et le mot de passe existe grâce à une fonction et renvoyer le code 200 ou 401.
Exemple de code serveur
app.get('/gateaux', function(req,res,next){ nom= req.query.nom; console.log( nom); connection.query('SELECT * from gateau', function (error, results, fields) { if (error) throw error; res.json({message : results}); }); })
route user – méthode POST, URI /user
- Permettre l’ajout de l’utilisateur dans la base de données depuis inscription.html.
Exemple de code serveur
connection.connect(); app.use(express.json()); app.post('/user'), function(req,res){ var id= req.query.id; var nom= req.query.nom; connection.query('insert into gateau values('+id+',"'+nom+'")', function (error, results, fields) { if (error) throw error; }); res.json({ message : "Gateau ajouté"}); })
Partie 3 – Hôtel Caraïbes
route user – méthode GET, URI /user
- Ajouter un mot de passe à la table user
- Envoyer l’email et le mot de passe de connexion.html au serveur.
- Tester si l’email et le mot de passe existe grâce à une fonction et renvoyer le code 200 ou 401.
Exemple de code serveur
from flask import Flask from flask import request from flask import jsonify #from flaskext.mysql import MySQL import json import sqlite3 as sql app = Flask(__name__) CORS(app) #mysql = MySQL() #app.config['MYSQL_DATABASE_USER'] = 'root' #app.config['MYSQL_DATABASE_PASSWORD'] = '' #app.config['MYSQL_DATABASE_DB'] = 'patisserie' #app.config['MYSQL_DATABASE_HOST'] = 'localhost' #app.config['MYSQL_DATABASE_SOCKET'] = '' #mysql.init_app(app) @app.route('/personnage', methods=['GET']) def ma_fonction(): #conn = mysql.connect()#cursor = conn.cursor() #cursor.execute('select * from gateau') #id = request.values.get('id') #nom = request.values.get('nom') id=str(1) con = sql.connect("mabase.db") con.row_factory = sql.Row cur = con.cursor() cur.execute("select * from user where id="+id) 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)
route user – méthode POST, URI /user
- Permettre l’ajout de l’utilisateur dans la base de données depuis inscription.html.
Exemple de code serveur
from flask import Flask from flask_cors import CORS from flask import request #from flaskext.mysql import MySQL import json import sqlite3 as sql app = Flask(__name__) CORS(app) #mysql = MySQL() #app.config['MYSQL_DATABASE_USER'] = 'root' #app.config['MYSQL_DATABASE_PASSWORD'] = '' #app.config['MYSQL_DATABASE_DB'] = 'patisserie' #app.config['MYSQL_DATABASE_HOST'] = 'localhost' #app.config['MYSQL_DATABASE_SOCKET'] = '' #mysql.init_app(app) @app.route('/user', methods=['POST']) def ma_fonction(): id = request.values.get('id') nom = request.values.get('nom') #conn = mysql.connect() #cursor = conn.cursor() #cursor.execute('insert into gateau values('+id+',"'+nom+'")') con = sql.connect("database.db") con.row_factory = sql.Row cur = con.cursor() cur.execute('insert into gateau values('+id+',"'+nom+'")') con.commit() msg = "Record successfully added" except: con.rollback() msg = "error in insert operation" finally: con.close() if __name__ == '__main__': app.run(debug=True)