[color=#ff0000;]EDIT : MAJ le 11/10/2016, nouveau lien pour DL les source : [/color]
Dernièrementje vous parlé des WebService (WS) et de REST (http://forum.animese...les-webservice/), voici aujourd'hui un tutoriel surla façon de concevoir des WebService de façon assez basic.
note : Cette article s'adresse au développeur ayant une bonne approche des technologie du Web (PHP, Ajax, etc...).
Sommaire:
[*]Le besoin
[*]La définition des spécifications
[*]Le code
[/list]
1. Le Besoin
Avant de commencer à coder il faut savoir ce que l'on doit coder, en effet les WS devront répondre a un certain besoin dont l'utilisateur a accès et afin de garantir la pérennité du WS il est or de question que se dernier subisse des modifications après sa mise en ligne (ormie pour l'optimisation du code ou l'ajout de ressource).
Afin de mieux démontrer la marche a suivre je vais prendre un exemple relativement simple: "La gestion d'utilisateur".
Je vais donc me mettre en condition :
"Je souhaite mettre à la disposition un WS permettant de gérer une liste d'utilisateur. Chaque utilisateur aura: un nom, un prénom, un pseudo et un mot de passe. Le WS permettra d'avoir la liste desutilisateur, d'afficher un utilisateur, de le modifier, de le supprimer et enfin d'en ajouter un."
Voilà j'ai mon besoin, les mots souligner sont ce qu'il y a retenir, on peut donc déjà prévoirqu'on aura une BDD pour stocker les utilisateurs et que l'on pourra faire différente action dessus.
Dans cette exemple la liste d'utilisateur sera commune à tous les utilisateur du WS, on pourrait facilement penser un système d'authentification (avec une inscription aupréalable sur le site fournissant le WS) permettant a chaque utilisateur du WS d'avoir sa propre liste d'utilisateur.
2. La définition des spécifications
Voilà,maintenant que j'ai mon besoin je peux vraiment commencer la conception du WS avec la définition des spécifications.
Revoyons les actions que permettra le WS:
[*]Fournir la liste des utilisateurs (ressource 1).
[*]Afficher un utilisateur (ressource 2).
[*]Modifier un utilisateur (ressource 2).
[*]Supprimer un utilisateur (ressource 2).
[*]Ajouter un utilisateur (ressource 2).
[/list]
On peut donc constater que l'on aura 5 possibilité que l'on peut séparer en deux ressource,la première concernant la liste des utilisateur et la seconde conserant les utilisateurs a l'unité.
Deux ressource donc deux URI, pour l'exemple le WS sera héberger sur un site fictif que l'on nommera [color=#0000FF;][/color]et les WS seront dans le répertoire [color=#0000FF;]/WEBSERVICE[/color][color=#0066CC;]/Utilisateur[/color],les WS seront donc accessible depuis cette adresse:
[color=#0000FF;][/color][color=#0000FF;]/WEBSERVICE[/color][color=#0066CC;]/Utilisateur[/color].
Ma premièreressource sera accessible via l'URI: [color=#0000FF;][color=#0000FF;][/color]/[/color]et la seconde: [color=#0000FF;][/color].
Voyons maintenant plus en détail les spécifications:
Ma premièreressource permet d'obtenir la liste des utilisateurs:
[*]Elle ne prendra aucun paramètre.
[*]Elle sera appelée via la méthode par défaut (GET).
[*]Elle retournera un tableaux de tableaux en JSON sous cette forme [{"Utilisateur_ID":"1","Utilisateur_Nom":"Nom Utilisateur 1","Utilisateur_Prenom":" Prenom Utilisateur 1","Utilisateur_Pseudo":"Pseudo Utilisateur 1","Utilisateur_Pass":"Pass Utilisateur 1"},{"Utilisateur_ID":"2","Utilisateur_Nom":"Nom Utilisateur 2","Utilisateur_Prenom":" Prenom Utilisateur 2","Utilisateur_Pseudo":"Pseudo Utilisateur 2","Utilisateur_Pass":"Pass Utilisateur 2"}, etc...] .
[*]Elle sera appelée via l'URI:[color=#0000FF;][color=#0000FF;][/color]/.[/color]
[/list]
Ma deuxième ressource permet plusieurs actions:
- Affiche run utilisateur.
[*]Elle prendra en paramètre l'ID de l'utilisateur a affiché sous forme application/x-www-form-urlencoded ex: "ID=1".
[*]Elle sera appelée via la méthode par défaut (GET).
[*]Elle retournera un tableau en JSON sous cette forme {"Utilisateur_ID":"1","Utilisateur_Nom":"Nom Utilisateur","Utilisateur_Prenom":" Prenom Utilisateur","Utilisateur_Pseudo":"Pseudo Utilisateur","Utilisateur_Pass":"Pass Utilisateur"}.
[*]Elle sera appelé via l'URI: [color=#0000FF;][/color] où [color=#0000FF;][color=#000000;][color=#0000FF;][/color][/color]/ID/[/color] (ID étant l'ID de l'utilisateur que l'on souhaite obtenir).
[/list]
- Modifier un utilisateur.
[*]Elle prendra en paramètre un tableau en JSON sous cette forme {"Utilisateur_ID":"1","Utilisateur_Nom":"Nom Utilisateur","Utilisateur_Prenom":" Prenom Utilisateur","Utilisateur_Pseudo":"Pseudo Utilisateur","Utilisateur_Pass":"Pass Utilisateur"}.
[*]Elle sera appelé via la méthode PUT.
[*]Elle retournera un booléen.
[*]Elle sera appelée via l'URI: [color=#0000FF;][/color].
[/list]
- Supprimerun utilisateurs.
[*]Elle prendra en paramètre l'ID de l'utilisateur a affiché sous forme application/x-www-form-urlencoded ex: "ID=1".
[*]Elle sera appelé via la méthode DELETE.
[*]Elle retournera un booléen.
[*]Elle sera appelé via l'URI: [color=#0000FF;][color=#000000;][color=#0000FF;][/color][/color][/color].
[/list]
- Ajouter unutilisateur
[*]Elle prendra en paramètre un tableaux en JSON sous cette forme {"Utilisateur_Nom":"Nom Utilisateur","Utilisateur_Prenom":" Prenom Utilisateur","Utilisateur_Pseudo":"Pseudo Utilisateur","Utilisateur_Pass":"Pass Utilisateur"}.
[*]Elle sera appelée via la méthode POST.
[*]Elle retournera un booléen.
[*]Elle sera appelée via l'URI: [color=#0000FF;][/color].
[/list]
Voilà j'ai mes spécification, elles me permettront de coder le WS et à l'utilisateurd'utiliser le WS correctement.
3. Le code
Pour la suite je vous invite à télécharger le fichier de ressource suivant:
Et voici un package avec Uwamp préconfigurer et pres a l'emploie
Il contient:
[*]Le WS.
[*]Un exemple d'utilisation en Ajax.
[*]Un exemple d'utilisation en C# (pour les utilisateurs de Linux et Max, je n'est pas testé la compatibilité avec mono runtime).
[/list]
Pour les exemples en Ajax et en C# il faudra que vous modifier les URI avec celle que vous obtiendrez en installant le WS sur votre PC via un serveur AMP ou sur un serveur en ligne. Pour l'exemple Ajax il suffit de modifier les deux variable en haut du fichier script.js, pour l'exemple C# il faut modifier le fichierParam.xml.
Le répertoireWEBSERVICE contient deux répertoires et un fichier nommé .htaccess, il va permettre de faire de l'URL rewriting, voici sont contenu :
[*]RewriteEngine On
[*]RewriteBase /WEBSERVICE
[*]RewriteRule ^Utilisateur/Utilisateur/{:content:}nbsp; Utilisateur/Utilisateur.php [L]
[*]RewriteRule ^Utilisateur/Utilisateur/([0-9]+)/{:content:}nbsp; Utilisateur/Utilisateur.php?ID=$1 [L]
[*]RewriteRule ^Utilisateur/LstUtilisateurs/{:content:}nbsp; Utilisateur/LstUtilisateurs.php [L]
[/list]
La première ligne indique que l'on active la réécriture d'URL (il faut que le serveur le gère,pour apache il y a un module a activé sil il n'est pas activé par défaut), la seconde ligne le répertoire a partir duquel on va faire les réécritures. Lestrois dernières lignes permettent de faire la réécriture. On peut constater quela réécriture n'est pas importante (ajout de l'extension .php) mais si on veut garantir l'indépendance du langage utilisé il faut impérativement faire ce genre de réécriture.
Si l'on décidé de changé le langage du WS on aurait juste à modifier ce fichier pour garantirla pérennité des URI
ex:
RewriteRule ^Utilisateur/LstUtilisateurs/$ Utilisateur/LstUtilisateurs.php [L]
deviendrait
RewriteRule ^Utilisateur/LstUtilisateurs/$Utilisateur/LstUtilisateurs.asp [L]
si l'on passerai de PHP a ASP, l'URI resterai la même: Utilisateur/LstUtilisateurs/.
Pour le code PHP je vous laisse la joie de le lire, il n'y a pas de commentaire mais il reste relativement simple, voici quand même quelque explication:
[color=#708090;]ws_utilisateurs.sql[/color] permet de créé la table dans la base de donnée, il vous faudra ensuite modifierle fichier [color=#708090;]param_bd.php[/color] avec votre configuration.
Le fichier [color=#708090;]rest.php[/color] permet de créé les variable global [color=#0000ff;]$_POST[/color], [color=#0000ff;]$_PUT[/color] et[color=#0000ff;] $_DELETE[/color] a partir de donné en JSON ou en XML, pour se faire il utilise la fonction[color=#696969;] file_get_contents[/color]("") qui permet de récupéré en brut les paramètre envoyé au serveur.
Les fichiers [color=#708090;]LstUtilisateurs.php[/color] et [color=#708090;]Utilisateur.php[/color] utilise la variable [color=#0000ff;]$_SERVER[[/color]'REQUEST_METHOD'[color=#0000ff;]][/color] pour connaitre la méthode utilisé puis utilise une condition "Selon" pour effectuer sa tâche.
Pour le code en Ajax j'ai utilsé Jquery pour simplifier le code.
Le Code C# utilise un DataGridView couplé a une source de donnée créé a partir de la classe collection Lst_Utilisateurs (qui contient un list d'objet Utilisateur créé a partir des utilisateur envoyé par le WS).
Pour ceux que sa intérésse de voire se que donne un WS plus concéquent google propose via ces APIs des WS de type REST:
voici les spécification des WS pour google calendar:
(avec la possibilité de tester en ligne)
Si vous avez des questions ou des remarque a faire n'ésité pas.
Modifié par goldbergg, 11 octobre 2016 - 13:03.