Dans mes précédents billets, j'ai présenté REST_Client et REST_Puller. Ces 2 classes PHP ont été écrites rapidement à plusieurs mois d'intervalle dans des contextes différents puis rassemblées dans un unique package PEAR. La conséquence est un manque flagrant de cohérence. Et bien c'est maintenant terminé !
Refactoring
Par la volonté et l'aide de kerphi le package REST_Client a subit une grosse refactorisation. Nous avons soigné la POO en appliquant quelques grands motifs de conception et une interface objet à la mode. Un style de programmation que l'on trouve par exemple dans la librairie Swift. Maintenant le package s'utilise très simplement avec 2 classes REST_Client et REST_EasyClient.REST_EasyClient
Comme son nom l'indique, cette classe est simple et rapide à utiliser. Elle est idéale si l'on souhaite récupérer le résultat d'une ou plusieurs requêtes HTTP envoyées à un même serveur.
Exemples
echo REST_EasyClient::newInstance('fr.php.net')->get('/curl')->content; // La même chose avec un Proxy echo REST_EasyClient::newInstance('fr.php.net') ->setHttpProxy('proxy.exemple.com:8080') ->get('/curl') ->content; // la même chose façon vieille école ;-) $client = new REST_EasyClient('fr.php.net'); $client->setHttpProxy('proxy.exemple.com:8080'); $response = $client->get('/curl'); echo $response->content;
REST_Client
Contrairement à la classe précédente, REST_Client permet de maîtriser finement la construction de la requête HTTP et la façon de l'envoyer. REST_Client permet donc d'envoyer plusieurs requêtes plus ou moins différentes de manière synchrones ou asynchrones, le tout avec une interface d'utilisation identique.
Requêtes synchrones
Permet le lancement de plusieurs requêtes séquentiellement.
$r = REST_Request::newInstance() ->setProtocol('http') ->setHost('fr.php.net') ->setPort(80) ->setMethod('GET') ->setUrl('/curl'); $c = REST_Client::factory('sync', array('verbose' => false)); $id = $c->fire($r); $response = $c->fetch(); echo $response->id . PHP_EOL; echo $response->code . PHP_EOL; echo $response->content . PHP_EOL; $r->setUrl('/dom'); $id = $c->fire($r); $response = $c->fetch(); echo $response->id . PHP_EOL; echo $response->code . PHP_EOL; echo $response->content . PHP_EOL;
Requêtes asynchrones
Permet le lancement de plusieurs requêtes en parallèle et de manière asynchrone (Les résultats arrivent dans un ordre différent de l'ordre de lancement). Cette classe remplace feu REST_Puller.
$r = REST_Request::newInstance() ->setProtocol('http') ->setHost('fr.php.net') ->setHttpProxy('proxy.example.com'); $c = REST_Client::factory('sync', array( 'verbose' => false, 'queue_size' => 2, )); $urls = array('/dom','/curl','/strings', '/pcre', '/xml', '/ftp', '/sockets'); foreach($urls as $i => $url) { $id = $c->fire($r->get($url)); if ($i > $c->getOption('queue_size')) { $response = $p->fetch(); var_dump($response); } } while($response = $p->fetch()) { var_dump($response); }
Téléchargement et code source
Le code source est disponible sur GitHub : http://github.com/touv/rest_client
Ou, on peut directement l'installer avec PEAR en s'abonnant au Channel Respear :
% pear channel-discover pear.respear.net % pear install respear/REST_Client
Aucun commentaire:
Enregistrer un commentaire