Newsroom
Bien que les services REST soient très courants, j'ai étonnamment croisé peu de documentation française sur la réalisation d'une API REST. D'où cet article inspiré de cet autre article « Create a RESTFUL SERVICES API » de Srinivas Tamada.
Un service REST permet de mettre à disposition d'autres applications des ressources et non des fonctionnalités. Sa mise en place et son utilisation est donc beaucoup plus simple que SOAP. REST est donc fortement recommandé pour des cas simples où on cherche à effectuer des actions simples sur un contenu, comme tester l'existence d'un élément dans la base de données d'une application, ou le modifier.
Cas d'utilisation :
Les applications 1,2 et 3 peuvent être des applications Web, smartphone, etc. Elles peuvent être écrites en différents langages. Elles doivent juste pouvoir utiliser le protocole http.
En effet une architecture REST repose sur le protocole http, comme expliqué par Gérald Croes dans son blog : On accède à une ressource (par son URI unique) pour procéder à diverses opérations supportées nativement par HTTP.
On peut demander à :
Dans mon cas j'ai utilisé la libraire REST suivante : Rest.php
Il ne reste alors qu'à créer notre classe qui hérite de cette classe REST.
On définit dans cette classe:
Je veux que seules les URLs de la forme request/action_possible puissent accéder au service REST, les autres URLs seront reroutées vers une page 404.
/**
* Public method for access api.
* This method dynmically call the method based on the query string
* */
public function processApi($func){
$func = strtolower(trim(str_replace("/","",$_REQUEST['rquest'])));
if((int)method_exists($this,$func) > 0) $this->$func();
else $this->response('',404); // si la fonction n’existe pas, la réponse sera "Page not found".
}
Toutes les données sont encodées en json, format « polyglotte » exploitable par tous.
/**
* Encode array into JSON
*/
private function json($data){
if(is_array($data)){
return json_encode($data);
}
}
Vérifie que la ressource recherchée existe, si oui, renvoi des informations sur la ressource, sinon renvoi de 204 « Content not found ».
/**
* Vérification existence preco
* numanc : $numanc
*/
private function res_exist(){
if($this->get_request_method() != "GET"){ $this->response('',406); }
$my_preco=new Model_Precos;
$numanc=$this->_request['numanc'];
$res=$my_preco->fetchRow("numanc='$numanc'");
if(is_object($res)){
$this->response($this->json($res->toArray()), 200);
}else{
$this->response('',204);
}
}
/**
* Suppression preco
* numanc : $numanc
*/
private function suppr_res(){
if($this->get_request_method() != "DELETE"){ $this->response('',406); }
$my_preco=new Model_Precos;
$numanc=$this->_request['numanc'];
$ret=$my_preco->delete($numanc);
If($ret){
$success = array('status' => "Success", "msg" => "Element supprimé.");
$this->response($this->json($success),200);
}else{
$this->response('',204);
}
}
On note que pour chaque fonctionnalité il est systématiquement vérifié que la bonne méthode de l’entête est appelée.(DELETE, GET)… De même chaque variable est nettoyée et vérifiée avant d’être utilisée grâce à la fonction cleanInputs de la classe Rest.
On obtient donc la classe suivante: Rest_api.php
Pour tester votre API websrevice vous pouvez utiliser POSTMAN sur Chrome. Pour en savoir plus sur le fonctionnement du protocole http, vous pouvez consulter cet article de Julien PAULI : http://julien-pauli.developpez.com/tutoriels/web/http/
En espérant que cet article soit utile à certains !
Commentaires 7
un exemple concret, serait-ce possible ?
Par exemple vérifier l'existence d'un pseudo dans une table...
Je découvre par hasard les Services REST, et ce billet n'explique pas clairement comment utiliser ces deux api...
Merci
Claude
bonjour, un exemple d'appel d'une méthode(service) s'il vous plait
Nice one, this is what i wanted
cool, happy it can help!
c'est bien
mais ça ne permet pas du tout de voir comment à partir d'une requête Rest du type
http://xx/api.php/getusers, on arrive à nos fins
dommage
Bonjour,
pour arriver à tes fins tu dois modifier la fonction :
public function processApi($func) de manière à ne pas exiger $_REQUEST['rquest'] mais api.php dans ton URL.
hope it helps...
Raphaelle
Retrouvez un tuto complet (en anglais) sur le site de l'auteur de la librairie :-)
Je suis en train de le parcourir...
http://www.9lessons.info/2012/05/create-restful-services-api-in-php.html