PHP REST客户端

时间:2009-05-21 18:07:54

标签: php rest client

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

8 个答案:

答案 0 :(得分:38)

事实证明,Zend_Rest_Client根本不是REST客户端 - 例如它不支持PUT和DELETE方法。在尝试将其与实际的RESTful服务结合起来后,我厌倦了为PHP写了一个合适的REST客户端:

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。

更新:看起来很多人都对此有所了解。由于GitHub上的贡献者,Pest现在支持HTTP身份验证和许多其他功能。

答案 1 :(得分:36)

我写了一个名为Guzzle的PHP HTTP客户端。 Guzzle是用于构建REST Web服务客户端的HTTP客户端和框架。您可以在website上找到有关Guzzle的更多信息,或直接访问github上的来源:https://github.com/guzzle/guzzle

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

  • 流媒体实体
  • 指数退避
  • 内置缓存转发代理
  • 饼干
  • 登录
  • 托管持久连接
  • 并行请求
  • 的OAuth
  • 允许您实现任意身份验证方案的插件架构
  • 从JSON服务描述文件自动生成客户端API

唯一的缺点:它需要PHP 5.3.3

答案 2 :(得分:13)

我倾向于使用PHP的内置cURL supportCURLOPT_CUSTOMREQUEST选项允许您执行PUT / DELETE等。

答案 3 :(得分: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);
?>

答案 4 :(得分:5)

我很久没找到优雅的解决方案了,不喜欢cURL实现,想出了我自己的。它支持HTTP身份验证,重定向,PUT等,因为它依赖于pecl http模块。

实施简单,易于扩展。

可在此处找到更多信息:

答案 5 :(得分:2)

我在Zend Rest Client

取得了很大的成功

答案 6 :(得分:1)

恢复主题,我发现这个库 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;
 });

答案 7 :(得分:1)

最近的到来是Zend\Http\Client,是Zend Framework 2的一部分。

可以通过编写器安装(但是,在撰写本文时,不是通过Packagist;仍然需要使用Zend的自定义包存储库http://packages.zendframework.com/)。