34 votes

Clients REST PHP

J'essaie de me connecter à un service web RESTful, mais je rencontre quelques difficultés, notamment lors de l'envoi de données par PUT et DELETE. Avec cURL, PUT nécessite un fichier à envoyer, et DELETE est tout simplement bizarre. Je suis parfaitement capable d'écrire un client en utilisant le support socket de PHP et en écrivant moi-même les en-têtes HTTP, mais je voulais savoir si vous aviez déjà utilisé ou vu un client REST pour PHP ?

38voto

Matt Zukowski Points 1297

Il s'avère donc que Zend_Rest_Client n'est pas du tout un client REST - il ne supporte pas les méthodes PUT et DELETE par exemple. Après avoir essayé de le faire fonctionner avec un vrai service RESTful, j'en ai eu assez et j'ai écrit un vrai client REST pour PHP :

http://github.com/educoder/pest

Il manque encore quelques éléments, mais s'il est repris, j'y travaillerai davantage.

Voici un exemple d'utilisation avec le service REST d'OpenStreetMap :

<?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";
}

?>

Pour l'instant, il utilise curl, mais il est possible que je passe à HTTP_Request ou HTTP_Request2 dans le futur.

Mise à jour : On dirait que beaucoup de gens ont sauté sur l'occasion. Pest prend maintenant en charge l'authentification HTTP et un tas d'autres fonctionnalités grâce aux contributeurs sur GitHub.

36voto

Michael Dowling Points 1729

J'ai écrit un client PHP HTTP appelé Guzzle. Guzzle est un client HTTP et un framework pour construire des clients REST pour les webservices. Vous pouvez trouver plus d'informations sur Guzzle sur son site web. site web ou allez directement à la source sur github : https://github.com/guzzle/guzzle

Guzzle offre les mêmes avantages que la plupart des clients HTTP (une interface plus simple, toutes les méthodes HTTP et l'affichage de la demande/réponse), mais il propose également d'autres fonctionnalités avancées :

  • corps d'entités en continu
  • backoff exponentiel
  • un proxy de mise en cache intégré
  • cookies
  • journalisation
  • connexions persistantes gérées
  • demandes parallèles
  • OAuth
  • une architecture de plugins qui vous permet d'implémenter des schémas d'authentification arbitraires
  • Génération automatique d'une API client à partir d'un fichier de description de service JSON

Le seul inconvénient : Il nécessite PHP 5.3.3

13voto

ceejayoz Points 85962

J'ai tendance à utiliser la fonction intégrée de PHP Support de cURL . En CURLOPT_CUSTOMREQUEST L'option vous permet de faire PUT / DELETE etc.

8voto

vadakken Points 110

Un exemple simple en php pour le reste client - mise à jour est donné ci-dessous :

<?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);
?>

Un exemple simple en php pour le reste du client - suppression de categoryid=xx est donné ci-dessous :

<?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);
?>

5voto

shurikk Points 241

Je n'ai pas pu trouver de solution élégante pendant longtemps, je n'aimais pas les implémentations cURL et j'ai créé la mienne. Elle supporte l'authentification HTTP, les redirections, PUT, etc. parce qu'elle repose sur le module http de pecl.

La mise en œuvre est agréable et simple, facile à étendre.

Vous trouverez de plus amples informations ici :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X