web-dev-qa-db-fra.com

PHP REST Clients

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?

34
Jamie Rumbelow

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.

38
Matt Zukowski

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:

  • corps d'entités en streaming
  • interruption exponentielle
  • un proxy direct de mise en cache intégré
  • biscuits
  • enregistrement
  • connexions persistantes gérées
  • demandes parallèles
  • OAuth
  • une architecture de plugin 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

36
Michael Dowling

J'ai tendance à utiliser simplement le PHP intégré support cURL . Le CURLOPT_CUSTOMREQUEST option vous permet de faire PUT/DELETE etc.

13
ceejayoz

exemple simple en php pour le reste du client - la mise à jour est donnée 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);
?>

exemple simple en php pour le reste du client - la suppression de categoryid = xx est donnée 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);
?>
8
user1099325

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:

5
shurikk

J'ai eu un bon succès avec Zend Rest Client

2
catsby

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;
 });
1
Evertonvps

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/ ) .

1
David Weinraub