PHP的REST客户端

我试图连接到一个RESTful的Web服务,但我有一些麻烦,尤其是通过PUT和DELETE发送数据时。 用cURL,PUT需要一个文件发送,而DELETE只是奇怪的。 我完全有能力使用PHP的套接字支持编写客户端,并自己编写HTTP头,但是我想知道您们是否曾经使用过或看过过REST客户端的PHP?

所以事实certificate,Zend_Rest_Client根本不是一个REST客户端 – 它不支持PUT和DELETE方法。 在试图将它与一个实际的RESTful服务结合起来后,我感到厌倦,并为PHP编写了一个适当的REST客户端:

http://github.com/educoder/pest

它仍然缺less一些东西,但如果它被拿起,我会把更多的工作放在里面。

以下是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下线。

更新:看起来不less人已经跳上了这个。 Pest现在支持HTTP身份validation以及一系列其他function,这要归功于GitHub上的贡献者。

我写了一个名为Guzzle的PHP HTTP客户端。 Guzzle是一个用于构buildREST Web服务客户端的HTTP客户端和框架。 你可以在它的网站上find关于Guzzle的更多信息,或者直接到github上的源代码: https : //github.com/guzzle/guzzle

Guzzle提供了大多数HTTP客户端提供的function(更简单的界面,所有HTTP方法以及查看请求/响应),还提供了其他高级function:

  • stream媒体实体
  • 指数退避
  • 一个内置的caching转发代理
  • cookies
  • logging
  • 托pipe持久连接
  • 并行请求
  • OAuth的
  • 一个插件架构,允许你实现任意的身份validationscheme
  • 从JSON服务描述文件自动生成客户端API

唯一的缺点:它需要PHP 5.3.3

我倾向于使用PHP的内置cURL支持 。 CURLOPT_CUSTOMREQUEST选项允许你做PUT / DELETE

在其他客户端的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); ?> 

我很长一段时间都找不到优雅的解决scheme,不喜欢cURL的实现,拿出我自己的。 它支持HTTPauthentication,redirect,PUT等,因为它依赖于pecl http模块。

实现非常简单,易于扩展。

更多信息可以在这里find:

我用Zend Rest Client取得了很好的成绩

复活这个话题,我发现这个库https://github.com/Respect/Rest/是非常容易使用的,但是网上的例子很less:

  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 \ Http \ Client ,是Zend Framework 2的一部分。

可以通过编辑器安装(尽pipe如此,不通过Packagist;仍然需要使用Zend的定制软件包仓库http://packages.zendframework.com/ )。