RESTful Webサービスに接続しようとしていますが、特にPUTおよびDELETEを介してデータを送信する場合、いくつかの問題が発生しています。 cURLを使用すると、PUTは送信するファイルを必要とし、DELETEは単に奇妙です。 PHPのソケットサポートを使用してクライアントを記述し、HTTPヘッダーを自分で記述できますが、PHPのRESTクライアントを使用したことがありますか?
結局のところ、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認証をサポートするようになりました。
私は、PHPの組み込み cURLサポート を使用する傾向があります。 CURLOPT_CUSTOMREQUEST
オプションを使用すると、PUT
/DELETE
などを実行できます。
<?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);
?>
Zend Rest Client で成功しました
トピックを復活させると、このライブラリ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;
});
最近到着したのは、Zend Framework 2の一部である Zend\Http\Client です。
composer(ただし、この記事の執筆時点では、Packagistではなく、Zendのカスタムパッケージリポジトリを使用する必要があります http://packages.zendframework.com/ ) 。