web-dev-qa-db-ja.com

PHP RESTクライアント

RESTful Webサービスに接続しようとしていますが、特にPUTおよびDELETEを介してデータを送信する場合、いくつかの問題が発生しています。 cURLを使用すると、PUTは送信するファイルを必要とし、DELETEは単に奇妙です。 PHPのソケットサポートを使用してクライアントを記述し、HTTPヘッダーを自分で記述できますが、PHPのRESTクライアントを使用したことがありますか?

34
Jamie Rumbelow

結局のところ、Zend_Rest_ClientはRESTクライアントではありません。たとえば、PUTメソッドやDELETEメソッドをサポートしていません。うんざりし、適切なREST= PHPのクライアント:

http://github.com/educoder/pest

まだいくつかのものが欠けていますが、もしそれが手に入れば、もう少し作業をします。

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

?>

現在、curlを使用していますが、将来的にHTTP_RequestまたはHTTP_Request2に切り替えることがあります。

更新:多くの人がこれに飛びついたようです。 GestHubの貢献者のおかげで、PestはHTTP認証をサポートするようになりました。

38
Matt Zukowski

私は、PHPの組み込み cURLサポート を使用する傾向があります。 CURLOPT_CUSTOMREQUEST オプションを使用すると、PUT/DELETEなどを実行できます。

13
ceejayoz

残りのクライアントのphpの簡単な例-更新は以下のとおりです。

<?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の簡単な例-categoryid = xxの削除を以下に示します。

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

Zend Rest Client で成功しました

2
catsby

トピックを復活させると、このライブラリhttps://github.com/Respect/Rest/は非常に使いやすいことがわかりました、しかしウェブにはいくつかの例があります:

    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

最近到着したのは、Zend Framework 2の一部である Zend\Http\Client です。

composer(ただし、この記事の執筆時点では、Packagistではなく、Zendのカスタムパッケージリポジトリを使用する必要があります http://packages.zendframework.com/ ) 。

1
David Weinraub