PHP Rest
Utilisation de PHP pour le développement de client et serveurs REST
Les modèles de données et autres informations intéressantes concernant REST
REST utilise les standards mais n’en est pas un http://www.xfront.com/REST-Web-Services.html
REST Data format confusion http://www.peej.co.uk/articles/rest-data-formats.html
Interview imaginaire décrivant les avantages de REST http://duncan-cragg.org/blog/post/getting-data-rest-dialogues/
HTTP 1.1 RFC
Definition de REST sur Wikipedia
Utilisation de Zend Framework
ZendRestClient et ZendRestServer
Utilisation de PEAR HTTP_Request
Voici un exemple de classe “client rest” basé sur PEAR HTTP_Request:
require_once “HTTP/Request.php”;
class RESTClient {
private $root_url = “”;
private $curr_url = “”;
private $user_name = “”;
private $password = “”;
private $response = “”;
private $responseBody = “”;
private $req = null;
public function __construct($root_url = “”, $user_name = “”, $password = “”) {
$this->root_url = $this->curr_url = $root_url;
$this->user_name = $user_name;
$this->password = $password;
if ($root_url != “”) {
$this->createRequest(”GET”);
$this->sendRequest();
}
return true;
}
public function createRequest($url, $method, $arr = null) {
$this->curr_url = $url;
$this->req =& new HTTP_Request($url);
if ($this->user_name != “” && $this->password != “”) {
$this->req->setBasicAuth($this->user_name, $this->password);
}
switch($method) {
case “GET”:
$this->req->setMethod(HTTP_REQUEST_METHOD_GET);
break;
case “POST”:
$this->req->setMethod(HTTP_REQUEST_METHOD_POST);
$this->addPostData($arr);
break;
case “PUT”:
$this->req->setMethod(HTTP_REQUEST_METHOD_PUT);
// to-do
break;
case “DELETE”:
$this->req->setMethod(HTTP_REQUEST_METHOD_DELETE);
// to-do
break;
}
}
private function addPostData($arr) {
if ($arr != null) {
foreach ($arr as $key => $value) {
$this->req->addPostData($key, $value);
}
}
}
public function sendRequest() {
$this->response = $this->req->sendRequest();
if (PEAR::isError($this->response)) {
echo $this->response->getMessage();
die();
} else {
$this->responseBody = $this->req->getResponseBody();
}
}
public function getResponse() {
return $this->responseBody;
}
}
Son utilisation est très simple, en voici un exemple:
require_once “RESTclient.php”;
$rest = new RESTclient();
$inputs = array();
$inputs["appid"] = “YahooDemo”;
$inputs["street"] = “701 First Street”;
$inputs["city"] = “Sunnyvale”;
$inputs["state"] = “CA”;
$url = “http://api.local.yahoo.com/MapsService/V1/geocode/”
$rest->createRequest(”$url”,”POST”,$inputs);
$rest->sendRequest();
$output = $rest->getResponse();
echo $output;