J'essaie de me connecter à un service Web RESTful, mais j'ai des problèmes, en particulier lors de l'envoi de données via PUT et DELETE. Avec cURL, PUT nécessite l'envoi d'un fichier et DELETE est tout simplement bizarre. Je suis parfaitement capable d'écrire un client en utilisant le support de socket de PHP et d'écrire moi-même les en-têtes HTTP, mais je voulais savoir si vous avez déjà utilisé ou vu un client REST pour PHP?
Ainsi, il s'avère que Zend_Rest_Client n'est pas du tout un client REST - il ne prend pas en charge les méthodes PUT et DELETE par exemple. Après avoir essayé de le pousser à travailler avec un service RESTful réel, je en a eu marre et a écrit un bon client REST pour PHP:
http://github.com/educoder/pest
Il manque encore quelques choses, mais s'il est récupéré, je vais y mettre plus de travail.
Voici un exemple d'utilisation avec le service OpenStreetMap REST:
<?php
/**
* This PestXML usage example pulls data from the OpenStreetMap API.
* (see http://wiki.openstreetmap.org/wiki/API_v0.6)
**/
require_once 'PestXML.php';
$pest = new PestXML('http://api.openstreetmap.org/api/0.6');
// Retrieve map data for the University of Toronto campus
$map = $pest->get('/map?bbox=-79.39997,43.65827,-79.39344,43.66903');
// Print all of the street names in the map
$streets = $map->xpath('//way/tag[@k="name"]');
foreach ($streets as $s) {
echo $s['v'] . "\n";
}
?>
Actuellement, il utilise curl mais je peux le basculer sur HTTP_Request ou HTTP_Request2 sur toute la ligne.
Mise à jour: On dirait que pas mal de gens ont sauté dessus. Pest prend désormais en charge l'authentification HTTP et un tas d'autres fonctionnalités grâce aux contributeurs sur GitHub.
J'ai écrit un PHP client HTTP appelé Guzzle. Guzzle est un client HTTP et un framework pour construire REST clients de services Web. Vous pouvez trouver plus d'informations sur Guzzle sur son - site Web , ou allez directement à la source sur github: https://github.com/guzzle/guzzle
Guzzle fournit des avantages que la plupart des clients HTTP fournissent (une interface plus simple, toutes les méthodes HTTP et l'affichage de la demande/réponse), mais fournit également d'autres fonctionnalités avancées:
Le seul inconvénient: il nécessite PHP 5.3.3
J'ai tendance à utiliser simplement le PHP intégré support cURL . Le CURLOPT_CUSTOMREQUEST
option vous permet de faire PUT
/DELETE
etc.
<?php
$url ="http://example.com";
$data = "The updated text message";
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); //for updating we have to use PUT method.
curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
$result = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
?>
<?php
$url ="http://example.com/categoryid=xx";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
$result = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
?>
Je n'ai pas été en mesure de trouver une solution élégante pendant longtemps, je n'ai pas aimé les implémentations cURL, j'ai trouvé la mienne. Il prend en charge l'authentification HTTP, les redirections, PUT, etc. car il repose sur le module http pecl.
La mise en œuvre est agréable et simple, facile à étendre.
Plus d'informations peuvent être trouvées ici:
J'ai eu un bon succès avec Zend Rest Client
Ressuscitant le sujet, j'ai trouvé que cette bibliothèque https://github.com/Respect/Rest/ est très facile à utiliser , mais il existe peu d'exemples sur le Web:
require_once 'bootstrap.php';
require_once 'Respect/Rest/Router.php';
require_once 'Respect/Rest/Request.php';
use Respect\Rest\Router;
$router->post('/myApp/', function() {
$data_back = json_decode(file_get_contents('php://input'));
// var_dump($data_back);
return json_encode($data_back);
});
$router->get('/myApp/*', function($id = null) {
$json = json_encode(MyService::getInstance()->list());
return utf8_encode($json);
});
$router->put('/myApp/*', function($id = null) {
return 'Update: ' . $id;
});
$router->delete('/myApp/*', function($id = null) {
return 'Delete: ' . $id;
});
Une arrivée récente est Zend\Http\Client , qui fait partie de Zend Framework 2.
Installable via composer (cependant, à ce jour, pas via Packagist; il faut toujours utiliser le référentiel de packages personnalisés de Zend http://packages.zendframework.com/ ) .