35

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

4

8 に答える 8

39

したがって、結局のところ、Zend_Rest_ClientはRESTクライアントではありません。たとえば、PUTメソッドとDELETEメソッドをサポートしていません。実際のRESTfulサービスで動作するようにそれを理解しようとした後、私はうんざりして、PHP用の適切なRESTクライアントを作成しました。

http://github.com/educoder/pest

それはまだいくつかのことが欠けていますが、それが拾われたら、私はそれにもう少し作業を入れます。

OpenStreetMapRESTサービスの使用例を次に示します。

<?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に切り替える可能性があります。

更新:かなりの数の人々がこれに飛びついたようです。Pestは、GitHubの寄稿者のおかげで、HTTP認証やその他の多くの機能をサポートするようになりました。

于 2011-01-20T17:26:03.657 に答える
38

GuzzleというPHPHTTPクライアントを作成しました。Guzzleは、RESTWebサービスクライアントを構築するためのHTTPクライアントおよびフレームワークです。Guzzleの詳細については、そのWebサイトを参照するか、githubのソースに直接アクセスしてください:https ://github.com/guzzle/guzzle

Guzzleは、ほとんどのHTTPクライアントが提供する優れた機能(よりシンプルなインターフェイス、すべてのHTTPメソッド、および要求/応答の表示)を提供しますが、その他の高度な機能も提供します。

  • ストリーミングエンティティ本体
  • 指数バックオフ
  • 組み込みのキャッシングフォワードプロキシ
  • クッキー
  • ロギング
  • 管理された持続的接続
  • 並列リクエスト
  • OAuth
  • 任意の認証スキームを実装できるプラグインアーキテクチャ
  • JSONサービス記述ファイルからのクライアントAPIの自動生成

唯一の欠点:PHP5.3.3が必要です

于 2011-10-12T01:24:26.077 に答える
13

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

于 2009-05-21T18:17:41.970 に答える
8

残りのクライアントの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);
?>
于 2011-12-15T07:37:56.067 に答える
5

私は長い間エレガントな解決策を見つけることができず、cURLの実装が好きではなく、自分で考え出しました。pecl httpモジュールに依存しているため、HTTP認証、リダイレクト、PUTなどをサポートします。

実装は素晴らしく、シンプルで、拡張も簡単です。

詳細については、こちらをご覧ください。

于 2011-09-20T20:41:01.250 に答える
2

ZendRestClientで大成功を収めました

于 2009-05-21T19:34:23.250 に答える
1

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

Composer経由でインストール可能(ただし、この記事の執筆時点では、Packagist経由ではありません。Zendのカスタムパッケージリポジトリhttp://packages.zendframework.com/を使用する必要があります)。

于 2012-11-28T16:09:38.777 に答える
1

トピックを復活させると、このライブラリhttps://github.com/Respect/Rest/は非常に使いやすいことがわかりましたが、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;
 });
于 2012-07-31T13:08:19.790 に答える